vanagon 0.15.6 → 0.15.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5a83822020767811cd2c7b42d16b094752b1c9f
4
- data.tar.gz: ec3e49e59648f42c731ad2a0e96d0ee954b23816
3
+ metadata.gz: 4336ec3a1ac6ab79828d52af974690dbeedcfe99
4
+ data.tar.gz: 73c7603edc4fd846c4342bf663d8bf72d5325c72
5
5
  SHA512:
6
- metadata.gz: 62f44cecb7fa71043ac71cde7f64fb5b8b1c74fed0f05392e9b9b683762c73c7af7afae99d46c15622eac31259a8bacf1b03686eacbeff65ff2ae4e274025ebc
7
- data.tar.gz: 588443a7cbc72940736c2964b15e8da0dc61d90c23e7a009dd8ac1ca0c5a2a6c6f75e8228436a6e7ae9985943b4a6657f773d3a6fd537828c41af39c7f12ed4f
6
+ metadata.gz: 4822d6e213a8b76ebf7ff5815b9dfa9c2d3ad33f67da339709a9dd2b1e81926c847c915980f319c20640fc71aeeba9b43605618f8b62b77f98851f464e739f07
7
+ data.tar.gz: ae5344f15540d70bda07160ab8988c37f7fd27525bfea99b9c8a8ca14a4c6e72ed6a86ed7f94156883780a6b4113d227b59c40df9b79047f28e6621c5a622d02
data/bin/build CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  load File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "vanagon.rb"))
3
3
 
