vanagon 0.12.2 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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.