cicd-builder 0.9.23 → 0.9.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +136 -0
- data/cicd-builder.gemspec +14 -12
- data/lib/cicd/builder.rb +23 -20
- data/lib/cicd/builder/mixlib/build.rb +144 -69
- data/lib/cicd/builder/mixlib/environment.rb +51 -17
- data/lib/cicd/builder/mixlib/errors.rb +35 -0
- data/lib/cicd/builder/mixlib/options.rb +14 -8
- data/lib/cicd/builder/mixlib/repo.rb +42 -383
- data/lib/cicd/builder/mixlib/repo/S3.rb +355 -0
- data/lib/cicd/builder/mixlib/repo/artifactory.rb +237 -0
- data/lib/cicd/builder/mixlib/repo/base.rb +102 -0
- data/lib/cicd/builder/mixlib/utils.rb +11 -1
- data/lib/cicd/builder/version.rb +1 -1
- metadata +132 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0eab5918292fa3a2bf62313f8abd03f761f3f45d
|
4
|
+
data.tar.gz: 01182f3afc46fddde83438647fad3719779099fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb9cbefa0fc88d44b1ec6853fb414f12c87b063cf782a94ada69032688d810e45820eb3c37ef9f06ba4366460242ac3f32833b3c04620c061b1a9387af7acb8b
|
7
|
+
data.tar.gz: 00e6ad0652ddc63c2443d2f6ebaf82fe12e86df11f115d7ebeb450abc56d08097f39e2284a1265ad1b24e2583d364d8dd67493b43cd17c32f2855359b0d591a0
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
cicd-builder (0.9.25)
|
5
|
+
artifactory (>= 2.2.1, < 2.3)
|
6
|
+
awesome_print (= 1.2.0, < 1.3)
|
7
|
+
aws-sdk (>= 2.0, < 2.1)
|
8
|
+
chef (>= 11.18.2, < 12)
|
9
|
+
git (>= 1.2.7, < 1.3)
|
10
|
+
inifile (>= 3.0.0, < 3.1)
|
11
|
+
json (= 1.8.1, < 1.9)
|
12
|
+
logging (>= 1.8.2, < 1.9)
|
13
|
+
semverse (>= 1.2.1, < 1.3)
|
14
|
+
yajl-ruby (>= 1.2.1, < 1.3)
|
15
|
+
|
16
|
+
GEM
|
17
|
+
remote: http://rubygems.org/
|
18
|
+
specs:
|
19
|
+
artifactory (2.2.1)
|
20
|
+
awesome_print (1.2.0)
|
21
|
+
aws-sdk (2.0.28)
|
22
|
+
aws-sdk-resources (= 2.0.28)
|
23
|
+
aws-sdk-core (2.0.28)
|
24
|
+
builder (~> 3.0)
|
25
|
+
jmespath (~> 1.0)
|
26
|
+
multi_json (~> 1.0)
|
27
|
+
multi_xml (~> 0.5)
|
28
|
+
aws-sdk-resources (2.0.28)
|
29
|
+
aws-sdk-core (= 2.0.28)
|
30
|
+
builder (3.2.2)
|
31
|
+
chef (11.18.6)
|
32
|
+
chef-zero (~> 2.2, >= 2.2.1)
|
33
|
+
diff-lcs (~> 1.2, >= 1.2.4)
|
34
|
+
erubis (~> 2.7)
|
35
|
+
ffi-yajl (~> 1.2)
|
36
|
+
highline (~> 1.6, >= 1.6.9)
|
37
|
+
mime-types (~> 1.16)
|
38
|
+
mixlib-authentication (~> 1.3)
|
39
|
+
mixlib-cli (~> 1.4)
|
40
|
+
mixlib-config (~> 2.0)
|
41
|
+
mixlib-log (~> 1.3)
|
42
|
+
mixlib-shellout (~> 1.4)
|
43
|
+
net-ssh (~> 2.6)
|
44
|
+
net-ssh-multi (~> 1.1)
|
45
|
+
ohai (~> 7.4)
|
46
|
+
plist (~> 3.1.0)
|
47
|
+
pry (~> 0.9)
|
48
|
+
rest-client (>= 1.0.4, <= 1.6.7)
|
49
|
+
chef-zero (2.2.1)
|
50
|
+
ffi-yajl (~> 1.1)
|
51
|
+
hashie (~> 2.0)
|
52
|
+
mixlib-log (~> 1.3)
|
53
|
+
rack
|
54
|
+
coderay (1.1.0)
|
55
|
+
cucumber (0.10.7)
|
56
|
+
builder (>= 2.1.2)
|
57
|
+
diff-lcs (>= 1.1.2)
|
58
|
+
gherkin (~> 2.4.0)
|
59
|
+
json (>= 1.4.6)
|
60
|
+
term-ansicolor (>= 1.0.5)
|
61
|
+
diff-lcs (1.2.5)
|
62
|
+
erubis (2.7.0)
|
63
|
+
ffi (1.9.6)
|
64
|
+
ffi-yajl (1.4.0)
|
65
|
+
ffi (~> 1.5)
|
66
|
+
libyajl2 (~> 1.2)
|
67
|
+
gherkin (2.4.21)
|
68
|
+
json (>= 1.4.6)
|
69
|
+
git (1.2.9.1)
|
70
|
+
hashie (2.1.2)
|
71
|
+
highline (1.7.1)
|
72
|
+
inifile (3.0.0)
|
73
|
+
ipaddress (0.8.0)
|
74
|
+
jmespath (1.0.2)
|
75
|
+
multi_json (~> 1.0)
|
76
|
+
json (1.8.1)
|
77
|
+
libyajl2 (1.2.0)
|
78
|
+
little-plugger (1.1.3)
|
79
|
+
logging (1.8.2)
|
80
|
+
little-plugger (>= 1.1.3)
|
81
|
+
multi_json (>= 1.8.4)
|
82
|
+
method_source (0.8.2)
|
83
|
+
mime-types (1.25.1)
|
84
|
+
mixlib-authentication (1.3.0)
|
85
|
+
mixlib-log
|
86
|
+
mixlib-cli (1.5.0)
|
87
|
+
mixlib-config (2.1.0)
|
88
|
+
mixlib-log (1.6.0)
|
89
|
+
mixlib-shellout (1.6.1)
|
90
|
+
multi_json (1.10.1)
|
91
|
+
multi_xml (0.5.5)
|
92
|
+
net-ssh (2.9.2)
|
93
|
+
net-ssh-gateway (1.2.0)
|
94
|
+
net-ssh (>= 2.6.5)
|
95
|
+
net-ssh-multi (1.2.0)
|
96
|
+
net-ssh (>= 2.6.5)
|
97
|
+
net-ssh-gateway (>= 1.2.0)
|
98
|
+
ohai (7.4.1)
|
99
|
+
ffi (~> 1.9)
|
100
|
+
ffi-yajl (~> 1.1)
|
101
|
+
ipaddress
|
102
|
+
mime-types (~> 1.16)
|
103
|
+
mixlib-cli
|
104
|
+
mixlib-config (~> 2.0)
|
105
|
+
mixlib-log
|
106
|
+
mixlib-shellout (~> 1.2)
|
107
|
+
systemu (~> 2.6.4)
|
108
|
+
wmi-lite (~> 1.0)
|
109
|
+
plist (3.1.0)
|
110
|
+
pry (0.10.1)
|
111
|
+
coderay (~> 1.1.0)
|
112
|
+
method_source (~> 0.8.1)
|
113
|
+
slop (~> 3.4)
|
114
|
+
rack (1.6.0)
|
115
|
+
rake (10.3.2)
|
116
|
+
rest-client (1.6.7)
|
117
|
+
mime-types (>= 1.16)
|
118
|
+
rubygems-tasks (0.2.4)
|
119
|
+
semverse (1.2.1)
|
120
|
+
slop (3.6.0)
|
121
|
+
systemu (2.6.4)
|
122
|
+
term-ansicolor (1.3.0)
|
123
|
+
tins (~> 1.0)
|
124
|
+
tins (1.3.4)
|
125
|
+
wmi-lite (1.0.0)
|
126
|
+
yajl-ruby (1.2.1)
|
127
|
+
|
128
|
+
PLATFORMS
|
129
|
+
ruby
|
130
|
+
|
131
|
+
DEPENDENCIES
|
132
|
+
bundler (>= 1.6, < 1.7)
|
133
|
+
cicd-builder!
|
134
|
+
cucumber (>= 0.10.7, < 0.11)
|
135
|
+
rake (>= 10.3, < 11)
|
136
|
+
rubygems-tasks (>= 0.2, < 1.1)
|
data/cicd-builder.gemspec
CHANGED
@@ -17,17 +17,19 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ['lib']
|
19
19
|
|
20
|
-
gem.add_dependency 'awesome_print', '= 1.2.0'
|
21
|
-
gem.add_dependency 'inifile', '>=
|
22
|
-
gem.add_dependency 'logging', '>=
|
23
|
-
gem.add_dependency 'json', '= 1.8.1'
|
24
|
-
gem.add_dependency 'chef', '>= 11.
|
25
|
-
gem.add_dependency 'aws-sdk', '>=
|
26
|
-
gem.add_dependency 'yajl-ruby', '>= 1.2.1'
|
27
|
-
gem.add_dependency 'git', '>= 1.2.7'
|
20
|
+
gem.add_dependency 'awesome_print', '= 1.2.0', '< 1.3'
|
21
|
+
gem.add_dependency 'inifile', '>= 3.0.0', '< 3.1'
|
22
|
+
gem.add_dependency 'logging', '>= 1.8.2', '< 1.9'
|
23
|
+
gem.add_dependency 'json', '= 1.8.1', '< 1.9'
|
24
|
+
gem.add_dependency 'chef', '>= 11.18.2', '< 12'
|
25
|
+
gem.add_dependency 'aws-sdk', '>= 2.0', '< 2.1'
|
26
|
+
gem.add_dependency 'yajl-ruby', '>= 1.2.1', '< 1.3'
|
27
|
+
gem.add_dependency 'git', '>= 1.2.7', '< 1.3'
|
28
|
+
gem.add_dependency 'semverse', '>= 1.2.1', '< 1.3'
|
29
|
+
gem.add_dependency 'artifactory', '>= 2.2.1', '< 2.3'
|
28
30
|
|
29
|
-
gem.add_development_dependency 'bundler', '
|
30
|
-
gem.add_development_dependency 'rake', '
|
31
|
-
gem.add_development_dependency 'rubygems-tasks', '
|
32
|
-
gem.add_development_dependency 'cucumber', '>= 0.10.7'
|
31
|
+
gem.add_development_dependency 'bundler', '>= 1.6', '< 1.7'
|
32
|
+
gem.add_development_dependency 'rake', '>= 10.3', '< 11'
|
33
|
+
gem.add_development_dependency 'rubygems-tasks', '>= 0.2', '< 1.1'
|
34
|
+
gem.add_development_dependency 'cucumber', '>= 0.10.7', '< 0.11'
|
33
35
|
end
|
data/lib/cicd/builder.rb
CHANGED
@@ -13,7 +13,8 @@ module CiCd
|
|
13
13
|
require 'fileutils'
|
14
14
|
require 'digest'
|
15
15
|
require 'yajl/json_gem'
|
16
|
-
require 'aws-sdk'
|
16
|
+
require 'aws-sdk-core'
|
17
|
+
require 'aws-sdk-resources'
|
17
18
|
|
18
19
|
_lib=File.dirname(__FILE__)
|
19
20
|
$:.unshift(_lib) unless $:.include?(_lib)
|
@@ -56,28 +57,21 @@ module CiCd
|
|
56
57
|
end
|
57
58
|
|
58
59
|
# ---------------------------------------------------------------------------------------------------------------
|
59
|
-
def
|
60
|
+
def setup()
|
60
61
|
$stdout.write("CiCd::Builder v#{VERSION}\n")
|
62
|
+
@default_options[:env_keys] = Hash[@default_options[:env_keys].flatten.map.with_index.to_a].keys
|
61
63
|
parseOptions()
|
64
|
+
end
|
65
|
+
|
66
|
+
# ---------------------------------------------------------------------------------------------------------------
|
67
|
+
def run()
|
68
|
+
setup()
|
62
69
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
if 0 == ret
|
69
|
-
ret = makeBuild()
|
70
|
-
if 0 == ret
|
71
|
-
ret = saveBuild()
|
72
|
-
if 0 == ret
|
73
|
-
ret = uploadBuildArtifacts()
|
74
|
-
if 0 == ret
|
75
|
-
# noop
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
70
|
+
ret = 0
|
71
|
+
%w(checkEnvironment getVars prepareBuild makeBuild saveBuild uploadBuildArtifacts).each do |step|
|
72
|
+
@logger.step "#{step}"
|
73
|
+
ret = send(step)
|
74
|
+
break unless ret == 0
|
81
75
|
end
|
82
76
|
|
83
77
|
@vars[:return_code]
|
@@ -85,5 +79,14 @@ module CiCd
|
|
85
79
|
|
86
80
|
end
|
87
81
|
|
82
|
+
def isSameDirectory(pwd, workspace)
|
83
|
+
pwd = File.realdirpath(File.expand_path(pwd))
|
84
|
+
workspace = File.realdirpath(File.expand_path(workspace))
|
85
|
+
unless pwd == workspace
|
86
|
+
|
87
|
+
end
|
88
|
+
return pwd, workspace
|
89
|
+
end
|
90
|
+
|
88
91
|
end
|
89
92
|
end
|
@@ -5,6 +5,7 @@ module CiCd
|
|
5
5
|
|
6
6
|
# ---------------------------------------------------------------------------------------------------------------
|
7
7
|
def cleanupBuild()
|
8
|
+
@logger.step __method__.to_s
|
8
9
|
[ :build_pkg, :build_chk, :build_mdf, :build_mff ].each do |fil|
|
9
10
|
if File.exists?(@vars[fil])
|
10
11
|
begin
|
@@ -12,7 +13,7 @@ module CiCd
|
|
12
13
|
rescue => e
|
13
14
|
@logger.error e.to_s
|
14
15
|
#raise e
|
15
|
-
return
|
16
|
+
return Errors::CLEANUPBUILD_EXCEPTION
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -22,7 +23,7 @@ module CiCd
|
|
22
23
|
rescue => e
|
23
24
|
@logger.error e.to_s
|
24
25
|
#raise e
|
25
|
-
return
|
26
|
+
return Errors::CLEANUPBUILD_EXCEPTION
|
26
27
|
end
|
27
28
|
end
|
28
29
|
0
|
@@ -31,48 +32,71 @@ module CiCd
|
|
31
32
|
# ---------------------------------------------------------------------------------------------------------------
|
32
33
|
def prepareBuild()
|
33
34
|
meta = {}
|
35
|
+
@vars[:return_code] = 0
|
34
36
|
%w[ WORKSPACE PROJECT_NAME ].each do |e|
|
35
37
|
unless ENV.has_key?(e)
|
36
|
-
|
38
|
+
puts "#{e} environment variable is required"
|
39
|
+
@vars[:return_code] = Errors::MISSING_ENV_VAR
|
37
40
|
end
|
38
41
|
end
|
39
42
|
meta[:Version] = @vars[:version]
|
40
43
|
meta[:Release] = @vars[:release]
|
41
44
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
45
|
+
if @vars[:return_code] == 0
|
46
|
+
|
47
|
+
if File.exists?(ENV['WORKSPACE']) and (File.directory?(ENV['WORKSPACE']) or File.symlink?(ENV['WORKSPACE']))
|
48
|
+
|
49
|
+
place = ''
|
50
|
+
begin
|
51
|
+
req = 'require "git"'
|
52
|
+
eval req
|
53
|
+
|
54
|
+
# Assuming we are in the workspace ...
|
55
|
+
place = "Git.open('#{ENV['WORKSPACE']}')"
|
56
|
+
git = Git.open(ENV['WORKSPACE'], :log => @logger)
|
57
|
+
place = 'git.log'
|
58
|
+
meta[:Commit] = git.log[0].sha
|
59
|
+
place = 'git.current_branch'
|
60
|
+
meta[:Branch] = git.current_branch
|
61
|
+
|
62
|
+
@vars[:build_ext] = 'tar.gz'
|
63
|
+
@vars[:build_bra] = meta[:Branch].gsub(%r([/|]),'.')
|
64
|
+
@vars[:build_ver] = "#{meta[:Version]}"
|
65
|
+
@vars[:build_rel] = "#{meta[:Release]}"
|
66
|
+
@vars[:build_vrb] = "#{@vars[:build_ver]}-release-#{meta[:Release]}-#{@vars[:build_bra]}-#{@vars[:variant]}" #
|
67
|
+
@vars[:build_nam] = "#{@vars[:project_name]}-#{@vars[:build_vrb]}"
|
68
|
+
@vars[:build_nmn] = "#{@vars[:build_nam]}-build-#{@vars[:build_num]}"
|
69
|
+
@vars[:build_dir] = "#{ENV['WORKSPACE']}/#{@vars[:build_nmn]}"
|
70
|
+
@vars[:latest_pkg]= "#{@vars[:build_store]}/#{@vars[:build_nmn]}.#{@vars[:build_ext]}"
|
71
|
+
@vars[:build_pkg] = "#{@vars[:build_nmn]}.#{@vars[:build_ext]}"
|
72
|
+
@vars[:build_chk] = "#{@vars[:build_nmn]}.checksum"
|
73
|
+
@vars[:build_mff] = "#{@vars[:build_nmn]}.manifest"
|
74
|
+
@vars[:build_mdf] = "#{@vars[:build_nmn]}.meta"
|
75
|
+
@vars[:build_mdd] = meta.dup
|
76
|
+
#noinspection RubyArgCount
|
77
|
+
@vars[:build_mds] = Digest::SHA256.hexdigest(meta.to_s)
|
78
|
+
|
79
|
+
@vars[:return_code] = 0
|
80
|
+
|
81
|
+
rescue Exception => e
|
82
|
+
@logger.error "#{e.class}:: '#{place}' - #{e.message}"
|
83
|
+
@vars[:return_code] = Errors::PREPAREBUILD_EXCEPTION
|
84
|
+
end
|
85
|
+
|
86
|
+
else
|
87
|
+
puts "Invalid workspace: '#{ENV['WORKSPACE']}'"
|
88
|
+
@vars[:return_code] = Errors::INVALID_WORKSPACE
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
if @vars[:return_code] == 0
|
93
|
+
@vars[:local_dirs] ||= {}
|
94
|
+
%w(artifacts latest).each do |dir|
|
95
|
+
@vars[:local_dirs][dir] = "#{ENV['WORKSPACE']}/#{dir}"
|
96
|
+
unless File.directory?(dir)
|
97
|
+
Dir.mkdir(dir)
|
98
|
+
end
|
99
|
+
end
|
76
100
|
end
|
77
101
|
|
78
102
|
@vars[:return_code]
|
@@ -83,54 +107,100 @@ module CiCd
|
|
83
107
|
if @vars.has_key?(:build_dir) and @vars.has_key?(:build_pkg)
|
84
108
|
begin
|
85
109
|
do_build = false
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
110
|
+
loadCheckSumFile()
|
111
|
+
if 0 == @vars[:return_code]
|
112
|
+
do_build = true if @vars[:build_sha].empty?
|
113
|
+
do_build = true unless File.exists?(@vars[:build_pkg]) and (Digest::SHA256.file(@vars[:build_pkg]).hexdigest() == @vars[:build_sha])
|
114
|
+
if do_build
|
115
|
+
@vars[:return_code] = cleanupBuild()
|
116
|
+
if 0 == @vars[:return_code]
|
117
|
+
@vars[:build_dte] = DateTime.now.strftime('%F %T%:z')
|
118
|
+
createMetaData()
|
119
|
+
if 0 == @vars[:return_code]
|
120
|
+
@vars[:return_code] = packageBuild()
|
121
|
+
if 0 == @vars[:return_code]
|
122
|
+
@vars[:check_sha] = @vars[:build_sha]
|
123
|
+
@vars[:build_sha] = if File.exists?(@vars[:build_pkg])
|
124
|
+
Digest::SHA256.file(@vars[:build_pkg]).hexdigest()
|
125
|
+
else
|
126
|
+
'0'
|
127
|
+
end
|
128
|
+
unless IO.write(@vars[:build_chk], @vars[:build_sha]) > 0
|
129
|
+
@logger.error "Unable to store checksum in '#{@vars[:build_chk]}'"
|
130
|
+
@vars[:return_code] = Errors::STORING_BUILD_CHECKSUM
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
91
135
|
end
|
92
|
-
@vars[:build_sha] = @vars[:build_sha][0].chomp()
|
93
|
-
else
|
94
|
-
@vars[:build_sha] = ''
|
95
|
-
do_build = true
|
96
|
-
end
|
97
|
-
unless File.exists?(@vars[:build_pkg])
|
98
|
-
do_build = true
|
99
136
|
end
|
137
|
+
|
138
|
+
# Report status regardless of return code.
|
139
|
+
reportStatus()
|
140
|
+
|
100
141
|
if do_build
|
101
|
-
@vars[:return_code] = cleanupBuild()
|
102
|
-
return @vars[:return_code] unless @vars[:return_code] == 0
|
103
|
-
@vars[:build_dte] = DateTime.now.strftime("%F %T%:z")
|
104
|
-
createMetaData()
|
105
|
-
@vars[:return_code] = packageBuild()
|
106
|
-
if 0 == @vars[:return_code]
|
107
|
-
@vars[:check_sha] = @vars[:build_sha]
|
108
|
-
@vars[:build_sha] = Digest::SHA256.file(@vars[:build_pkg]).hexdigest()
|
109
|
-
IO.write(@vars[:build_chk], @vars[:build_sha])
|
110
|
-
end
|
111
|
-
reportStatus()
|
112
142
|
reportResult()
|
113
143
|
else
|
114
|
-
|
115
|
-
|
116
|
-
# No need to build again :)
|
144
|
+
# Was no need to build :) or a failure :(
|
117
145
|
@logger.info "NO_CHANGE: #{ENV['JOB_NAME']} #{ENV['BUILD_NUMBER']} #{@vars[:build_nam]} #{@vars[:build_pkg]} #{@vars[:build_chk]} [#{@vars[:build_sha]}]"
|
118
|
-
@vars[:return_code] = 0
|
146
|
+
# @vars[:return_code] = 0
|
119
147
|
return 1
|
120
148
|
end
|
121
149
|
rescue => e
|
122
|
-
@logger.error "#{e.class.name} #{e.message}"
|
123
|
-
@vars[:return_code] =
|
150
|
+
@logger.error "makeBuild failure: #{e.class.name} #{e.message}"
|
151
|
+
@vars[:return_code] = Errors::MAKEBUILD_EXCEPTION
|
124
152
|
end
|
125
153
|
else
|
126
|
-
@logger.error
|
127
|
-
@vars[:return_code] =
|
154
|
+
@logger.error ':build_dir or :build_pkg is unknown'
|
155
|
+
@vars[:return_code] = Errors::MAKEBUILD_PREPARATION
|
128
156
|
end
|
129
157
|
@vars[:return_code]
|
130
158
|
end
|
131
159
|
|
160
|
+
# ---------------------------------------------------------------------------------------------------------------
|
161
|
+
def loadCheckSumFile
|
162
|
+
if File.exists?(@vars[:build_chk])
|
163
|
+
@vars[:build_sha] = IO.readlines(@vars[:build_chk])
|
164
|
+
unless @vars[:build_sha].is_a?(Array)
|
165
|
+
@logger.error "Unable to parse build checksum from #{@vars[:build_chk]}"
|
166
|
+
@vars[:return_code] = Errors::PARSING_BUILD_CHECKSUM
|
167
|
+
end
|
168
|
+
@vars[:build_sha] = @vars[:build_sha][0].chomp()
|
169
|
+
else
|
170
|
+
@vars[:build_sha] = ''
|
171
|
+
end
|
172
|
+
@vars[:return_code]
|
173
|
+
end
|
174
|
+
|
175
|
+
# ---------------------------------------------------------------------------------------------------------------
|
176
|
+
def calcLocalETag(etag, local, size = nil)
|
177
|
+
if size == nil
|
178
|
+
stat = File.stat(local)
|
179
|
+
size = stat.size
|
180
|
+
end
|
181
|
+
match = etag.match(%r'-(\d+)$')
|
182
|
+
check = if match
|
183
|
+
require 's3etag'
|
184
|
+
parts = match[1].to_i
|
185
|
+
chunk = size.to_f / parts.to_f
|
186
|
+
mbs = (chunk.to_f / 1024 /1024 + 0.5).to_i
|
187
|
+
part_size = mbs * 1024 * 1024
|
188
|
+
chkit = S3Etag.calc(file: local, threshold: part_size, min_part_size: part_size, max_parts: parts)
|
189
|
+
while chkit != etag and (size / part_size) <= parts
|
190
|
+
# Go one larger if a modulus remains and we have the right number of parts
|
191
|
+
mbs += 1
|
192
|
+
part_size = mbs * 1024 * 1024
|
193
|
+
chkit = S3Etag.calc(file: local, threshold: part_size, min_part_size: part_size, max_parts: parts)
|
194
|
+
end
|
195
|
+
chkit
|
196
|
+
else
|
197
|
+
Digest::MD5.file(local).hexdigest
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
132
201
|
# ---------------------------------------------------------------------------------------------------------------
|
133
202
|
def packageBuild()
|
203
|
+
@logger.step __method__.to_s
|
134
204
|
excludes=%w(*.iml *.txt *.sh *.md .gitignore .editorconfig .jshintrc *.deprecated adminer doc)
|
135
205
|
excludes = excludes.map{ |e| "--exclude=#{@vars[:build_nam]}/#{e}" }.join(' ')
|
136
206
|
cmd = %(cd #{ENV['WORKSPACE']}; tar zcvf #{@vars[:build_pkg]} #{excludes} #{@vars[:build_nam]} 1>#{@vars[:build_pkg]}.manifest)
|
@@ -144,6 +214,7 @@ module CiCd
|
|
144
214
|
|
145
215
|
# ---------------------------------------------------------------------------------------------------------------
|
146
216
|
def createMetaData()
|
217
|
+
@logger.step __method__.to_s
|
147
218
|
@vars[:build_mdd].merge!({
|
148
219
|
:Generation => @options[:gen],
|
149
220
|
:Project => @vars[:project_name],
|
@@ -154,7 +225,11 @@ module CiCd
|
|
154
225
|
|
155
226
|
})
|
156
227
|
json = JSON.pretty_generate( @vars[:build_mdd], { indent: "\t", space: ' '})
|
157
|
-
IO.write(@vars[:build_mdf], json)
|
228
|
+
unless IO.write(@vars[:build_mdf], json) > 0
|
229
|
+
@logger.error "Unable to store metadata in '#{@vars[:build_mdf]}'"
|
230
|
+
@vars[:return_code] = Errors::STORING_BUILD_METADATA
|
231
|
+
end
|
232
|
+
@vars[:return_code]
|
158
233
|
end
|
159
234
|
|
160
235
|
end
|