4
- optparse = Vanagon::OptParse.new("#{File.basename(__FILE__)} <project-name> <platform-name> [<target>] [options]",
4
+ optparse = Vanagon::OptParse.new("#{File.basename(__FILE__)} <project-name> <platform-name>[,<platform-name>...] [<target>,<target>...] [options]",
5
5
  %i[workdir configdir engine preserve verbose skipcheck only_build remote-workdir])
6
6
  options = optparse.parse! ARGV
7
7
 
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ENV["PROJECT_ROOT"] = Dir.pwd
4
+
5
+ # Begin warning: This sign script is an internal tool.
6
+ # This is not intended to function outside of Puppet Labs' infrastructure.
7
+ # End of warning.
8
+
9
+ if Dir["output/**/*"].select { |entry| File.file?(entry) }.empty?
10
+ fail "No packages to sign in the output directory. Maybe you want to build some first?"
11
+ end
12
+
13
+ require 'packaging'
14
+ Pkg::Util::RakeUtils.load_packaging_tasks
15
+ Pkg::Util::RakeUtils.invoke_task('pl:jenkins:sign_all', 'output')
@@ -349,7 +349,12 @@ class Vanagon
349
349
  unless @patches.empty?
350
350
  patchdir = File.join(workdir, "patches")
351
351
  FileUtils.mkdir_p(patchdir)
352
- FileUtils.cp(@patches.map(&:path), patchdir)
352
+ @patches.each do |p|
353
+ target = File.join(patchdir, File.basename(p.path))
354
+ raise Vanagon::Error, "Duplicate patch files detected, '#{p.path}' would have overwritten '#{target}'! Please ensure patch file names are unique across all components." if File.exist?(target)
355
+
356
+ FileUtils.cp(p.path, patchdir)
357
+ end
353
358
  end
354
359
  end
355
360
 
@@ -136,7 +136,7 @@ class Vanagon
136
136
  # Checkout desired ref/sha, make noise about it, and fail
137
137
  # entirely if we're unable to checkout that given ref/sha
138
138
  def checkout!
139
- warn "Checking out '#{ref}'' from Git repo '#{dirname}'"
139
+ warn "Checking out '#{ref}' from Git repo '#{dirname}'"
140
140
  clone.checkout(ref)
141
141
  rescue ::Git::GitExecuteError
142
142
  raise Vanagon::CheckoutFailed, "unable to checkout #{ref} from '#{url}'"
@@ -44,12 +44,6 @@ class Vanagon
44
44
  @options[:configdir] = configuration_directory
45
45
  end
46
46
 
47
- opts.on("-t HOST",
48
- "--target HOST",
49
- "Name of target machine for build and packaging (defaults to requesting from the pooler)") do |target|
50
- @options[:target] = target
51
- end
52
-
53
47
  opts.on("-e ENGINE",
54
48
  "--engine ENGINE",
55
49
  "Custom engine to use [base, local, docker, pooler] (defaults to \"pooler\")") do |engine|
@@ -319,14 +319,14 @@ class Vanagon
319
319
  # @return [true, false] true if it is a redhat variety or uses rpm
320
320
  # under the hood, false otherwise
321
321
  def is_rpm?
322
- return !!@name.match(/^(aix|cisco-wrlinux|el|eos|fedora|sles|redhat)-.*$/)
322
+ return !!@name.match(/^(aix|cisco-wrlinux|el|eos|fedora|sles|redhat|redhatfips)-.*$/)
323
323
  end
324
324
 
325
325
  # Utility matcher to determine is the platform is an enterprise linux variety
326
326
  #
327
327
  # @return [true, false] true if it is a enterprise linux variety, false otherwise
328
328
  def is_el?
329
- return !!@name.match(/^(el|redhat)-.*$/)
329
+ return !!@name.match(/^(el|redhat|redhatfips)-.*$/)
330
330
  end
331
331
 
332
332
  # Utility matcher to determine is the platform is a sles variety
@@ -469,13 +469,27 @@ class Vanagon
469
469
  final_archive = "output/#{name_and_version_and_platform}.tar.gz"
470
470
  archive_directory = "#{project.name}-archive"
471
471
  metadata = project.build_manifest_json(true)
472
+
473
+ # previously, we weren't properly handling the case of custom BOM paths.
474
+ # If we have a custom BOM path, during Makefile execution, the top-level
475
+ # BOM is moved to the custom path. So, when cleaning up BOMs for non-custom
476
+ # paths we just want to remove the BOM at the top level of the tarball.
477
+ # But, if we have a custom BOM path we want to move it back to where it
478
+ # was prior to the Makefile execution so we can preserve it as an artifact
479
+ # but not leave it to conflict if it's installed in the same custom path
480
+ # as a project using this archive.
481
+ bill_of_materials_command = 'rm -f bill-of-materials'
482
+ if project.bill_of_materials
483
+ bill_of_materials_command = "mv .#{project.bill_of_materials.path}/bill-of-materials ../.."
484
+ end
485
+
472
486
  metadata.gsub!(/\n/, '\n')
473
487
  [
474
488
  "mkdir output",
475
489
  "mkdir #{archive_directory}",
476
490
  "gunzip -c #{name_and_version}.tar.gz | '#{tar}' -C #{archive_directory} -xf -",
477
491
  "rm #{name_and_version}.tar.gz",
478
- "cd #{archive_directory}/#{name_and_version}; rm -f bill-of-materials; #{tar} cf ../../#{name_and_version_and_platform}.tar *",
492
+ "cd #{archive_directory}/#{name_and_version}; #{bill_of_materials_command}; #{tar} cf ../../#{name_and_version_and_platform}.tar *",
479
493
  "gzip -9c #{name_and_version_and_platform}.tar > #{name_and_version_and_platform}.tar.gz",
480
494
  "echo -e \"#{metadata}\" > output/#{name_and_version_and_platform}.json",
481
495
  "cp bill-of-materials output/#{name_and_version_and_platform}-bill-of-materials ||:",
@@ -30,7 +30,7 @@ class Vanagon
30
30
  @platform = case platform_name
31
31
  when /^aix-/
32
32
  Vanagon::Platform::RPM::AIX.new(@name)
33
- when /^(cisco-wrlinux|el|fedora|redhat)-/
33
+ when /^(cisco-wrlinux|el|fedora|redhat|redhatfips)-/
34
34
  Vanagon::Platform::RPM.new(@name)
35
35
  when /^sles-/
36
36
  Vanagon::Platform::RPM::SLES.new(@name)
@@ -525,7 +525,13 @@ class Vanagon
525
525
  #
526
526
  # @return [Array] all the files and directories that should be included in the tarball
527
527
  def get_tarball_files
528
- files = ['file-list', 'bill-of-materials']
528
+ files = ['bill-of-materials']
529
+
530
+ if bill_of_materials
531
+ files = ["#{bill_of_materials.path}/bill-of-materials"]
532
+ end
533
+
534
+ files.push 'file-list'
529
535
  files.push get_files.map(&:path)
530
536
  files.push get_configfiles.map(&:path)
531
537
  if @platform.is_windows?
@@ -193,4 +193,35 @@ describe "Vanagon::Component" do
193
193
  subject.get_sources(@workdir)
194
194
  end
195
195
  end
196
+
197
+ describe "#get_patches" do
198
+ before :each do
199
+ @workdir = Dir.mktmpdir
200
+ end
201
+
202
+ let(:platform) do
203
+ plat = Vanagon::Platform::DSL.new('el-5-x86_64')
204
+ plat.instance_eval("platform 'el-5-x86_64' do |plat| end")
205
+ plat._platform
206
+ end
207
+
208
+ let(:component) { Vanagon::Component::DSL.new('patches-test', {}, platform) }
209
+
210
+ context("when new patch file would overwrite existing patch file") do
211
+ let(:patch_file) { 'path/to/test.patch' }
212
+
213
+ before :each do
214
+ allow(FileUtils).to receive(:mkdir_p)
215
+ allow(FileUtils).to receive(:cp)
216
+
217
+ expect(File).to receive(:exist?).with(File.join(@workdir, 'patches', File.basename(patch_file))).and_return(true)
218
+
219
+ component.apply_patch(patch_file)
220
+ end
221
+
222
+ it "fails the build" do
223
+ expect { component._component.get_patches(@workdir) }.to raise_error(Vanagon::Error, /duplicate patch files/i)
224
+ end
225
+ end
226
+ end
196
227
  end
@@ -45,7 +45,7 @@ describe Vanagon::OptParse do
45
45
 
46
46
 
47
47
  describe "options that take a value" do
48
- [:workdir, :configdir, :target, :engine].each do |option|
48
+ [:workdir, :configdir, :engine].each do |option|
49
49
  it "can create an option parser that accepts the #{option} option" do
50
50
  subject = described_class.new("test", [option])
51
51
  expect(subject.parse!(["--#{option}", "hello"])).to include(option => "hello")
@@ -53,7 +53,7 @@ describe Vanagon::OptParse do
53
53
  end
54
54
 
55
55
  describe "short options" do
56
- [["w", :workdir], ["c", :configdir], ["t", :target], ["e", :engine]].each do |short, long|
56
+ [["w", :workdir], ["c", :configdir], ["e", :engine]].each do |short, long|
57
57
  it "maps the short option #{short} to #{long}" do
58
58
  subject = described_class.new("test", [long])
59
59
  expect(subject.parse!(["-#{short}", "hello"])).to include(long => "hello")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vanagon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.6
4
+ version: 0.15.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-19 00:00:00.000000000 Z
11
+ date: 2018-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -75,6 +75,7 @@ executables:
75
75
  - ship
76
76
  - render
77
77
  - repo
78
+ - sign
78
79
  - build_host_info
79
80
  extensions: []
80
81
  extra_rdoc_files: []
@@ -87,6 +88,7 @@ files:
87
88
  - bin/render
88
89
  - bin/repo
89
90
  - bin/ship
91
+ - bin/sign
90
92
  - lib/git/basic_submodules.rb
91
93
  - lib/git/rev_list.rb
92
94
  - lib/makefile.rb
@@ -257,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
257
259
  version: '0'
258
260
  requirements: []
259
261
  rubyforge_project:
260
- rubygems_version: 2.5.2.1
262
+ rubygems_version: 2.6.10
261
263
  signing_key:
262
264
  specification_version: 3
263
265
  summary: All of your packages will fit into this van with this one simple trick.