vanagon 0.12.2 → 0.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9edf9922c6e47b100e228f38190ebc1e0d01a102
4
- data.tar.gz: 8267580682ab771c77615f4ba936d389680a62c7
3
+ metadata.gz: 1862a2a62a15ce507d5fade3b65736fcfc1e4b90
4
+ data.tar.gz: b317b66ef360dd1c87c73d6a743b2677bc0f108b
5
5
  SHA512:
6
- metadata.gz: 399f46811612f5200dcf9a056bd2a37f6b242abaf3b4f98642de37e257fd55408b6e64c4a392bb1eb0a313b6de7745c7b7a8afcd5dd1841d429032d8def06c95
7
- data.tar.gz: 0d0fee8345a6116531ce908ee02cd841b6fc4c4f41332cb39eb39dcd9c32d20543ee4e9c448050904b0e8bd37128a47bcb733c4474348b4024f72467733762a9
6
+ metadata.gz: da5849324a741b84e3db25778605fc5eb60cc81bbd7cf6fa17989ee6ff634245cf06570ef55eff70df46075e03156a16019d13b6abdd1b7a4162e05e17b9a68d
7
+ data.tar.gz: 7f1a382f3b438022825ff6e43955b65ba5a8dffd51029281dc175d859ccac408876646a29023af53422c9d61eb336d7e983f01d59c148b2a4d30e1ac2bb549b5
@@ -1,5 +1,9 @@
1
+ require 'time'
2
+
1
3
  LIBDIR = File.expand_path(File.dirname(__FILE__))
2
4
  VANAGON_ROOT = File.join(File.expand_path(File.dirname(__FILE__)), "..")
5
+ BUILD_TIME = Time.now.iso8601
6
+ VANAGON_VERSION = Gem.loaded_specs["vanagon"].version.to_s
3
7
 
4
8
  $:.unshift(LIBDIR) unless
5
9
  $:.include?(File.dirname(__FILE__)) || $:.include?(LIBDIR)
@@ -289,6 +289,10 @@ class Vanagon
289
289
  end
290
290
  end
291
291
 
292
+ def get_dependency_hash
293
+ { name => { 'version' => version, 'ref' => options[:ref] }.delete_if { |_, v| !v } }
294
+ end
295
+
292
296
  # Fetches secondary sources for the component. These are just dumped into the workdir currently.
293
297
  #
294
298
  # @param workdir [String] working directory to put the source into
@@ -124,6 +124,7 @@ class Vanagon
124
124
  @project.make_makefile(@workdir)
125
125
  @project.make_bill_of_materials(@workdir)
126
126
  @project.generate_packaging_artifacts(@workdir)
127
+ @project.save_manifest_json
127
128
  @engine.ship_workdir(@workdir)
128
129
  @engine.dispatch("(cd #{@engine.remote_workdir}; #{@platform.make})")
129
130
  @engine.retrieve_built_artifact
@@ -475,5 +475,44 @@ class Vanagon
475
475
  def generate_packaging_artifacts(workdir)
476
476
  @platform.generate_packaging_artifacts(workdir, @name, binding)
477
477
  end
478
+
479
+ # Generate a json hash which lists all of the dependant components of the
480
+ # project.
481
+ #
482
+ # @return [Hash] where the top level keys are components and their values
483
+ # are hashes with additional information on the component.
484
+ def generate_dependencies_info
485
+ @components.each_with_object({}) do |component, hsh|
486
+ hsh.merge!(component.get_dependency_hash)
487
+ end
488
+ end
489
+
490
+ # Generate a hash which contains relevant information regarding components
491
+ # of a package, what vanagon built the package, time of build, as well as
492
+ # version of the thing we were building.
493
+ #
494
+ # @return [Hash] of information which is useful to know about how a package
495
+ # was built and what went into the package.
496
+ def build_manifest_json
497
+ manifest = {
498
+ "packaging_type" => {
499
+ "vanagon" => VANAGON_VERSION,
500
+ },
501
+ "version" => version,
502
+ "components" => generate_dependencies_info,
503
+ "build_time" => BUILD_TIME,
504
+ }
505
+ end
506
+
507
+ # Writes a json file at `ext/build_metadata.json` containing information
508
+ # about what went into a built artifact
509
+ #
510
+ # @return [Hash] of build information
511
+ def save_manifest_json
512
+ manifest = build_manifest_json
513
+ File.open(File.join('ext', 'build_metadata.json'), 'w') do |f|
514
+ f.write(JSON.pretty_generate(manifest))
515
+ end
516
+ end
478
517
  end
479
518
  end
@@ -115,4 +115,55 @@ describe 'Vanagon::Project' do
115
115
  expect(@proj.filter_component(comp1.name)).to eq([comp1, comp2, comp3])
116
116
  end
117
117
  end
118
+
119
+ describe '#generate_dependencies_info' do
120
+ before(:each) do
121
+ @proj = Vanagon::Project.new('test-project', {})
122
+ end
123
+
124
+ it "returns a hash of components and their versions" do
125
+ comp1 = Vanagon::Component.new('test-component1', {}, {})
126
+ comp1.version = '1.0.0'
127
+ comp2 = Vanagon::Component.new('test-component2', {}, {})
128
+ comp2.version = '2.0.0'
129
+ comp2.options[:ref] = '123abcd'
130
+ comp3 = Vanagon::Component.new('test-component3', {}, {})
131
+ @proj.components << comp1
132
+ @proj.components << comp2
133
+ @proj.components << comp3
134
+
135
+ expect(@proj.generate_dependencies_info()).to eq({
136
+ 'test-component1' => { 'version' => '1.0.0' },
137
+ 'test-component2' => { 'version' => '2.0.0', 'ref' => '123abcd' },
138
+ 'test-component3' => {},
139
+ })
140
+ end
141
+ end
142
+
143
+ describe '#build_manifest_json' do
144
+ before(:each) do
145
+ class Vanagon
146
+ class Project
147
+ BUILD_TIME = '2017-07-10T13:34:25-07:00'
148
+ VANAGON_VERSION = '0.0.0-rspec'
149
+ end
150
+ end
151
+
152
+ @proj = Vanagon::Project.new('test-project', {})
153
+ end
154
+
155
+ it 'should generate a hash with the expected build metadata' do
156
+ comp1 = Vanagon::Component.new('test-component1', {}, {})
157
+ comp1.version = '1.0.0'
158
+ @proj.components << comp1
159
+ @proj.version = '123abcde'
160
+
161
+ expect(@proj.build_manifest_json()).to eq({
162
+ 'packaging_type' => { 'vanagon' => '0.0.0-rspec' },
163
+ 'version' => '123abcde',
164
+ 'components' => { 'test-component1' => { 'version' => '1.0.0' } },
165
+ 'build_time' => '2017-07-10T13:34:25-07:00',
166
+ })
167
+ end
168
+ end
118
169
  end
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.12.2
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-29 00:00:00.000000000 Z
11
+ date: 2017-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -239,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
239
  version: '0'
240
240
  requirements: []
241
241
  rubyforge_project:
242
- rubygems_version: 2.6.11
242
+ rubygems_version: 2.2.5
243
243
  signing_key:
244
244
  specification_version: 3
245
245
  summary: All of your packages will fit into this van with this one simple trick.