packaging 0.88.77

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +17 -0
  3. data/README-Solaris.md +117 -0
  4. data/README.md +977 -0
  5. data/lib/packaging.rb +32 -0
  6. data/lib/packaging/archive.rb +126 -0
  7. data/lib/packaging/artifactory.rb +651 -0
  8. data/lib/packaging/artifactory/extensions.rb +94 -0
  9. data/lib/packaging/config.rb +492 -0
  10. data/lib/packaging/config/params.rb +387 -0
  11. data/lib/packaging/config/validations.rb +13 -0
  12. data/lib/packaging/deb.rb +28 -0
  13. data/lib/packaging/deb/repo.rb +264 -0
  14. data/lib/packaging/gem.rb +70 -0
  15. data/lib/packaging/metrics.rb +15 -0
  16. data/lib/packaging/nuget.rb +39 -0
  17. data/lib/packaging/paths.rb +376 -0
  18. data/lib/packaging/platforms.rb +507 -0
  19. data/lib/packaging/repo.rb +155 -0
  20. data/lib/packaging/retrieve.rb +75 -0
  21. data/lib/packaging/rpm.rb +5 -0
  22. data/lib/packaging/rpm/repo.rb +254 -0
  23. data/lib/packaging/sign.rb +8 -0
  24. data/lib/packaging/sign/deb.rb +9 -0
  25. data/lib/packaging/sign/dmg.rb +41 -0
  26. data/lib/packaging/sign/ips.rb +57 -0
  27. data/lib/packaging/sign/msi.rb +124 -0
  28. data/lib/packaging/sign/rpm.rb +115 -0
  29. data/lib/packaging/tar.rb +163 -0
  30. data/lib/packaging/util.rb +146 -0
  31. data/lib/packaging/util/date.rb +20 -0
  32. data/lib/packaging/util/execution.rb +85 -0
  33. data/lib/packaging/util/file.rb +125 -0
  34. data/lib/packaging/util/git.rb +174 -0
  35. data/lib/packaging/util/git_tags.rb +73 -0
  36. data/lib/packaging/util/gpg.rb +66 -0
  37. data/lib/packaging/util/jenkins.rb +95 -0
  38. data/lib/packaging/util/misc.rb +69 -0
  39. data/lib/packaging/util/net.rb +410 -0
  40. data/lib/packaging/util/os.rb +17 -0
  41. data/lib/packaging/util/platform.rb +40 -0
  42. data/lib/packaging/util/rake_utils.rb +112 -0
  43. data/lib/packaging/util/serialization.rb +19 -0
  44. data/lib/packaging/util/ship.rb +300 -0
  45. data/lib/packaging/util/tool.rb +41 -0
  46. data/lib/packaging/util/version.rb +334 -0
  47. data/spec/fixtures/config/ext/build_defaults.yaml +2 -0
  48. data/spec/fixtures/config/ext/project_data.yaml +2 -0
  49. data/spec/fixtures/configs/components/test_file.json +1 -0
  50. data/spec/fixtures/configs/components/test_file_2.json +0 -0
  51. data/spec/fixtures/configs/components/test_file_not_tagged.json +1 -0
  52. data/spec/fixtures/configs/components/test_file_wrong_ext.txt +0 -0
  53. data/spec/fixtures/configs/components/test_file_wrong_ext.wrong +0 -0
  54. data/spec/fixtures/util/pre_tasks.yaml +4 -0
  55. data/spec/lib/packaging/artifactory_spec.rb +221 -0
  56. data/spec/lib/packaging/config_spec.rb +576 -0
  57. data/spec/lib/packaging/deb/repo_spec.rb +157 -0
  58. data/spec/lib/packaging/deb_spec.rb +52 -0
  59. data/spec/lib/packaging/gem_spec.rb +86 -0
  60. data/spec/lib/packaging/paths_spec.rb +418 -0
  61. data/spec/lib/packaging/platforms_spec.rb +178 -0
  62. data/spec/lib/packaging/repo_spec.rb +135 -0
  63. data/spec/lib/packaging/retrieve_spec.rb +100 -0
  64. data/spec/lib/packaging/rpm/repo_spec.rb +133 -0
  65. data/spec/lib/packaging/sign_spec.rb +133 -0
  66. data/spec/lib/packaging/tar_spec.rb +116 -0
  67. data/spec/lib/packaging/util/execution_spec.rb +56 -0
  68. data/spec/lib/packaging/util/file_spec.rb +139 -0
  69. data/spec/lib/packaging/util/git_spec.rb +160 -0
  70. data/spec/lib/packaging/util/git_tag_spec.rb +36 -0
  71. data/spec/lib/packaging/util/gpg_spec.rb +64 -0
  72. data/spec/lib/packaging/util/jenkins_spec.rb +112 -0
  73. data/spec/lib/packaging/util/misc_spec.rb +31 -0
  74. data/spec/lib/packaging/util/net_spec.rb +259 -0
  75. data/spec/lib/packaging/util/os_spec.rb +31 -0
  76. data/spec/lib/packaging/util/rake_utils_spec.rb +70 -0
  77. data/spec/lib/packaging/util/ship_spec.rb +199 -0
  78. data/spec/lib/packaging/util/version_spec.rb +123 -0
  79. data/spec/lib/packaging_spec.rb +19 -0
  80. data/spec/spec_helper.rb +22 -0
  81. data/static_artifacts/PackageInfo.plist +3 -0
  82. data/tasks/00_utils.rake +214 -0
  83. data/tasks/30_metrics.rake +33 -0
  84. data/tasks/apple.rake +268 -0
  85. data/tasks/archive.rake +69 -0
  86. data/tasks/build.rake +12 -0
  87. data/tasks/clean.rake +5 -0
  88. data/tasks/config.rake +35 -0
  89. data/tasks/deb.rake +129 -0
  90. data/tasks/deb_repos.rake +28 -0
  91. data/tasks/deprecated.rake +130 -0
  92. data/tasks/doc.rake +20 -0
  93. data/tasks/education.rake +57 -0
  94. data/tasks/fetch.rake +60 -0
  95. data/tasks/gem.rake +159 -0
  96. data/tasks/jenkins.rake +538 -0
  97. data/tasks/jenkins_dynamic.rake +202 -0
  98. data/tasks/load_extras.rake +21 -0
  99. data/tasks/mock.rake +348 -0
  100. data/tasks/nightly_repos.rake +286 -0
  101. data/tasks/pe_deb.rake +12 -0
  102. data/tasks/pe_rpm.rake +13 -0
  103. data/tasks/pe_ship.rake +226 -0
  104. data/tasks/pe_sign.rake +13 -0
  105. data/tasks/pe_tar.rake +5 -0
  106. data/tasks/retrieve.rake +52 -0
  107. data/tasks/rpm.rake +66 -0
  108. data/tasks/rpm_repos.rake +29 -0
  109. data/tasks/ship.rake +692 -0
  110. data/tasks/sign.rake +154 -0
  111. data/tasks/tag.rake +8 -0
  112. data/tasks/tar.rake +28 -0
  113. data/tasks/update.rake +16 -0
  114. data/tasks/vanagon.rake +35 -0
  115. data/tasks/vendor_gems.rake +117 -0
  116. data/tasks/version.rake +33 -0
  117. data/tasks/z_data_dump.rake +65 -0
  118. data/templates/README +1 -0
  119. data/templates/downstream.xml.erb +47 -0
  120. data/templates/msi.xml.erb +197 -0
  121. data/templates/packaging.xml.erb +346 -0
  122. data/templates/repo.xml.erb +117 -0
  123. metadata +287 -0
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pkg::Util::OS do
4
+ def as_host_os(platform, &block)
5
+ old = RbConfig::CONFIG['host_os']
6
+ RbConfig::CONFIG['host_os'] = platform
7
+ begin
8
+ yield
9
+ ensure
10
+ RbConfig::CONFIG['host_os'] = old
11
+ end
12
+ end
13
+
14
+ it "detects windows when host_os contains mingw" do
15
+ as_host_os('mingw32') do
16
+ expect(Pkg::Util::OS).to be_windows
17
+ end
18
+ end
19
+
20
+ it "detects windows when host_os contains mswin60" do
21
+ as_host_os('mswin60') do
22
+ expect(Pkg::Util::OS).to be_windows
23
+ end
24
+ end
25
+
26
+ it "does not detect windows when host_os contains darwin" do
27
+ as_host_os('darwin12.5.0') do
28
+ expect(Pkg::Util::OS).to_not be_windows
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Pkg::Util::RakeUtils" do
4
+ let(:foo_defined?) { Rake::Task.task_defined?(:foo) }
5
+ let(:bar_defined?) { Rake::Task.task_defined?(:bar) }
6
+ let(:define_foo) { body = proc{}; Rake::Task.define_task(:foo, &body) }
7
+ let(:define_bar) { body = proc{}; Rake::Task.define_task(:bar, &body) }
8
+
9
+ before(:each) do
10
+ if foo_defined?
11
+ Rake::Task[:foo].clear_prerequisites
12
+ end
13
+ end
14
+
15
+ describe "#task_defined?" do
16
+ context "given a Rake::Task task name" do
17
+ it "should return true if the task exists" do
18
+ Rake::Task.stub(:task_defined?).with(:foo) {true}
19
+ expect(Pkg::Util::RakeUtils.task_defined?(:foo)).to be_true
20
+ end
21
+ it "should return false if the task does not exist" do
22
+ Rake::Task.stub(:task_defined?).with(:foo) {false}
23
+ expect(Pkg::Util::RakeUtils.task_defined?(:foo)).to be_false
24
+ end
25
+ end
26
+ end
27
+
28
+ describe "#get_task" do
29
+ it "should return a task object for a named task" do
30
+ foo = nil
31
+ if !foo_defined?
32
+ foo = define_foo
33
+ else
34
+ foo = Rake::Task[:foo]
35
+ end
36
+ task = Pkg::Util::RakeUtils.get_task(:foo)
37
+ expect(task).to be_a(Rake::Task)
38
+ expect(task).to be(foo)
39
+ end
40
+ end
41
+
42
+ describe "#add_dependency" do
43
+ it "should add a dependency to a given rake task" do
44
+ foo = nil
45
+ bar = nil
46
+ if !foo_defined?
47
+ foo = define_foo
48
+ else
49
+ foo = Rake::Task[:foo]
50
+ end
51
+ if !bar_defined?
52
+ bar = define_bar
53
+ else
54
+ bar = Rake::Task[:bar]
55
+ end
56
+ Pkg::Util::RakeUtils.add_dependency(foo, bar)
57
+ expect(Rake::Task["foo"].prerequisites).to include(bar)
58
+ end
59
+ end
60
+
61
+ describe "#evaluate_pre_tasks" do
62
+ context "Given a data file with :pre_tasks defined" do
63
+ it "should, for each k=>v pair, add v as a dependency to k" do
64
+ Pkg::Config.config_from_yaml(File.join(FIXTURES, 'util', 'pre_tasks.yaml'))
65
+ expect(Pkg::Util::RakeUtils).to receive(:add_dependency)
66
+ Pkg::Util::RakeUtils.evaluate_pre_tasks
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,199 @@
1
+ require 'spec_helper'
2
+
3
+ describe '#Pkg::Util::Ship' do
4
+ describe '#collect_packages' do
5
+ msi_packages = %w[
6
+ pkg/windows/puppet6/puppet-agent-6.19.0-x64.msi
7
+ pkg/windows/puppet6/puppet-agent-6.19.0-x86.msi
8
+ pkg/windowsfips/puppet6/puppet-agent-6.19.0-x64.msi
9
+ pkg/windows/puppet6/puppet-agent-x86.msi
10
+ pkg/windowsfips/puppet6/puppet-agent-x64.msi
11
+ ]
12
+ solaris_packages = %w[
13
+ pkg/solaris/10/puppet6/puppet-agent-6.9.0-1.sparc.pkg.gz
14
+ pkg/solaris/10/puppet6/puppet-agent-6.9.0-1.sparc.pkg.gz.asc
15
+ ]
16
+
17
+ it 'returns an array of packages found on the filesystem' do
18
+ allow(Dir).to receive(:glob).with('pkg/**/*.sparc*').and_return(solaris_packages)
19
+ expect(Pkg::Util::Ship.collect_packages(['pkg/**/*.sparc*'])).to eq(solaris_packages)
20
+ end
21
+
22
+ context 'excluding packages' do
23
+ before :each do
24
+ allow(Dir).to receive(:glob).with('pkg/**/*.msi').and_return(msi_packages)
25
+ end
26
+ it 'correctly excludes any packages that match a passed excludes argument' do
27
+ expect(Pkg::Util::Ship.collect_packages(['pkg/**/*.msi'], ['puppet-agent-x(86|64).msi']))
28
+ .not_to include('pkg/windows/puppet6/puppet-agent-x86.msi')
29
+ expect(Pkg::Util::Ship.collect_packages(['pkg/**/*.msi'], ['puppet-agent-x(86|64).msi']))
30
+ .not_to include('pkg/windows/puppet6/puppet-agent-x64.msi')
31
+ end
32
+ it 'correctly includes packages that do not match a passed excluded argument' do
33
+ expect(Pkg::Util::Ship.collect_packages(['pkg/**/*.msi'],
34
+ ['bogus-puppet-agent-x(86|64).msi']))
35
+ .to match_array(msi_packages)
36
+ end
37
+ end
38
+
39
+ it 'returns an empty array when it cannot find any packages' do
40
+ allow(Dir).to receive(:glob).with('pkg/**/*.html').and_return([])
41
+ expect(Pkg::Util::Ship.collect_packages(['pkg/**/*.html'])).to be_empty
42
+ end
43
+ end
44
+
45
+ # Sample data for #reorganize_packages and #ship_pkgs specs
46
+ retrieved_packages = %w[
47
+ pkg/deb/bionic/puppet6/puppet-agent_6.19.0-1bionic_amd64.deb
48
+ pkg/el/7/puppet6/aarch64/puppet-agent-6.19.0-1.el7.aarch64.rpm
49
+ pkg/el/7/puppet6/ppc64le/puppet-agent-6.19.0-1.el7.ppc64le.rpm
50
+ pkg/el/7/puppet6/x86_64/puppet-agent-6.19.0-1.el7.x86_64.rpm
51
+ pkg/sles/12/puppet6/ppc64le/puppet-agent-6.19.0-1.sles12.ppc64le.rpm
52
+ pkg/sles/12/puppet6/x86_64/puppet-agent-6.19.0-1.sles12.x86_64.rpm
53
+ pkg/sles/15/puppet6/x86_64/puppet-agent-6.19.0-1.sles15.x86_64.rpm
54
+ pkg/apple/10.14/puppet6/x86_64/puppet-agent-6.19.0-1.osx10.14.dmg
55
+ pkg/apple/10.15/puppet6/x86_64/puppet-agent-6.19.0-1.osx10.15.dmg
56
+ pkg/fedora/32/puppet6/x86_64/puppet-agent-6.19.0-1.fc32.x86_64.rpm
57
+ pkg/windows/puppet-agent-6.19.0-x64.msi
58
+ pkg/windows/puppet-agent-6.19.0-x86.msi
59
+ pkg/windowsfips/puppet-agent-6.19.0-x64.msi
60
+ pkg/windows/puppet6/puppet-agent-x86.msi
61
+ pkg/windowsfips/puppet6/puppet-agent-x64.msi
62
+ ]
63
+
64
+ # After reorganization, the packages should look like this.
65
+ # Beware apple->mac transforms.
66
+ expected_reorganized_packages = %w[
67
+ pkg/bionic/puppet6/puppet-agent_6.19.0-1bionic_amd64.deb
68
+ pkg/puppet6/el/7/aarch64/puppet-agent-6.19.0-1.el7.aarch64.rpm
69
+ pkg/puppet6/el/7/ppc64le/puppet-agent-6.19.0-1.el7.ppc64le.rpm
70
+ pkg/puppet6/el/7/x86_64/puppet-agent-6.19.0-1.el7.x86_64.rpm
71
+ pkg/puppet6/sles/12/ppc64le/puppet-agent-6.19.0-1.sles12.ppc64le.rpm
72
+ pkg/puppet6/sles/12/x86_64/puppet-agent-6.19.0-1.sles12.x86_64.rpm
73
+ pkg/puppet6/sles/15/x86_64/puppet-agent-6.19.0-1.sles15.x86_64.rpm
74
+ pkg/mac/puppet6/10.14/x86_64/puppet-agent-6.19.0-1.osx10.14.dmg
75
+ pkg/mac/puppet6/10.15/x86_64/puppet-agent-6.19.0-1.osx10.15.dmg
76
+ pkg/puppet6/fedora/32/x86_64/puppet-agent-6.19.0-1.fc32.x86_64.rpm
77
+ pkg/windows/puppet6/puppet-agent-6.19.0-x64.msi
78
+ pkg/windows/puppet6/puppet-agent-6.19.0-x86.msi
79
+ pkg/windowsfips/puppet6/puppet-agent-6.19.0-x64.msi
80
+ pkg/windows/puppet6/puppet-agent-x86.msi
81
+ pkg/windowsfips/puppet6/puppet-agent-x64.msi
82
+ ]
83
+
84
+ describe '#reorganize_packages' do
85
+ # This is a sampling of packages found on builds.delivery.puppetlabs.net in
86
+ # '/opt/jenkins-builds/puppet-agent/<version>/artifacts'
87
+ # pl:jenkins:retrieve replaces 'artifacts' with 'pkg', so we pick up the
88
+ # action from that point by pretending that we've scanned the directory and
89
+ # made this list:
90
+
91
+ scratch_directory = Dir.mktmpdir
92
+
93
+ before :each do
94
+ allow(Pkg::Config).to receive(:repo_name).and_return('puppet6')
95
+ expect(FileUtils).to receive(:cp).at_least(:once).and_return(true)
96
+ end
97
+
98
+ original_packages = retrieved_packages
99
+
100
+ it 'leaves the old packages in place' do
101
+ reorganized_packages = Pkg::Util::Ship
102
+ .reorganize_packages(retrieved_packages, scratch_directory)
103
+
104
+ expect(retrieved_packages).to eq(original_packages)
105
+ end
106
+
107
+ it 'returns a list of properly reorganized packages' do
108
+ reorganized_packages = Pkg::Util::Ship
109
+ .reorganize_packages(retrieved_packages, scratch_directory)
110
+ expect(reorganized_packages).to eq(expected_reorganized_packages)
111
+ end
112
+ end
113
+
114
+ describe '#ship_pkgs' do
115
+ test_staging_server = 'foo.delivery.puppetlabs.net'
116
+ test_remote_path = '/opt/repository/yum'
117
+
118
+ it 'ships the packages to the staging server' do
119
+ allow(Pkg::Util::Ship)
120
+ .to receive(:collect_packages)
121
+ .and_return(retrieved_packages)
122
+ allow(Pkg::Util::Ship)
123
+ .to receive(:reorganize_packages)
124
+ .and_return(expected_reorganized_packages)
125
+ allow(Pkg::Util).to receive(:ask_yes_or_no).and_return(true)
126
+ # All of these expects must be called in the same block in order for the
127
+ # tests to work without actually shipping anything
128
+ expect(Pkg::Util::Net)
129
+ .to receive(:remote_execute)
130
+ .with(test_staging_server, /#{test_remote_path}/)
131
+ .exactly(retrieved_packages.count).times
132
+ expect(Pkg::Util::Net)
133
+ .to receive(:rsync_to)
134
+ .with(anything, test_staging_server, /#{test_remote_path}/, anything)
135
+ .exactly(retrieved_packages.count).times
136
+ expect(Pkg::Util::Net)
137
+ .to receive(:remote_set_ownership)
138
+ .with(test_staging_server, 'root', 'release', anything)
139
+ .exactly(retrieved_packages.count).times
140
+ expect(Pkg::Util::Net)
141
+ .to receive(:remote_set_permissions)
142
+ .with(test_staging_server, '775', anything)
143
+ .exactly(retrieved_packages.count).times
144
+ expect(Pkg::Util::Net)
145
+ .to receive(:remote_set_permissions)
146
+ .with(test_staging_server, '0664', anything)
147
+ .exactly(retrieved_packages.count).times
148
+ expect(Pkg::Util::Net)
149
+ .to receive(:remote_set_immutable)
150
+ .with(test_staging_server, anything)
151
+ .exactly(retrieved_packages.count).times
152
+ expect(Pkg::Util::Ship.ship_pkgs(['pkg/**/*.rpm'], test_staging_server, test_remote_path))
153
+ .to eq(true)
154
+ end
155
+
156
+ it 'ships packages containing the string `pkg` to the right place' do
157
+ retrieved_package = 'pkg/el/7/puppet6/x86_64/puppet-agent-6.19.0-1.el7.x86_64.rpm'
158
+ reorganized_package = 'pkg/puppet6/el/7/x86_64/puppet-agent-6.19.0-1.el7.x86_64.rpm'
159
+ package_basename = File.basename(reorganized_package)
160
+ repository_base_path = '/opt/repository/yum/puppet6/el/7/x86_64'
161
+
162
+ allow(Pkg::Util::Ship).to receive(:collect_packages).and_return([retrieved_package])
163
+ allow(Pkg::Util::Ship).to receive(:reorganize_packages).and_return([reorganized_package])
164
+ allow(Pkg::Util).to receive(:ask_yes_or_no).and_return(true)
165
+ allow(Dir).to receive(:mktmpdir).and_return('/tmp/test')
166
+
167
+ # All of these expects must be called in the same block in order for the
168
+ # tests to work without actually shipping anything
169
+ expect(Pkg::Util::Net)
170
+ .to receive(:remote_execute)
171
+ .with(test_staging_server, /#{test_remote_path}/)
172
+ expect(Pkg::Util::Net)
173
+ .to receive(:rsync_to)
174
+ .with(anything, test_staging_server, /#{test_remote_path}/, anything)
175
+ expect(Pkg::Util::Net)
176
+ .to receive(:remote_set_ownership)
177
+ .with(test_staging_server, 'root', 'release',
178
+ [repository_base_path, "#{repository_base_path}/#{package_basename}"])
179
+ expect(Pkg::Util::Net)
180
+ .to receive(:remote_set_permissions)
181
+ .with(test_staging_server, '775', anything)
182
+ expect(Pkg::Util::Net)
183
+ .to receive(:remote_set_permissions)
184
+ .with(test_staging_server, '0664', anything)
185
+ expect(Pkg::Util::Net)
186
+ .to receive(:remote_set_immutable)
187
+ .with(test_staging_server, anything)
188
+ expect(Pkg::Util::Ship.ship_pkgs(['pkg/**/*.rpm'], test_staging_server,
189
+ test_remote_path, excludes: ['puppet-agent']))
190
+ .to eq(true)
191
+ end
192
+
193
+ it 'returns false if there are no packages to ship' do
194
+ expect(Pkg::Util::Ship.ship_pkgs(['pkg/**/*.msi'],
195
+ test_staging_server, test_remote_path))
196
+ .to eq(false)
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,123 @@
1
+ # -*- ruby -*-
2
+ require 'spec_helper'
3
+
4
+ # Spec tests for Pkg::Util::Version
5
+ #
6
+ # rubocop:disable Metrics/BlockLength
7
+ describe 'Pkg::Util::Version' do
8
+ context '#versionbump' do
9
+ let(:version_file) { 'thing.txt' }
10
+ let(:version) { '1.2.3' }
11
+ let(:orig_contents) { "abcd\nVERSION = @DEVELOPMENT_VERSION@\n" }
12
+ let(:updated_contents) { "abcd\nVERSION = #{version}\n" }
13
+
14
+ it 'should update the version file contents accordingly' do
15
+ Pkg::Config.config_from_hash(project: 'foo', version_file: version_file)
16
+ allow(IO).to receive(:read).with(version_file) { orig_contents }
17
+ allow(Pkg::Config).to receive(:version) { version }
18
+ version_file_to_write = double('file')
19
+ expect(File).to receive(:open).with(version_file, 'w').and_yield(version_file_to_write)
20
+ expect(version_file_to_write).to receive(:write).with(updated_contents)
21
+ Pkg::Util::Version.versionbump
22
+ end
23
+ end
24
+
25
+ describe '#base_pkg_version' do
26
+ version_hash = {
27
+ '5.6' => ['5.6', '1'],
28
+ '1.0.0' => ['1.0.0', '1'],
29
+ '2017.6.5.3' => ['2017.6.5.3', '1'],
30
+ '4.99.0-22' => ['4.99.0.22', '0.1'],
31
+ '1.0.0-658-gabc1234' => ['1.0.0.658.gabc1234', '0.1'],
32
+ '5.0.0.master.SNAPSHOT.2017.05.16T1357' => ['5.0.0.master', '0.1SNAPSHOT.2017.05.16T1357'],
33
+ '5.9.7-rc4' => ['5.9.7', '0.1rc4'],
34
+ '5.9.7-rc4-65-gabc1234' => ['5.9.7.65.gabc1234', '0.1rc4'],
35
+ '5.9.7-rc4-65-gabc1234-dirty' => ['5.9.7.65.gabc1234', '0.1rc4dirty'],
36
+ '4.99.0-dirty' => ['4.99.0', '0.1dirty'],
37
+ '4.99.0-56-gabc1234-dirty' => ['4.99.0.56.gabc1234', '0.1dirty']
38
+ }
39
+ version_hash.each do |pre, post|
40
+ before do
41
+ allow(Pkg::Config).to receive(:version) { pre }
42
+ allow(Pkg::Config).to receive(:release) { '1' }
43
+ allow(Pkg::Config).to receive(:vanagon_project) { false }
44
+ end
45
+
46
+ it "transforms #{pre} to #{post}" do
47
+ expect(Pkg::Util::Version.base_pkg_version(pre)).to eq post
48
+ end
49
+ end
50
+ end
51
+
52
+ describe '#final?' do
53
+ final_versions = [
54
+ '1.0.0',
55
+ '2017.6.5.3',
56
+ '0.6.8',
57
+ '2068.532.6',
58
+ '96.5'
59
+ ]
60
+
61
+ non_final_versions = [
62
+ '4.99.0-22',
63
+ '1.0.0-658-gabc1234',
64
+ '5.0.0.master.SNAPSHOT.2017.05.16T1357',
65
+ '5.9.7-rc4',
66
+ '4.99.0-56-dirty'
67
+ ]
68
+
69
+ final_versions.each do |version|
70
+ it "returns true when given #{version}" do
71
+ allow(Pkg::Config).to receive(:version) { nil }
72
+ expect(Pkg::Util::Version.final?(version)).to be true
73
+ end
74
+ end
75
+
76
+ non_final_versions.each do |version|
77
+ it "returns false when given #{version}" do
78
+ allow(Pkg::Config).to receive(:version) { nil }
79
+ expect(Pkg::Util::Version.final?(version)).to be false
80
+ end
81
+ end
82
+
83
+ it 'correctly reads a final version from Pkg::Config.version' do
84
+ allow(Pkg::Config).to receive(:version) { '1.0.0' }
85
+ expect(Pkg::Util::Version.final?).to be true
86
+ end
87
+
88
+ it 'correctly reads a non-final version from Pkg::Config.version' do
89
+ allow(Pkg::Config).to receive(:version) { '4.99.0-56-dirty' }
90
+ expect(Pkg::Util::Version.final?).to be false
91
+ end
92
+
93
+ it 'classifies dirty versions as final when allow_dirty_tree is set' do
94
+ allow(Pkg::Config).to receive(:allow_dirty_tree).and_return true
95
+ allow(Pkg::Config).to receive(:version) { '1.0.0-dirty' }
96
+ expect(Pkg::Util::Version.final?).to be true
97
+ end
98
+
99
+ it 'classifies dirty nonfinal versions as not final even when allow_dirty_tree is set' do
100
+ allow(Pkg::Config).to receive(:allow_dirty_tree).and_return true
101
+ allow(Pkg::Config).to receive(:version) { '1.0.0-22-dirty' }
102
+ expect(Pkg::Util::Version.final?).to be false
103
+ end
104
+ end
105
+
106
+ context "#dash_version" do
107
+ versions = {
108
+ '5.3.0' => '5.3.0',
109
+ '5.3.0-18-gfbddc8f' => '5.3.0-18',
110
+ '5.3.0-18-gfbddc8f-dirty' => '5.3.0-18-dirty',
111
+ '0.7.0-rc1' => '0.7.0-rc1',
112
+ '0.7.0-rc1-63-g51ccc51' => '0.7.0-rc1-63',
113
+ '0.7.0-rc1-63-g51ccc51-dirty'=> '0.7.0-rc1-63-dirty',
114
+ }
115
+ versions.each do |describe, reformatted|
116
+ it "correctly returns #{reformatted} when #{describe} is the git describe version" do
117
+ allow(Pkg::Util::Git).to receive(:ref_type).and_return 'sha'
118
+ allow(Pkg::Util::Git).to receive(:describe).and_return describe
119
+ expect(Pkg::Util::Version.dash_version).to eq reformatted
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ # We load packaging.rb once, in spec_helper, to avoid reloading the library
4
+ # and issuing warnings about already defined constants.
5
+ describe "Pkg" do
6
+ it "should require the utilities module, Pkg::Util" do
7
+ Pkg::Util.should_not be_nil
8
+ end
9
+
10
+ it "should require the configuration module, Pkg::Config" do
11
+ Pkg::Config.should_not be_nil
12
+ end
13
+
14
+ it "should require the tar library, Pkg::Tar" do
15
+ Pkg::Tar.should_not be_nil
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'pathname'
4
+ require 'rake'
5
+
6
+ SPECDIR = Pathname(__FILE__).dirname
7
+ PROJECT_ROOT = File.expand_path(File.join(Pathname(__FILE__).dirname, ".."))
8
+ FIXTURES = File.join(SPECDIR, 'fixtures')
9
+
10
+ require File.join(SPECDIR, '..', 'lib', 'packaging.rb')
11
+
12
+ def load_task(name)
13
+ return false if (@loaded ||= {})[name]
14
+ load File.join(SPECDIR, '..', 'tasks', name)
15
+ @loaded[name] = true
16
+ end
17
+
18
+ def reset_env(keys)
19
+ keys.each do |key|
20
+ ENV[key] = nil
21
+ end
22
+ end