packaging 0.88.77 → 0.99.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +128 -74
  3. data/lib/packaging/artifactory.rb +60 -433
  4. data/lib/packaging/config/params.rb +7 -28
  5. data/lib/packaging/config.rb +50 -150
  6. data/lib/packaging/deb/repo.rb +19 -20
  7. data/lib/packaging/gem.rb +83 -41
  8. data/lib/packaging/ips.rb +57 -0
  9. data/lib/packaging/msi.rb +89 -0
  10. data/lib/packaging/nuget.rb +1 -1
  11. data/lib/packaging/osx.rb +36 -0
  12. data/lib/packaging/paths.rb +87 -225
  13. data/lib/packaging/platforms.rb +416 -443
  14. data/lib/packaging/repo.rb +22 -122
  15. data/lib/packaging/retrieve.rb +7 -36
  16. data/lib/packaging/rpm/repo.rb +8 -5
  17. data/lib/packaging/tar.rb +0 -9
  18. data/lib/packaging/util/date.rb +0 -5
  19. data/lib/packaging/util/execution.rb +2 -2
  20. data/lib/packaging/util/git.rb +1 -1
  21. data/lib/packaging/util/gpg.rb +1 -5
  22. data/lib/packaging/util/net.rb +37 -79
  23. data/lib/packaging/util/rake_utils.rb +0 -1
  24. data/lib/packaging/util/ship.rb +13 -142
  25. data/lib/packaging/util/tool.rb +1 -1
  26. data/lib/packaging/util/version.rb +0 -8
  27. data/lib/packaging/util.rb +2 -2
  28. data/lib/packaging.rb +3 -3
  29. data/spec/fixtures/config/params.yaml +2 -0
  30. data/spec/lib/packaging/artifactory_spec.rb +16 -66
  31. data/spec/lib/packaging/config_spec.rb +29 -49
  32. data/spec/lib/packaging/deb/repo_spec.rb +7 -16
  33. data/spec/lib/packaging/paths_spec.rb +56 -321
  34. data/spec/lib/packaging/platforms_spec.rb +21 -46
  35. data/spec/lib/packaging/repo_spec.rb +40 -78
  36. data/spec/lib/packaging/retrieve_spec.rb +8 -47
  37. data/spec/lib/packaging/rpm/repo_spec.rb +4 -4
  38. data/spec/lib/packaging/tar_spec.rb +40 -34
  39. data/spec/lib/packaging/util/git_tag_spec.rb +1 -1
  40. data/spec/lib/packaging/util/gpg_spec.rb +1 -1
  41. data/spec/lib/packaging/util/net_spec.rb +15 -35
  42. data/spec/lib/packaging/util/ship_spec.rb +63 -145
  43. data/spec/spec_helper.rb +14 -0
  44. data/tasks/00_utils.rake +6 -4
  45. data/tasks/apple.rake +0 -2
  46. data/tasks/config.rake +0 -5
  47. data/tasks/education.rake +5 -5
  48. data/tasks/fetch.rake +14 -17
  49. data/tasks/gem.rake +121 -134
  50. data/tasks/jenkins.rake +7 -51
  51. data/tasks/nightly_repos.rake +69 -20
  52. data/tasks/pe_ship.rake +11 -16
  53. data/tasks/retrieve.rake +6 -13
  54. data/tasks/ship.rake +256 -196
  55. data/tasks/sign.rake +135 -63
  56. data/tasks/tar.rake +6 -0
  57. data/templates/packaging.xml.erb +7 -9
  58. data/templates/repo.xml.erb +3 -6
  59. metadata +27 -80
  60. data/lib/packaging/archive.rb +0 -126
  61. data/lib/packaging/artifactory/extensions.rb +0 -94
  62. data/lib/packaging/config/validations.rb +0 -13
  63. data/lib/packaging/metrics.rb +0 -15
  64. data/lib/packaging/sign/deb.rb +0 -9
  65. data/lib/packaging/sign/dmg.rb +0 -41
  66. data/lib/packaging/sign/ips.rb +0 -57
  67. data/lib/packaging/sign/msi.rb +0 -124
  68. data/lib/packaging/sign/rpm.rb +0 -115
  69. data/lib/packaging/sign.rb +0 -8
  70. data/spec/lib/packaging/gem_spec.rb +0 -86
  71. data/spec/lib/packaging/sign_spec.rb +0 -133
  72. data/tasks/archive.rake +0 -69
