clc-promote 0.3.16 → 0.4.0.dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/chef/knife/promote.rb +3 -18
- data/lib/promote.rb +1 -1
- data/lib/promote/git_repo.rb +44 -0
- data/lib/promote/versioner.rb +17 -29
- metadata +5 -5
- data/lib/promote/git_helper.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6f45fd73d1b227a41b7cdf7875e41e1ec64e631
|
4
|
+
data.tar.gz: 84006d5c54e5a894e07ff83564e07340d77fb1b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e195cea57475fb4ed28d85710a6239b378f2e667fe8f0f6589a0ee007f4831f8f0b113acec082b2b7280f4575ebcd2f9a7b640825dd92fa981c9207398bebee8
|
7
|
+
data.tar.gz: 1257b31c2149d871291f20d2610d9e1697fccea81a060823c3532b726486a6be369fe7cbb1dd18787baa6113c9d696154f10880364f158cd0639128e1634338c
|
data/lib/chef/knife/promote.rb
CHANGED
@@ -3,9 +3,6 @@ require 'promote'
|
|
3
3
|
|
4
4
|
module KnifePromote
|
5
5
|
class PromoteEnvironment < Chef::Knife
|
6
|
-
deps do
|
7
|
-
require 'git'
|
8
|
-
end
|
9
6
|
|
10
7
|
banner "knife promote environment SOURCE_ENVIRONMENT DESTINATION_ENVIRONMENT"
|
11
8
|
|
@@ -42,7 +39,9 @@ module KnifePromote
|
|
42
39
|
promoter.promote_to(source_env, dest_env)
|
43
40
|
|
44
41
|
ui.info "Commiting and pushing changes to #{dest_env} back to git"
|
45
|
-
|
42
|
+
env_file = File.join(config.environment_directory, "#{dest_env}.json")
|
43
|
+
repo = Promote::GitRepo.new(env_file)
|
44
|
+
repo.commit("promoted new constraints from #{source_env} to #{dest_env}", true)
|
46
45
|
|
47
46
|
ui.info "uploading #{dest_env} to #{config.chef_server_url}"
|
48
47
|
uploader.upload_environment(dest_env)
|
@@ -52,19 +51,5 @@ module KnifePromote
|
|
52
51
|
|
53
52
|
ui.info "promotion complete. Congratulations #{dest_env} on a well deserved promotion!!"
|
54
53
|
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
include Promote::GitHelper
|
59
|
-
|
60
|
-
def commit(config, source_env, dest_env)
|
61
|
-
git = git_chef(config)
|
62
|
-
dest_path = File.join(config.environment_directory, "#{dest_env}.json")
|
63
|
-
git.add(dest_path)
|
64
|
-
if !(git.status.changed.select{|s| dest_path.end_with?(s)}).keys.empty?
|
65
|
-
git.commit("promoted new constraints from #{source_env} to #{dest_env}")
|
66
|
-
git.push
|
67
|
-
end
|
68
|
-
end
|
69
54
|
end
|
70
55
|
end
|
data/lib/promote.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Promote
|
2
|
+
class GitRepo
|
3
|
+
def initialize(scope_path)
|
4
|
+
@scope_path = scope_path
|
5
|
+
end
|
6
|
+
|
7
|
+
def version_number
|
8
|
+
all_commit_count = git.log(10000).object(scope_path).between(current_tag.sha).size
|
9
|
+
bump_commit_count = git.log(10000).object(scope_path).between(current_tag.sha).grep("CI:versioning chef artifacts").size
|
10
|
+
commit_count = all_commit_count - bump_commit_count
|
11
|
+
"#{current_tag.name}.#{commit_count}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def git
|
15
|
+
require 'git'
|
16
|
+
@git ||= Git.open(git_root(scope_path))
|
17
|
+
end
|
18
|
+
|
19
|
+
def current_tag
|
20
|
+
@current_tag ||= git.tags.select { |t| t.name[/^[0-9\.]+/] }[-1]
|
21
|
+
end
|
22
|
+
|
23
|
+
def sha1
|
24
|
+
@sha1 ||= git.log(10000).between(current_tag.sha).first.sha
|
25
|
+
end
|
26
|
+
|
27
|
+
def commit(msg, push = false)
|
28
|
+
git.add(scope_path)
|
29
|
+
if !(git.status.changed.select{|s| scope_path.end_with?(s)}).keys.empty?
|
30
|
+
git.commit(msg)
|
31
|
+
git.push if push
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_accessor :scope_path
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def git_root(start_leaf)
|
40
|
+
return start_leaf if File.exist?(File.join(start_leaf, '.git'))
|
41
|
+
git_root(File.expand_path('..', start_leaf))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/promote/versioner.rb
CHANGED
@@ -9,23 +9,27 @@ module Promote
|
|
9
9
|
|
10
10
|
def version_cookbook(cookbook_name)
|
11
11
|
dir = File.join(config.cookbook_directory, cookbook_name)
|
12
|
+
repo = GitRepo.new(dir)
|
12
13
|
cookbook_name = File.basename(dir)
|
13
|
-
|
14
|
-
version = version_number(ct, dir)
|
14
|
+
version = repo.version_number
|
15
15
|
metadata_file = File.join(dir, "metadata.rb")
|
16
16
|
metadata_content = File.read(metadata_file)
|
17
17
|
version_line = metadata_content[/^\s*version\s.*$/]
|
18
18
|
current_version = version_line[/('|").*("|')/].gsub(/('|")/,"")
|
19
19
|
if current_version != version
|
20
20
|
metadata_content = metadata_content.gsub(current_version, version)
|
21
|
-
outdata = metadata_content.gsub(/#sha1.*$/, "#sha1 '#{sha1}'")
|
21
|
+
outdata = metadata_content.gsub(/#sha1.*$/, "#sha1 '#{repo.sha1}'")
|
22
22
|
if outdata[/#sha1.*$/].nil?
|
23
|
-
outdata += "#sha1 '#{sha1}'"
|
23
|
+
outdata += "#sha1 '#{repo.sha1}'"
|
24
24
|
end
|
25
25
|
File.open(metadata_file, 'w') do |out|
|
26
26
|
out << outdata
|
27
27
|
end
|
28
|
-
return {
|
28
|
+
return {
|
29
|
+
:cookbook => cookbook_name,
|
30
|
+
:version => version,
|
31
|
+
:sha1 => repo.sha1
|
32
|
+
}
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
@@ -101,7 +105,8 @@ module Promote
|
|
101
105
|
def version_json(parent_directory, file_name, &block)
|
102
106
|
version_string = "version"
|
103
107
|
file = "#{parent_directory}/#{file_name}.json"
|
104
|
-
|
108
|
+
repo = GitRepo.new(file)
|
109
|
+
version = repo.version_number
|
105
110
|
content = JSON.parse(File.read(file))
|
106
111
|
current_version = '0.0'
|
107
112
|
|
@@ -117,33 +122,16 @@ module Promote
|
|
117
122
|
|
118
123
|
if current_version != version
|
119
124
|
content_hash[version_string] = version
|
120
|
-
content_hash['sha1'] = sha1
|
125
|
+
content_hash['sha1'] = repo.sha1
|
121
126
|
File.open(file, 'w') do |out|
|
122
127
|
out << JSON.pretty_generate(content)
|
123
128
|
end
|
124
|
-
{
|
129
|
+
{
|
130
|
+
:artifact => file_name,
|
131
|
+
:version => version,
|
132
|
+
:sha1 => repo.sha1
|
133
|
+
}
|
125
134
|
end
|
126
135
|
end
|
127
|
-
|
128
|
-
def git
|
129
|
-
@git ||= git_chef(config)
|
130
|
-
end
|
131
|
-
|
132
|
-
def current_tag
|
133
|
-
@current_tag ||= git.tags.select { |t| t.name[/^[0-9\.]+/] }[-1]
|
134
|
-
end
|
135
|
-
|
136
|
-
def sha1
|
137
|
-
@sha1 ||= git.log(10000).between(current_tag.sha).first.sha
|
138
|
-
end
|
139
|
-
|
140
|
-
def version_number(current_tag, ref)
|
141
|
-
all_commit_count = git.log(10000).object(ref).between(current_tag.sha).size
|
142
|
-
bump_commit_count = git.log(10000).object(ref).between(current_tag.sha).grep("CI:versioning chef artifacts").size
|
143
|
-
commit_count = all_commit_count - bump_commit_count
|
144
|
-
"#{current_tag.name}.#{commit_count}"
|
145
|
-
end
|
146
|
-
|
147
|
-
include Promote::GitHelper
|
148
136
|
end
|
149
137
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clc-promote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0.dev
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- CenturyLink Cloud
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|
@@ -116,7 +116,7 @@ files:
|
|
116
116
|
- lib/promote.rb
|
117
117
|
- lib/promote/config.rb
|
118
118
|
- lib/promote/environment_file.rb
|
119
|
-
- lib/promote/
|
119
|
+
- lib/promote/git_repo.rb
|
120
120
|
- lib/promote/promoter.rb
|
121
121
|
- lib/promote/rake_tasks.rb
|
122
122
|
- lib/promote/uploader.rb
|
@@ -136,9 +136,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
136
|
version: '0'
|
137
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
|
-
- - "
|
139
|
+
- - ">"
|
140
140
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
141
|
+
version: 1.3.1
|
142
142
|
requirements: []
|
143
143
|
rubyforge_project:
|
144
144
|
rubygems_version: 2.4.1
|
data/lib/promote/git_helper.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
module Promote
|
2
|
-
module GitHelper
|
3
|
-
|
4
|
-
def git_chef(config)
|
5
|
-
require 'git'
|
6
|
-
Git.open(git_root(config.repo_root))
|
7
|
-
end
|
8
|
-
|
9
|
-
def git_root(start_leaf)
|
10
|
-
return start_leaf if File.exist?(File.join(start_leaf, '.git'))
|
11
|
-
git_root(File.expand_path('..', start_leaf))
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|