Class: Promote::Versioner

Inherits:
Object
  • Object
show all
Defined in:
lib/promote/versioner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = Config.new) ⇒ Versioner

Returns a new instance of Versioner.



7
8
9
10
11
12
13
# File 'lib/promote/versioner.rb', line 7

def initialize(config = Config.new)
  @config = config
  @git = Git.open(git_root(config.repo_root))
  version_tags = @git.tags.select { |t| t.name[/^[0-9\.]+/] }
  @current_tag = version_tags[-1]
  @sha1 = @git.log(10000).between(current_tag.sha).first.sha
end

Instance Attribute Details

#configObject

Returns the value of attribute config.



90
91
92
# File 'lib/promote/versioner.rb', line 90

def config
  @config
end

Instance Method Details

#version_cookbook(cookbook_name) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/promote/versioner.rb', line 15

def version_cookbook(cookbook_name)
  dir = File.join(config.cookbook_directory, cookbook_name)
  cookbook_name = File.basename(dir)
  version = version_number(current_tag, dir)
   = File.join(dir, "metadata.rb")
   = File.read()
  version_line = [/^\s*version\s.*$/]
  current_version = version_line[/('|").*("|')/].gsub(/('|")/,"")

  if current_version != version
     = .gsub(current_version, version)
    outdata = .gsub(/#sha1.*$/, "#sha1 '#{sha1}'")
    if outdata[/#sha1.*$/].nil?
      outdata += "#sha1 '#{sha1}'"
    end
    File.open(, 'w') do |out|
      out << outdata
    end
    return { :cookbook => cookbook_name, :version => version, :sha1 => sha1}
  end
end

#version_cookbooksObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/promote/versioner.rb', line 37

def version_cookbooks
  cookbooks = Dir.glob(File.join(config.cookbook_directory, "*"))
  results = []
  cookbooks.each do |file|
    cookbook = File.basename(file)
    result = version_cookbook(cookbook)
    if !result.nil?
      results << result
    end
  end
  cookbooks.each do |cookbook|
    berks_name = File.join(config.cookbook_directory, File.basename(cookbook), "Berksfile")
    if File.exist?(berks_name)
      berksfile = Berkshelf::Berksfile.from_file(berks_name)
      berksfile.install
    end
  end
  results
end

#version_data_bag(data_bag_path) ⇒ Object



57
58
59
# File 'lib/promote/versioner.rb', line 57

def version_data_bag(data_bag_path)
  version_json File.dirname(data_bag_path), File.basename(data_bag_path, File.extname(data_bag_path))
end

#version_data_bagsObject



61
62
63
64
65
66
67
68
69
70
# File 'lib/promote/versioner.rb', line 61

def version_data_bags
  results = []
  Dir.glob(File.join(config.data_bag_directory, "**", "*.json")).each do |file|
    result = version_data_bag(file)
    if !result.nil?
      results << result
    end
  end
  results
end

#version_environment(environment_name) ⇒ Object



72
73
74
75
76
# File 'lib/promote/versioner.rb', line 72

def version_environment(environment_name)
  version_json config.environment_directory, environment_name do | content | 
    content['override_attributes']
  end
end

#version_environmentsObject



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/promote/versioner.rb', line 78

def version_environments
  results = []
  Dir.glob(File.join(config.environment_directory, "*.json")).each do |file|
    environment = File.basename(file ,File.extname(file))
    result = version_environment(environment)
    if !result.nil?
      results << result
    end
  end
  results
end