packaging 0.108.2 → 0.109.0
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/README.md +0 -2
- data/lib/packaging/artifactory.rb +15 -10
- data/lib/packaging/config/validations.rb +1 -1
- data/lib/packaging/config.rb +5 -5
- data/lib/packaging/deb/repo.rb +4 -4
- data/lib/packaging/nuget.rb +1 -1
- data/lib/packaging/paths.rb +4 -3
- data/lib/packaging/sign/msi.rb +6 -8
- data/lib/packaging/util/execution.rb +1 -1
- data/lib/packaging/util/ezbake.rb +1 -1
- data/lib/packaging/util/file.rb +4 -6
- data/lib/packaging/util/net.rb +8 -12
- data/lib/packaging/util/ship.rb +17 -7
- data/lib/packaging/util/tool.rb +1 -1
- data/lib/packaging/util/version.rb +7 -5
- data/spec/lib/packaging/config_spec.rb +300 -279
- data/spec/lib/packaging/deb/repo_spec.rb +138 -76
- data/spec/lib/packaging/deb_spec.rb +28 -25
- data/spec/lib/packaging/repo_spec.rb +52 -31
- data/spec/lib/packaging/rpm/repo_spec.rb +18 -37
- data/spec/lib/packaging/sign_spec.rb +22 -43
- data/spec/lib/packaging/tar_spec.rb +48 -44
- data/spec/lib/packaging/util/execution_spec.rb +32 -32
- data/spec/lib/packaging/util/file_spec.rb +112 -75
- data/spec/lib/packaging/util/gpg_spec.rb +24 -19
- data/spec/lib/packaging/util/jenkins_spec.rb +79 -48
- data/spec/lib/packaging/util/misc_spec.rb +13 -8
- data/spec/lib/packaging/util/net_spec.rb +193 -152
- data/spec/lib/packaging/util/rake_utils_spec.rb +24 -18
- data/spec/lib/packaging_spec.rb +7 -9
- data/tasks/apple.rake +7 -8
- data/tasks/deb.rake +1 -1
- data/tasks/fetch.rake +2 -2
- data/tasks/mock.rake +3 -3
- data/tasks/nightly_repos.rake +11 -9
- data/tasks/rpm.rake +2 -3
- data/tasks/ship.rake +4 -2
- data/tasks/sign.rake +8 -10
- data/tasks/z_data_dump.rake +3 -3
- metadata +46 -33
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
let(:gpg) {
|
5
|
-
let(:keychain) {
|
6
|
-
let(:gpg_key) {
|
7
|
-
let(:target_file) {
|
3
|
+
describe 'Pkg::Util::Gpg' do
|
4
|
+
let(:gpg) { '/local/bin/gpg' }
|
5
|
+
let(:keychain) { '/usr/local/bin/keychain' }
|
6
|
+
let(:gpg_key) { 'abcd1234' }
|
7
|
+
let(:target_file) { '/tmp/file' }
|
8
8
|
|
9
9
|
before(:each) do
|
10
10
|
reset_env(['RPM_GPG_AGENT'])
|
@@ -12,36 +12,37 @@ describe "Pkg::Util::Gpg" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#key' do
|
15
|
-
it
|
15
|
+
it 'fails if Pkg::Config.gpg_key isn\'t set' do
|
16
16
|
allow(Pkg::Config).to receive(:gpg_key).and_return(nil)
|
17
17
|
expect { Pkg::Util::Gpg.key }.to raise_error(RuntimeError)
|
18
18
|
end
|
19
|
-
it
|
19
|
+
it 'fails if Pkg::Config.gpg_key is an empty string' do
|
20
20
|
allow(Pkg::Config).to receive(:gpg_key).and_return('')
|
21
21
|
expect { Pkg::Util::Gpg.key }.to raise_error(RuntimeError)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#kill_keychain' do
|
26
|
-
it
|
26
|
+
it 'doesn\'t reload the keychain if already loaded' do
|
27
27
|
Pkg::Util::Gpg.instance_variable_set("@keychain_loaded", true)
|
28
|
-
|
29
|
-
Pkg::Util::Gpg.
|
28
|
+
|
29
|
+
expect(Pkg::Util::Gpg).not_to receive(:kill_keychain)
|
30
|
+
expect(Pkg::Util::Gpg).not_to receive(:start_keychain)
|
30
31
|
Pkg::Util::Gpg.load_keychain
|
31
32
|
Pkg::Util::Gpg.instance_variable_set("@keychain_loaded", nil)
|
32
33
|
end
|
33
34
|
|
34
35
|
it "doesn't reload the keychain if ENV['RPM_GPG_AGENT'] is set" do
|
35
36
|
ENV['RPM_GPG_AGENT'] = 'blerg'
|
36
|
-
Pkg::Util::Gpg.
|
37
|
-
Pkg::Util::Gpg.
|
37
|
+
expect(Pkg::Util::Gpg).not_to receive(:kill_keychain)
|
38
|
+
expect(Pkg::Util::Gpg).not_to receive(:start_keychain)
|
38
39
|
Pkg::Util::Gpg.load_keychain
|
39
40
|
end
|
40
41
|
|
41
42
|
it 'kills and starts the keychain if not loaded already' do
|
42
43
|
Pkg::Util::Gpg.instance_variable_set("@keychain_loaded", nil)
|
43
|
-
Pkg::Util::Gpg.
|
44
|
-
Pkg::Util::Gpg.
|
44
|
+
expect(Pkg::Util::Gpg).to receive(:kill_keychain).once
|
45
|
+
expect(Pkg::Util::Gpg).to receive(:start_keychain).once
|
45
46
|
Pkg::Util::Gpg.load_keychain
|
46
47
|
end
|
47
48
|
end
|
@@ -49,15 +50,19 @@ describe "Pkg::Util::Gpg" do
|
|
49
50
|
describe '#sign_file' do
|
50
51
|
it 'adds special flags if RPM_GPG_AGENT is set' do
|
51
52
|
ENV['RPM_GPG_AGENT'] = 'blerg'
|
52
|
-
additional_flags =
|
53
|
-
Pkg::Util::Tool.
|
54
|
-
Pkg::Util::Execution
|
53
|
+
additional_flags = '--no-tty --use-agent'
|
54
|
+
expect(Pkg::Util::Tool).to receive(:find_tool).with('gpg').and_return(gpg)
|
55
|
+
expect(Pkg::Util::Execution)
|
56
|
+
.to receive(:capture3)
|
57
|
+
.with("#{gpg}\s#{additional_flags}\s--armor --detach-sign -u #{gpg_key} #{target_file}")
|
55
58
|
Pkg::Util::Gpg.sign_file(target_file)
|
56
59
|
end
|
57
60
|
|
58
61
|
it 'signs without extra flags when RPM_GPG_AGENT is not set' do
|
59
|
-
Pkg::Util::Tool.
|
60
|
-
Pkg::Util::Execution
|
62
|
+
expect(Pkg::Util::Tool).to receive(:find_tool).with('gpg').and_return(gpg)
|
63
|
+
expect(Pkg::Util::Execution)
|
64
|
+
.to receive(:capture3)
|
65
|
+
.with("#{gpg}\s\s--armor --detach-sign -u #{gpg_key} #{target_file}")
|
61
66
|
Pkg::Util::Gpg.sign_file(target_file)
|
62
67
|
end
|
63
68
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# -*- ruby -*-
|
2
2
|
require 'spec_helper'
|
3
|
+
require 'json'
|
3
4
|
|
4
5
|
describe Pkg::Util::Jenkins do
|
5
|
-
let(:build_host) {
|
6
|
-
let(:name) {
|
6
|
+
let(:build_host) { 'Jenkins-foo' }
|
7
|
+
let(:name) { 'job-foo' }
|
7
8
|
around do |example|
|
8
9
|
old_build_host = Pkg::Config.jenkins_build_host
|
9
10
|
Pkg::Config.jenkins_build_host = build_host
|
@@ -11,51 +12,77 @@ describe Pkg::Util::Jenkins do
|
|
11
12
|
Pkg::Config.jenkins_build_host = old_build_host
|
12
13
|
end
|
13
14
|
|
14
|
-
describe
|
15
|
-
let(:xml_file) {
|
15
|
+
describe '#create_jenkins_job' do
|
16
|
+
let(:xml_file) { 'bar.xml' }
|
16
17
|
|
17
|
-
it
|
18
|
-
Pkg::Util::Net
|
18
|
+
it 'should call curl_form_data with the correct arguments' do
|
19
|
+
expect(Pkg::Util::Net)
|
20
|
+
.to receive(:curl_form_data)
|
21
|
+
.with("http://#{build_host}/createItem?name=#{name}",
|
22
|
+
['-H', '"Content-Type: application/xml"',
|
23
|
+
'--data-binary',
|
24
|
+
"@#{xml_file}"])
|
19
25
|
Pkg::Util::Jenkins.create_jenkins_job(name, xml_file)
|
20
26
|
end
|
21
27
|
end
|
22
28
|
|
23
|
-
describe
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
29
|
+
describe '#jenkins_job_exists?' do
|
30
|
+
it 'should call curl_form_data with correct arguments' do
|
31
|
+
expect(Pkg::Util::Net)
|
32
|
+
.to receive(:curl_form_data)
|
33
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
34
|
+
['--silent', '--fail'],
|
35
|
+
quiet: true)
|
36
|
+
.and_return(['output', 0])
|
37
|
+
expect(Pkg::Util::Execution).to receive(:success?).and_return(true)
|
28
38
|
Pkg::Util::Jenkins.jenkins_job_exists?(name)
|
29
39
|
end
|
30
40
|
|
31
|
-
it
|
32
|
-
Pkg::Util::Net
|
33
|
-
|
34
|
-
|
41
|
+
it 'should return false on job not existing' do
|
42
|
+
expect(Pkg::Util::Net)
|
43
|
+
.to receive(:curl_form_data)
|
44
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
45
|
+
['--silent', '--fail'],
|
46
|
+
quiet: true)
|
47
|
+
.and_return(['output', 1])
|
48
|
+
expect(Pkg::Util::Execution)
|
49
|
+
.to receive(:success?)
|
50
|
+
.and_return(false)
|
51
|
+
expect(Pkg::Util::Jenkins.jenkins_job_exists?(name)).to be false
|
35
52
|
end
|
36
53
|
|
37
|
-
it
|
38
|
-
Pkg::Util::Net
|
39
|
-
|
54
|
+
it 'should return false if curl_form_data raised a runtime error' do
|
55
|
+
expect(Pkg::Util::Net)
|
56
|
+
.to receive(:curl_form_data)
|
57
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
58
|
+
['--silent', '--fail'],
|
59
|
+
quiet: true)
|
60
|
+
.and_return(false)
|
61
|
+
expect(Pkg::Util::Jenkins.jenkins_job_exists?(name)).to be false
|
40
62
|
end
|
41
63
|
|
42
|
-
it
|
43
|
-
Pkg::Util::Net
|
44
|
-
|
45
|
-
|
64
|
+
it 'should return true when job exists' do
|
65
|
+
expect(Pkg::Util::Net)
|
66
|
+
.to receive(:curl_form_data)
|
67
|
+
.with("http://#{build_host}/job/#{name}/config.xml",
|
68
|
+
['--silent', '--fail'],
|
69
|
+
quiet: true)
|
70
|
+
.and_return(['output', 0])
|
71
|
+
expect(Pkg::Util::Execution).to receive(:success?).and_return(true)
|
72
|
+
expect(Pkg::Util::Jenkins.jenkins_job_exists?(name)).to be true
|
46
73
|
end
|
47
74
|
end
|
48
75
|
|
49
76
|
describe '#poll_jenkins_job' do
|
50
|
-
let(:job_url) {
|
77
|
+
let(:job_url) { 'http://cat.meow' }
|
51
78
|
let(:build_url) { "#{job_url}/1" }
|
52
|
-
let(:result) {
|
53
|
-
let(:job_hash) { {'lastBuild' => { 'url' => build_url } }}
|
54
|
-
let(:build_hash) { {'result' => result, 'building' => false } }
|
79
|
+
let(:result) { 'SUCCESS' }
|
80
|
+
let(:job_hash) { { 'lastBuild' => { 'url' => build_url } } }
|
81
|
+
let(:build_hash) { { 'result' => result, 'building' => false } }
|
55
82
|
|
56
83
|
before :each do
|
57
|
-
subject.
|
58
|
-
subject.
|
84
|
+
allow(subject).to receive(:get_jenkins_info).with(job_url).and_return(job_hash)
|
85
|
+
allow(subject).to receive(:wait_for_build).with(build_url).and_return(build_hash)
|
59
86
|
end
|
60
87
|
|
61
88
|
context "when polling the given url" do
|
@@ -66,47 +93,51 @@ describe Pkg::Util::Jenkins do
|
|
66
93
|
end
|
67
94
|
|
68
95
|
describe '#wait_for_build' do
|
69
|
-
let(:job_url) {
|
96
|
+
let(:job_url) { 'http://cat.meow' }
|
70
97
|
let(:build_url) { "#{job_url}/1" }
|
71
|
-
let(:build_hash) { {'building' => false } }
|
98
|
+
let(:build_hash) { { 'building' => false } }
|
72
99
|
|
73
100
|
context "when waiting for the given build to finish" do
|
74
101
|
it "return the resulting build_hash when build completes successfully" do
|
75
|
-
subject.
|
102
|
+
expect(subject).to receive(:get_jenkins_info).with(job_url).and_return(build_hash)
|
76
103
|
subject.wait_for_build(job_url)
|
77
104
|
end
|
78
105
|
end
|
79
106
|
end
|
80
107
|
|
81
108
|
describe '#get_jenkins_info' do
|
82
|
-
let(:url) {
|
109
|
+
let(:url) { 'http://cat.meow' }
|
83
110
|
let(:uri) { URI(url) }
|
84
111
|
let(:response) { double }
|
85
|
-
let(:valid_json)
|
86
|
-
|
87
|
-
|
88
|
-
|
112
|
+
let(:valid_json) do
|
113
|
+
{
|
114
|
+
'employees' => [
|
115
|
+
{ 'firstName' => 'John', 'lastName' => 'Doe' },
|
116
|
+
{ 'firstName' => 'Anna', 'lastName' => 'Smith' },
|
117
|
+
{ 'firstName' => 'Peter', 'lastName' => 'Jones' }
|
118
|
+
]
|
119
|
+
}.to_json
|
120
|
+
end
|
89
121
|
|
90
122
|
before :each do
|
91
|
-
response.
|
92
|
-
response.
|
93
|
-
Pkg::Util::Jenkins.
|
123
|
+
allow(response).to receive(:body).and_return(valid_json)
|
124
|
+
allow(response).to receive(:code).and_return('200')
|
125
|
+
expect(Pkg::Util::Jenkins).to receive(:URI).and_return(uri)
|
94
126
|
end
|
95
127
|
|
96
|
-
context
|
97
|
-
it
|
98
|
-
Net::HTTP.
|
128
|
+
context 'when making HTTP GET request to given url' do
|
129
|
+
it 'should return Hash of JSON contents when response is non-error' do
|
130
|
+
expect(Net::HTTP).to receive(:get_response).with(uri).and_return(response)
|
99
131
|
subject.get_jenkins_info(url)
|
100
132
|
end
|
101
133
|
|
102
|
-
it
|
103
|
-
response.
|
104
|
-
Net::HTTP.
|
105
|
-
expect
|
134
|
+
it 'should raise Runtime error when response is error' do
|
135
|
+
allow(response).to receive(:code).and_return('400')
|
136
|
+
expect(Net::HTTP).to receive(:get_response).with(uri).and_return(response)
|
137
|
+
expect do
|
106
138
|
subject.get_jenkins_info(url)
|
107
|
-
|
139
|
+
end.to raise_error(Exception, /Unable to query .*, please check that it is valid./)
|
108
140
|
end
|
109
141
|
end
|
110
142
|
end
|
111
|
-
|
112
143
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe 'Pkg::Util::Misc' do
|
5
|
-
context
|
5
|
+
context '#search_and_replace' do
|
6
6
|
let(:orig_string) { "#!/bin/bash\necho '__REPO_NAME__'" }
|
7
7
|
let(:updated_string) { "#!/bin/bash\necho 'abcdefg'" }
|
8
8
|
let(:good_replacements) do
|
@@ -13,19 +13,24 @@ describe 'Pkg::Util::Misc' do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'replaces the token with the Pkg::Config variable' do
|
16
|
-
Pkg::Config.config_from_hash({:
|
17
|
-
Pkg::Util::Misc.search_and_replace(orig_string, good_replacements)
|
16
|
+
Pkg::Config.config_from_hash({ project: 'foo', repo_name: 'abcdefg' })
|
17
|
+
expect(Pkg::Util::Misc.search_and_replace(orig_string, good_replacements))
|
18
|
+
.to eq(updated_string)
|
18
19
|
end
|
19
20
|
|
20
21
|
it 'does no replacement if the Pkg::Config variable is not set' do
|
21
|
-
Pkg::Config.config_from_hash({:
|
22
|
-
Pkg::Util::Misc.search_and_replace(orig_string, good_replacements)
|
22
|
+
Pkg::Config.config_from_hash({ project: 'foo' })
|
23
|
+
expect(Pkg::Util::Misc.search_and_replace(orig_string, good_replacements))
|
24
|
+
.to eq(orig_string)
|
23
25
|
end
|
24
26
|
|
25
27
|
it 'warns and continues if the Pkg::Config variable is unknown to packaging' do
|
26
|
-
Pkg::Config.config_from_hash({:
|
27
|
-
Pkg::Util::Misc
|
28
|
-
|
28
|
+
Pkg::Config.config_from_hash({ project: 'foo' })
|
29
|
+
expect(Pkg::Util::Misc)
|
30
|
+
.to receive(:warn)
|
31
|
+
.with("replacement value for '#{warn_replacements.keys.first}' probably shouldn't be nil")
|
32
|
+
expect(Pkg::Util::Misc.search_and_replace(orig_string, warn_replacements))
|
33
|
+
.to eq(orig_string)
|
29
34
|
end
|
30
35
|
end
|
31
36
|
end
|