@@ -1,86 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Pkg::Gem' do
4
- describe '#shipped_to_rubygems?' do
5
- let(:gem_data) {
6
- [
7
- {"authors"=>"Puppet Labs",
8
- "built_at"=>"2018-12-17T00:00:00.000Z",
9
- "created_at"=>"2018-12-18T17:31:50.852Z",
10
- "description"=>"Puppet, an automated configuration management tool",
11
- "downloads_count"=>32750,
12
- "metadata"=>{},
13
- "number"=>"6.1.0",
14
- "summary"=>"Puppet, an automated configuration management tool",
15
- "platform"=>"ruby",
16
- "rubygems_version"=>"> 1.3.1",
17
- "ruby_version"=>">= 2.3.0",
18
- "prerelease"=>false,
19
- "licenses"=>[],
20
- "requirements"=>[],
21
- "sha"=>"71ecec1f554cd7a7f23abf1523e4f0f15fb8ddbc973201234d0cc2a889566373"},
22
- {"authors"=>"Puppet Labs",
23
- "built_at"=>"2019-01-14T00:00:00.000Z",
24
- "created_at"=>"2019-01-15T15:25:25.183Z",
25
- "description"=>"Puppet, an automated configuration management tool",
26
- "downloads_count"=>540,
27
- "metadata"=>{},
28
- "number"=>"6.0.5",
29
- "summary"=>"Puppet, an automated configuration management tool",
30
- "platform"=>"ruby",
31
- "rubygems_version"=>"> 1.3.1",
32
- "ruby_version"=>">= 2.3.0",
33
- "prerelease"=>false,
34
- "licenses"=>[],
35
- "requirements"=>[],
36
- "sha"=>"76811bcf4c5ab75470dd6ae5eea552347767748bd80136cac74261336b208916"},
37
- {"authors"=>"Puppet Labs",
38
- "built_at"=>"2018-10-31T00:00:00.000Z",
39
- "created_at"=>"2018-11-01T17:07:19.274Z",
40
- "description"=>"Puppet, an automated configuration management tool",
41
- "downloads_count"=>71808,
42
- "metadata"=>{},
43
- "number"=>"6.0.4",
44
- "summary"=>"Puppet, an automated configuration management tool",
45
- "platform"=>"ruby",
46
- "rubygems_version"=>"> 1.3.1",
47
- "ruby_version"=>">= 2.3.0",
48
- "prerelease"=>false,
49
- "licenses"=>[],
50
- "requirements"=>[],
51
- "sha"=>"203e8b529d37260115ab7e804e607dde5e543144331b40c3c4a77c2d33445026"},
52
- {"authors"=>"Puppet Labs",
53
- "built_at"=>"2018-10-31T00:00:00.000Z",
54
- "created_at"=>"2018-11-01T17:07:10.268Z",
55
- "description"=>"Puppet, an automated configuration management tool",
56
- "downloads_count"=>1179,
57
- "metadata"=>{},
58
- "number"=>"6.0.4",
59
- "summary"=>"Puppet, an automated configuration management tool",
60
- "platform"=>"x86-mingw32",
61
- "rubygems_version"=>"> 1.3.1",
62
- "ruby_version"=>">= 2.3.0",
63
- "prerelease"=>false,
64
- "licenses"=>[],
65
- "requirements"=>[],
66
- "sha"=>"e57ef7d537aaf66343615d7413d1ff759cc2b6ae95cc90514dd8f3caf0f08cb1"}
67
- ]
68
- }
69
- it 'returns true if gem version has already been shipped' do
70
- allow(JSON).to receive(:parse).and_return(gem_data)
71
- expect(Pkg::Gem.shipped_to_rubygems?('puppet', '6.0.5', 'ruby')).to be true
72
- end
73
- it 'returns false if the platform doesn\'t match' do
74
- allow(JSON).to receive(:parse).and_return(gem_data)
75
- expect(Pkg::Gem.shipped_to_rubygems?('puppet', '6.0.5', 'x64-mingw32')).to be false
76
- end
77
- it 'returns false if gem version has not already been shipped' do
78
- allow(JSON).to receive(:parse).and_return(gem_data)
79
- expect(Pkg::Gem.shipped_to_rubygems?('puppet', '6.0.9', 'ruby')).to be false
80
- end
81
- it 'returns false if gem is not found at all on rubygems' do
82
- expect { Pkg::Gem.shipped_to_rubygems?('totally-not-a-real-gem', '9.9.9', 'ruby') }.to_not raise_error
83
- expect(Pkg::Gem.shipped_to_rubygems?('totally-not-a-real-gem', '9.9.9', 'ruby')).to be false
84
- end
85
- end
86
- end
@@ -1,133 +0,0 @@
1
- require 'spec_helper'
2
- require 'packaging/sign'
3
-
4
- describe 'Pkg::Sign' do
5
- describe 'Pkg::Sign::Rpm' do
6
-
7
- before :each do
8
- allow(Pkg::Config).to receive(:gpg_key).and_return('7F438280EF8D349F')
9
- end
10
-
11
- describe '#has_sig?' do
12
- let(:rpm) { 'foo.rpm' }
13
- let(:el7_signed_response) { <<-DOC
14
- Header V4 RSA/SHA256 Signature, key ID ef8d349f: NOKEY
15
- Header SHA1 digest: OK (3cb7e9861e8bc09783a1b6c8d88243a3c16daa81)
16
- V4 RSA/SHA256 Signature, key ID ef8d349f: NOKEY
17
- MD5 digest: OK (d5f06ba2a9053de532326d0659ec0d11)
18
- DOC
19
- }
20
- let(:el5_signed_response) { <<-DOC
21
- Header V3 RSA/SHA1 signature: NOKEY, key ID ef8d349f
22
- Header SHA1 digest: OK (12ea7bd578097a3aecc5deb8ada6aca6147d68e3)
23
- V3 RSA/SHA1 signature: NOKEY, key ID ef8d349f
24
- MD5 digest: OK (27353c6153068a3c9902fcb4ad5b8b92)
25
- DOC
26
- }
27
- let(:sles12_signed_response) { <<-DOC
28
- Header V4 RSA/SHA256 Signature, key ID ef8d349f: NOKEY
29
- Header SHA1 digest: OK (e713487cf21ebeb933aefd5ec9211a34603233d2)
30
- V4 RSA/SHA256 Signature, key ID ef8d349f: NOKEY
31
- MD5 digest: OK (3093a09ac39bc17751f913e19ca74432)
32
- DOC
33
- }
34
- let(:unsigned_response) { <<-DOC
35
- Header SHA1 digest: OK (f9404cc95f200568c2dbb1fd24e1119e3e4a40a9)
36
- MD5 digest: OK (816095f3cee145091c3fa07a0915ce85)
37
- DOC
38
- }
39
- it 'returns true if rpm has been signed (el7)' do
40
- allow(Pkg::Sign::Rpm).to receive(:`).and_return(el7_signed_response)
41
- expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be true
42
- end
43
- it 'returns true if rpm has been signed (el5)' do
44
- allow(Pkg::Sign::Rpm).to receive(:`).and_return(el5_signed_response)
45
- expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be true
46
- end
47
- it 'returns true if rpm has been signed (sles12)' do
48
- allow(Pkg::Sign::Rpm).to receive(:`).and_return(sles12_signed_response)
49
- expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be true
50
- end
51
- it 'returns false if rpm has not been signed' do
52
- allow(Pkg::Sign::Rpm).to receive(:`).and_return(unsigned_response)
53
- expect(Pkg::Sign::Rpm.has_sig?(rpm)).to be false
54
- end
55
- it 'fails with unexpected output' do
56
- allow(Pkg::Sign::Rpm).to receive(:`).and_return('something that is definitely not a normal response')
57
- expect { Pkg::Sign::Rpm.has_sig?(rpm) }.to raise_error(RuntimeError, /Something went wrong checking the signature/)
58
- end
59
- it 'fails if gpg_key is not set' do
60
- allow(Pkg::Config).to receive(:gpg_key).and_return(nil)
61
- expect { Pkg::Sign::Rpm.has_sig?(rpm) }.to raise_error(RuntimeError, /You need to set `gpg_key` in your build defaults./)
62
- end
63
- end
64
-
65
- describe '#sign_all' do
66
- let(:rpm_directory) { 'foo' }
67
- let(:rpms_not_to_sign) { [
68
- "#{rpm_directory}/aix/7.1/PC1/ppc/puppet-agent-5.5.3-1.aix7.1.ppc.rpm",
69
- ] }
70
- let(:v3_rpms) { [
71
- "#{rpm_directory}/el/5/PC1/i386/puppet-agent-5.5.3-1.el5.i386.rpm",
72
- "#{rpm_directory}/sles/11/PC1/x86_64/puppet-agent-5.5.3-1.sles11.x86_64.rpm",
73
- ] }
74
- let(:v4_rpms) { [
75
- "#{rpm_directory}/el/7/PC1/aarch64/puppet-agent-5.5.3-1.el7.aarch64.rpm",
76
- ] }
77
- let(:rpms) { rpms_not_to_sign + v3_rpms + v4_rpms }
78
- let(:already_signed_rpms) { [
79
- "#{rpm_directory}/el/6/PC1/x86_64/puppet-agent-5.5.3-1.el6.x86_64.rpm",
80
- ] }
81
- let(:noarch_rpms) { [
82
- "#{rpm_directory}/el/6/puppet5/i386/puppetserver-5.3.3-1.el6.noarch.rpm",
83
- "#{rpm_directory}/el/6/puppet5/x86_64/puppetserver-5.3.3-1.el6.noarch.rpm",
84
- "#{rpm_directory}/el/7/puppet5/i386/puppetserver-5.3.3-1.el7.noarch.rpm",
85
- "#{rpm_directory}/el/7/puppet5/x86_64/puppetserver-5.3.3-1.el7.noarch.rpm",
86
- "#{rpm_directory}/sles/12/puppet5/i386/puppetserver-5.3.3-1.sles12.noarch.rpm",
87
- "#{rpm_directory}/sles/12/puppet5/x86_64/puppetserver-5.3.3-1.sles12.noarch.rpm"
88
- ] }
89
-
90
- it 'signs both v3 and v4 rpms' do
91
- allow(Dir).to receive(:[]).with("#{rpm_directory}/**/*.rpm").and_return(rpms)
92
- rpms.each do |rpm|
93
- allow(Pkg::Sign::Rpm).to receive(:has_sig?).and_return(false)
94
- end
95
- expect(Pkg::Sign::Rpm).to receive(:legacy_sign).with(v3_rpms.join(' '))
96
- expect(Pkg::Sign::Rpm).to receive(:sign).with(v4_rpms.join(' '))
97
- Pkg::Sign::Rpm.sign_all(rpm_directory)
98
- end
99
-
100
- it 'does not sign AIX rpms' do
101
- allow(Dir).to receive(:[]).with("#{rpm_directory}/**/*.rpm").and_return(rpms_not_to_sign)
102
- allow(Pkg::Sign::Rpm).to receive(:has_sig?)
103
- expect(Pkg::Sign::Rpm).to_not receive(:legacy_sign)
104
- expect(Pkg::Sign::Rpm).to_not receive(:sign)
105
- Pkg::Sign::Rpm.sign_all(rpm_directory)
106
- end
107
-
108
- it 'does not sign already-signed rpms' do
109
- allow(Dir).to receive(:[]).with("#{rpm_directory}/**/*.rpm").and_return(already_signed_rpms)
110
- already_signed_rpms.each do |rpm|
111
- allow(Pkg::Sign::Rpm).to receive(:has_sig?).and_return(true)
112
- end
113
- expect(Pkg::Sign::Rpm).to_not receive(:legacy_sign)
114
- expect(Pkg::Sign::Rpm).to_not receive(:sign)
115
- Pkg::Sign::Rpm.sign_all(rpm_directory)
116
- end
117
-
118
- it 'deletes and relinks rpms with the same basename' do
119
- allow(Dir).to receive(:[]).with("#{rpm_directory}/**/*.rpm").and_return(noarch_rpms)
120
- allow(Pkg::Sign::Rpm).to receive(:sign)
121
- allow(Pkg::Sign::Rpm).to receive(:has_sig?)
122
- expect(FileUtils).to receive(:rm).exactly(noarch_rpms.count/2).times
123
- expect(FileUtils).to receive(:ln).exactly(noarch_rpms.count/2).times
124
- Pkg::Sign::Rpm.sign_all(rpm_directory)
125
- end
126
-
127
- it 'does not fail if there are no rpms to sign' do
128
- allow(Dir).to receive(:[]).with("#{rpm_directory}/**/*.rpm").and_return([])
129
- expect(Pkg::Sign::Rpm.sign_all(rpm_directory)).to_not raise_error
130
- end
131
- end
132
- end
133
- end
data/tasks/archive.rake DELETED
@@ -1,69 +0,0 @@
1
- namespace :pl do
2
- namespace :remote do
3
-
4
- desc "Move packages from repo paths to archive staging paths"
5
- task :stage_archives, [:yum_directories, :apt_directories, :downloads_directories] => 'pl:fetch' do |_t, args|
6
- yum_directories = args.yum_directories ? args.yum_directories.split(' ') : []
7
- apt_directories = args.apt_directories ? args.apt_directories.split(' ') : []
8
- downloads_directories = args.downloads_directories ? args.downloads_directories.split(' ') : []
9
-
10
- yum_directories.each do |directory|
11
- Pkg::Archive.stage_yum_archives(directory)
12
- end
13
- apt_directories.each do |directory|
14
- Pkg::Archive.stage_apt_archives(directory)
15
- end
16
- downloads_directories.each do |directory|
17
- Pkg::Archive.stage_downloads_archives(directory)
18
- end
19
- end
20
-
21
- desc "Create archive yum repo"
22
- task :update_archive_yum_repo => 'pl:fetch' do
23
- Pkg::Repo.update_repo(Pkg::Config.staging_server, Pkg::Config.yum_repo_command, { :repo_name => '', :repo_path => Pkg::Config.yum_archive_path, :repo_host => Pkg::Config.staging_server })
24
- end
25
-
26
- desc "Create archive apt repo"
27
- task :update_archive_apt_repo => 'pl:fetch' do
28
- Pkg::Repo.update_repo(Pkg::Config.staging_server, Pkg::Config.apt_archive_repo_command)
29
- end
30
-
31
- desc "Sync archived packages to s3"
32
- task :deploy_staged_archives_to_s3 => 'pl:fetch' do
33
- Pkg::Util::RakeUtils.invoke_task('pl:remote:deploy_staged_apt_archives_to_s3')
34
- Pkg::Util::RakeUtils.invoke_task('pl:remote:deploy_staged_yum_archives_to_s3')
35
- Pkg::Util::RakeUtils.invoke_task('pl:remote:deploy_staged_downloads_archives_to_s3')
36
- end
37
-
38
- desc "Sync staged apt archive repos to s3"
39
- task :deploy_staged_apt_archives_to_s3 => 'pl:fetch' do
40
- command = 'sudo /usr/local/bin/s3_repo_sync.sh release-archives.puppet.com/apt'
41
- Pkg::Util::Execution.retry_on_fail(:times => 3) do
42
- Pkg::Util::Net.remote_execute(Pkg::Config.staging_server, command)
43
- end
44
- end
45
-
46
- desc "Sync staged yum archive repos to s3"
47
- task :deploy_staged_yum_archives_to_s3 => 'pl:fetch' do
48
- command = 'sudo /usr/local/bin/s3_repo_sync.sh release-archives.puppet.com/yum'
49
- Pkg::Util::Execution.retry_on_fail(:times => 3) do
50
- Pkg::Util::Net.remote_execute(Pkg::Config.staging_server, command)
51
- end
52
- end
53
-
54
- desc "Sync staged downloads archives to s3"
55
- task :deploy_staged_downloads_archives_to_s3 => 'pl:fetch' do
56
- command = 'sudo /usr/local/bin/s3_repo_sync.sh release-archives.puppet.com/downloads'
57
- Pkg::Util::Execution.retry_on_fail(:times => 3) do
58
- Pkg::Util::Net.remote_execute(Pkg::Config.staging_server, command)
59
- end
60
- end
61
-
62
- desc "Delete packages in archive staging directory"
63
- task :archive_cleanup => 'pl:fetch' do
64
- Pkg::Archive.remove_empty_directories
65
- Pkg::Archive.remove_dead_symlinks
66
- Pkg::Archive.delete_staged_archives
67
- end
68
- end
69
- end