omnibus 6.0.25 → 7.0.12

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.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -3
  3. data/README.md +25 -9
  4. data/Rakefile +1 -1
  5. data/lib/omnibus/build_version_dsl.rb +1 -0
  6. data/lib/omnibus/builder.rb +10 -7
  7. data/lib/omnibus/changelog_printer.rb +7 -4
  8. data/lib/omnibus/cleaner.rb +3 -0
  9. data/lib/omnibus/cli.rb +1 -1
  10. data/lib/omnibus/cli/changelog.rb +24 -24
  11. data/lib/omnibus/cli/publish.rb +5 -5
  12. data/lib/omnibus/compressor.rb +2 -2
  13. data/lib/omnibus/compressors/base.rb +1 -1
  14. data/lib/omnibus/compressors/dmg.rb +45 -7
  15. data/lib/omnibus/config.rb +12 -2
  16. data/lib/omnibus/fetchers/git_fetcher.rb +1 -0
  17. data/lib/omnibus/fetchers/net_fetcher.rb +2 -3
  18. data/lib/omnibus/file_syncer.rb +2 -2
  19. data/lib/omnibus/generator.rb +1 -0
  20. data/lib/omnibus/generator_files/Gemfile.erb +2 -2
  21. data/lib/omnibus/generator_files/README.md.erb +18 -15
  22. data/lib/omnibus/generator_files/config/projects/project.rb.erb +0 -3
  23. data/lib/omnibus/generator_files/config/software/preparation.rb.erb +30 -0
  24. data/lib/omnibus/generator_files/omnibus.rb.erb +5 -4
  25. data/lib/omnibus/health_check.rb +1 -1
  26. data/lib/omnibus/licensing.rb +3 -4
  27. data/lib/omnibus/logger.rb +2 -1
  28. data/lib/omnibus/manifest.rb +1 -1
  29. data/lib/omnibus/metadata.rb +2 -2
  30. data/lib/omnibus/packagers/appx.rb +1 -2
  31. data/lib/omnibus/packagers/base.rb +1 -0
  32. data/lib/omnibus/packagers/bff.rb +6 -8
  33. data/lib/omnibus/packagers/deb.rb +7 -10
  34. data/lib/omnibus/packagers/ips.rb +3 -6
  35. data/lib/omnibus/packagers/makeself.rb +1 -2
  36. data/lib/omnibus/packagers/msi.rb +12 -11
  37. data/lib/omnibus/packagers/pkg.rb +125 -9
  38. data/lib/omnibus/packagers/rpm.rb +13 -12
  39. data/lib/omnibus/packagers/solaris.rb +4 -4
  40. data/lib/omnibus/packagers/windows_base.rb +7 -6
  41. data/lib/omnibus/project.rb +1 -0
  42. data/lib/omnibus/publisher.rb +14 -12
  43. data/lib/omnibus/publishers/s3_publisher.rb +6 -4
  44. data/lib/omnibus/s3_cache.rb +3 -1
  45. data/lib/omnibus/s3_helpers.rb +6 -6
  46. data/lib/omnibus/software.rb +66 -30
  47. data/lib/omnibus/templating.rb +1 -1
  48. data/lib/omnibus/util.rb +3 -2
  49. data/lib/omnibus/version.rb +1 -1
  50. data/lib/omnibus/whitelist.rb +6 -1
  51. data/omnibus.gemspec +7 -6
  52. data/resources/rpm/signing.erb +7 -10
  53. data/spec/functional/builder_spec.rb +2 -1
  54. data/spec/functional/fetchers/file_fetcher_spec.rb +4 -4
  55. data/spec/functional/fetchers/git_fetcher_spec.rb +4 -4
  56. data/spec/functional/fetchers/net_fetcher_spec.rb +5 -6
  57. data/spec/functional/fetchers/path_fetcher_spec.rb +4 -4
  58. data/spec/functional/file_syncer_spec.rb +42 -0
  59. data/spec/functional/licensing_spec.rb +5 -5
  60. data/spec/spec_helper.rb +6 -0
  61. data/spec/support/examples.rb +3 -4
  62. data/spec/unit/builder_spec.rb +9 -9
  63. data/spec/unit/changelogprinter_spec.rb +8 -6
  64. data/spec/unit/compressor_spec.rb +3 -3
  65. data/spec/unit/compressors/dmg_spec.rb +43 -4
  66. data/spec/unit/fetchers/net_fetcher_spec.rb +16 -17
  67. data/spec/unit/generator_spec.rb +1 -0
  68. data/spec/unit/health_check_spec.rb +2 -6
  69. data/spec/unit/library_spec.rb +2 -1
  70. data/spec/unit/manifest_diff_spec.rb +2 -2
  71. data/spec/unit/manifest_spec.rb +1 -1
  72. data/spec/unit/metadata_spec.rb +9 -11
  73. data/spec/unit/omnibus_spec.rb +1 -1
  74. data/spec/unit/packagers/bff_spec.rb +2 -2
  75. data/spec/unit/packagers/msi_spec.rb +2 -2
  76. data/spec/unit/packagers/pkg_spec.rb +354 -0
  77. data/spec/unit/packagers/pkgsrc_spec.rb +1 -1
  78. data/spec/unit/packagers/solaris_spec.rb +7 -7
  79. data/spec/unit/project_spec.rb +2 -2
  80. data/spec/unit/publisher_spec.rb +8 -9
  81. data/spec/unit/publishers/artifactory_publisher_spec.rb +2 -4
  82. data/spec/unit/publishers/s3_publisher_spec.rb +2 -4
  83. data/spec/unit/s3_cacher_spec.rb +19 -6
  84. data/spec/unit/s3_helpers_spec.rb +22 -3
  85. data/spec/unit/software_spec.rb +72 -42
  86. data/spec/unit/util_spec.rb +1 -2
  87. metadata +32 -11
@@ -13,10 +13,10 @@ module Omnibus
13
13
 
14
14
  let(:manifest_entry) do
15
15
  double(Omnibus::ManifestEntry,
16
- name: "pathelogical",
17
- locked_version: nil,
18
- described_version: nil,
19
- locked_source: source)
16
+ name: "pathelogical",
17
+ locked_version: nil,
18
+ described_version: nil,
19
+ locked_source: source)
20
20
  end
21
21
 
22
22
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
@@ -110,10 +110,10 @@ module Omnibus
110
110
  let(:remote) { remote_git_repo("zlib", annotated_tags: [version]) }
111
111
  let(:manifest_entry) do
112
112
  double(ManifestEntry,
113
- name: "software",
114
- locked_version: "efde208366abd0f91419d8a54b45e3f6e0540105",
115
- described_version: version,
116
- locked_source: source)
113
+ name: "software",
114
+ locked_version: "efde208366abd0f91419d8a54b45e3f6e0540105",
115
+ described_version: version,
116
+ locked_source: source)
117
117
  end
118
118
 
119
119
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
@@ -4,8 +4,7 @@ module Omnibus
4
4
  module RSpec
5
5
  module OhaiHelpers
6
6
  # Turn off the mandatory Ohai helper.
7
- def stub_ohai(options = {}, &block)
8
- end
7
+ def stub_ohai(options = {}, &block); end
9
8
  end
10
9
  end
11
10
 
@@ -29,10 +28,10 @@ module Omnibus
29
28
 
30
29
  let(:manifest_entry) do
31
30
  double(ManifestEntry,
32
- name: "software",
33
- locked_version: "1.2.8",
34
- described_version: "1.2.8",
35
- locked_source: source)
31
+ name: "software",
32
+ locked_version: "1.2.8",
33
+ described_version: "1.2.8",
34
+ locked_source: source)
36
35
  end
37
36
 
38
37
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
@@ -12,10 +12,10 @@ module Omnibus
12
12
 
13
13
  let(:manifest_entry) do
14
14
  double(Omnibus::ManifestEntry,
15
- name: "pathelogical",
16
- locked_version: nil,
17
- described_version: nil,
18
- locked_source: source)
15
+ name: "pathelogical",
16
+ locked_version: nil,
17
+ described_version: nil,
18
+ locked_source: source)
19
19
  end
20
20
 
21
21
  before do
@@ -56,6 +56,14 @@ module Omnibus
56
56
  FileUtils.touch(File.join(source, ".dot_folder", "file_f"))
57
57
 
58
58
  FileUtils.touch(File.join(source, ".file_g"))
59
+
60
+ FileUtils.mkdir_p(File.join(source, "nested", "deep", "folder"))
61
+ FileUtils.touch(File.join(source, "nested", "deep", "folder", "file_h"))
62
+ FileUtils.touch(File.join(source, "nested", "deep", "folder", "file_i"))
63
+
64
+ FileUtils.mkdir_p(File.join(source, "nested", "deep", "deep", "folder"))
65
+ FileUtils.touch(File.join(source, "nested", "deep", "deep", "folder", "file_j"))
66
+ FileUtils.touch(File.join(source, "nested", "deep", "deep", "folder", "file_k"))
59
67
  source
60
68
  end
61
69
 
@@ -233,6 +241,40 @@ module Omnibus
233
241
  expect("#{destination}/.file_g").to be_a_file
234
242
  end
235
243
 
244
+ it "does not copy files and folders that match the wildcard pattern" do
245
+ described_class.sync(source, destination, exclude: "nested/*/folder")
246
+
247
+ expect("#{destination}/file_a").to be_a_file
248
+ expect("#{destination}/file_b").to be_a_file
249
+ expect("#{destination}/file_c").to be_a_file
250
+ expect("#{destination}/folder/file_d").to be_a_file
251
+ expect("#{destination}/folder/file_e").to be_a_file
252
+ expect("#{destination}/.dot_folder").to be_a_directory
253
+ expect("#{destination}/.dot_folder/file_f").to be_a_file
254
+ expect("#{destination}/.file_g").to be_a_file
255
+ expect("#{destination}/nested/deep/folder/file_h").to_not be_a_file
256
+ expect("#{destination}/nested/deep/folder/file_i").to_not be_a_file
257
+ expect("#{destination}/nested/deep/deep/folder/file_j").to be_a_file
258
+ expect("#{destination}/nested/deep/deep/folder/file_k").to be_a_file
259
+ end
260
+
261
+ it "does not copy files and folders that match the super wildcard pattern" do
262
+ described_class.sync(source, destination, exclude: "nested/**/folder")
263
+
264
+ expect("#{destination}/file_a").to be_a_file
265
+ expect("#{destination}/file_b").to be_a_file
266
+ expect("#{destination}/file_c").to be_a_file
267
+ expect("#{destination}/folder/file_d").to be_a_file
268
+ expect("#{destination}/folder/file_e").to be_a_file
269
+ expect("#{destination}/.dot_folder").to be_a_directory
270
+ expect("#{destination}/.dot_folder/file_f").to be_a_file
271
+ expect("#{destination}/.file_g").to be_a_file
272
+ expect("#{destination}/nested/deep/folder/file_h").to_not be_a_file
273
+ expect("#{destination}/nested/deep/folder/file_i").to_not be_a_file
274
+ expect("#{destination}/nested/deep/deep/folder/file_j").to_not be_a_file
275
+ expect("#{destination}/nested/deep/deep/folder/file_k").to_not be_a_file
276
+ end
277
+
236
278
  it "removes existing files and folders in destination" do
237
279
  FileUtils.mkdir_p("#{destination}/existing_folder")
238
280
  FileUtils.touch("#{destination}/existing_file")
@@ -37,14 +37,14 @@ module Omnibus
37
37
  expect(project_license).to match /This product bundles private_code 1.7.2,\nwhich is available under a "Unspecified"/
38
38
  expect(project_license).to match /This product bundles snoopy 1.0.0,\nwhich is available under a "GPL v2"/
39
39
  expect(project_license).not_to match /preparation/
40
- expect(project_license).to match /LICENSES\/snoopy-artistic.html/
41
- expect(project_license).to match /LICENSES\/snoopy-NOTICE/
40
+ expect(project_license).to match %r{LICENSES/snoopy-artistic.html}
41
+ expect(project_license).to match %r{LICENSES/snoopy-NOTICE}
42
42
  if zlib_version_override
43
43
  expect(project_license).to match /This product bundles zlib 1.8.0,\nwhich is available under a "Apache-2.0"/
44
- expect(project_license).to match /LICENSES\/zlib-APACHE/
44
+ expect(project_license).to match %r{LICENSES/zlib-APACHE}
45
45
  else
46
46
  expect(project_license).to match /This product bundles zlib 1.7.2,\nwhich is available under a "Zlib"/
47
- expect(project_license).to match /LICENSES\/zlib-LICENSE/
47
+ expect(project_license).to match %r{LICENSES/zlib-LICENSE}
48
48
  end
49
49
  end
50
50
 
@@ -263,7 +263,7 @@ module Omnibus
263
263
  it "should log a warning for the missing file" do
264
264
  output = capture_logging { create_licenses }
265
265
  expect(output).to match(/Retrying failed download/)
266
- expect(output).to match(/Can not download license file 'https:\/\/downloads.chef.io\/LICENSE' for software 'problematic'./)
266
+ expect(output).to match(%r{Can not download license file 'https://downloads.chef.io/LICENSE' for software 'problematic'.})
267
267
  end
268
268
  end
269
269
 
@@ -1,3 +1,5 @@
1
+ Encoding.default_external = Encoding::UTF_8
2
+
1
3
  require "rspec"
2
4
  require "rspec/its"
3
5
  require "rspec/json_expectations"
@@ -16,6 +18,10 @@ def mac?
16
18
  end
17
19
 
18
20
  RSpec.configure do |config|
21
+ config.expect_with :rspec do |c|
22
+ c.max_formatted_output_length = 1000
23
+ end
24
+
19
25
  # Custom matchers and shared examples
20
26
  require_relative "support/examples"
21
27
  require_relative "support/matchers"
@@ -27,8 +27,7 @@ RSpec.shared_examples "a software" do |name = "chefdk"|
27
27
  install_dir: install_dir,
28
28
  project_dir: project_dir,
29
29
  source: source,
30
- overridden?: false
31
- )
30
+ overridden?: false)
32
31
  end
33
32
 
34
33
  before do
@@ -56,12 +55,12 @@ RSpec.shared_examples "a software" do |name = "chefdk"|
56
55
  FileUtils.mkdir_p(embedded_bin_dir)
57
56
 
58
57
  allow(software).to receive(:with_embedded_path).and_return(
59
- "PATH" => "#{bin_dir}:#{embedded_bin_dir}:#{ENV['PATH']}"
58
+ "PATH" => "#{bin_dir}:#{embedded_bin_dir}:#{ENV["PATH"]}"
60
59
  )
61
60
 
62
61
  allow(software).to receive(:embedded_bin) do |binary|
63
62
  p = File.join(embedded_bin_dir, binary)
64
- p.gsub!(/\//, '\\') if windows?
63
+ p.gsub!(%r{/}, '\\') if windows?
65
64
  p
66
65
  end
67
66
  end
@@ -6,8 +6,7 @@ module Omnibus
6
6
  double(Software,
7
7
  name: "chefdk",
8
8
  install_dir: project_dir,
9
- project_dir: project_dir
10
- )
9
+ project_dir: project_dir)
11
10
  end
12
11
 
13
12
  let(:project_dir) { on_windows ? "C:/opscode/chefdk" : "/opt/chefdk" }
@@ -238,7 +237,7 @@ module Omnibus
238
237
  it "appends platform host to the options" do
239
238
  expect(subject).to receive(:command)
240
239
  .with("./configure --build=x86_64-w64-mingw32 --prefix=#{project_dir}/embedded", in_msys_bash: true)
241
- subject.configure()
240
+ subject.configure
242
241
  end
243
242
  end
244
243
 
@@ -254,7 +253,7 @@ module Omnibus
254
253
  it "appends platform host to the options" do
255
254
  expect(subject).to receive(:command)
256
255
  .with("./configure --build=i686-w64-mingw32 --prefix=#{project_dir}/embedded", in_msys_bash: true)
257
- subject.configure()
256
+ subject.configure
258
257
  end
259
258
  end
260
259
 
@@ -305,7 +304,8 @@ module Omnibus
305
304
  .with("config/patches", "good_patch")
306
305
  .and_return(
307
306
  [ ["#{project_dir}/patch_location1/good_patch", "#{project_dir}/patch_location2/good_patch"],
308
- "#{project_dir}/patch_location2/good_patch" ])
307
+ "#{project_dir}/patch_location2/good_patch" ]
308
+ )
309
309
  end
310
310
 
311
311
  it "is a DSL method" do
@@ -355,10 +355,10 @@ module Omnibus
355
355
 
356
356
  let(:software) do
357
357
  double(Software,
358
- name: "chefdk",
359
- install_dir: tmp_dir,
360
- project_dir: tmp_dir,
361
- overridden?: false)
358
+ name: "chefdk",
359
+ install_dir: tmp_dir,
360
+ project_dir: tmp_dir,
361
+ overridden?: false)
362
362
  end
363
363
 
364
364
  let(:before_build_shasum) do
@@ -16,16 +16,18 @@ module Omnibus
16
16
 
17
17
  let(:changelog) do
18
18
  double(ChangeLog,
19
- changelog_entries: %w{entry1 entry2},
20
- authors: %w{alice bob}) end
19
+ changelog_entries: %w{entry1 entry2},
20
+ authors: %w{alice bob})
21
+ end
21
22
  let(:git_changelog) do
22
23
  double(ChangeLog,
23
- changelog_entries:
24
- %w{sub-entry1 sub-entry2}) end
24
+ changelog_entries:
25
+ %w{sub-entry1 sub-entry2})
26
+ end
25
27
  let(:now) { double(Time) }
26
28
  let(:emptydiff) { EmptyManifestDiff.new }
27
29
  let(:old_manifest) do
28
- m = Manifest.new()
30
+ m = Manifest.new
29
31
  m.add("updated-comp", manifest_entry_for("updated-comp", "v9", "v9"))
30
32
  m.add("updated-comp-2", manifest_entry_for("updated-comp-2", "someref0", "someref0", :git))
31
33
  m.add("removed-comp", manifest_entry_for("removed-comp", "v9", "v9"))
@@ -33,7 +35,7 @@ module Omnibus
33
35
  m
34
36
  end
35
37
  let(:new_manifest) do
36
- m = Manifest.new()
38
+ m = Manifest.new
37
39
  m.add("updated-comp", manifest_entry_for("updated-comp", "v10", "v10"))
38
40
  m.add("updated-comp-2", manifest_entry_for("updated-comp-2", "someotherref", "someotherref", :git))
39
41
  m.add("added-comp", manifest_entry_for("added-comp", "v100", "v100"))
@@ -8,13 +8,13 @@ module Omnibus
8
8
 
9
9
  context "when :dmg is activated" do
10
10
  it "prefers dmg" do
11
- expect(described_class.for_current_system([:tgz, :dmg])).to eq(Compressor::DMG)
11
+ expect(described_class.for_current_system(%i{tgz dmg})).to eq(Compressor::DMG)
12
12
  end
13
13
  end
14
14
 
15
15
  context "when :dmg is not activated" do
16
16
  it "prefers tgz" do
17
- expect(described_class.for_current_system([:tgz, :foo])).to eq(Compressor::TGZ)
17
+ expect(described_class.for_current_system(%i{tgz foo})).to eq(Compressor::TGZ)
18
18
  end
19
19
  end
20
20
 
@@ -30,7 +30,7 @@ module Omnibus
30
30
 
31
31
  context "when :tgz activated" do
32
32
  it "prefers tgz" do
33
- expect(described_class.for_current_system([:tgz, :foo])).to eq(Compressor::TGZ)
33
+ expect(described_class.for_current_system(%i{tgz foo})).to eq(Compressor::TGZ)
34
34
  end
35
35
  end
36
36
 
@@ -90,7 +90,8 @@ module Omnibus
90
90
  -fs HFS+ \\
91
91
  -fsargs "-c c=64,a=16,e=16" \\
92
92
  -size 512000k \\
93
- "#{staging_dir}/project-writable.dmg"
93
+ "#{staging_dir}/project-writable.dmg" \\
94
+ -puppetstrings
94
95
  EOH
95
96
 
96
97
  subject.create_writable_dmg
@@ -114,6 +115,7 @@ module Omnibus
114
115
  expect(subject).to receive(:shellout!)
115
116
  .with <<-EOH.gsub(/^ {12}/, "")
116
117
  hdiutil attach \\
118
+ -puppetstrings \\
117
119
  -readwrite \\
118
120
  -noverify \\
119
121
  -noautoopen \\
@@ -215,20 +217,57 @@ module Omnibus
215
217
  .with <<-EOH.gsub(/^ {12}/, "")
216
218
  chmod -Rf go-w "/Volumes/Project One"
217
219
  sync
218
- hdiutil detach "#{device}"
220
+ hdiutil unmount "#{device}"
221
+ # Give some time to the system so unmount dmg
222
+ sleep 5
223
+ hdiutil detach "#{device}" &&\
219
224
  hdiutil convert \\
220
225
  "#{staging_dir}/project-writable.dmg" \\
221
226
  -format UDZO \\
222
227
  -imagekey \\
223
228
  zlib-level=9 \\
224
- -o "#{package_dir}/project-1.2.3-2.dmg"
225
- rm -rf "#{staging_dir}/project-writable.dmg"
229
+ -o "#{package_dir}/project-1.2.3-2.dmg" \\
230
+ -puppetstrings
226
231
  EOH
227
232
 
228
233
  subject.compress_dmg
229
234
  end
230
235
  end
231
236
 
237
+ describe "#verify_dmg" do
238
+ it "logs a message" do
239
+ output = capture_logging { subject.verify_dmg }
240
+ expect(output).to include("Verifying dmg")
241
+ end
242
+
243
+ it "runs the command" do
244
+ expect(subject).to receive(:shellout!)
245
+ .with <<-EOH.gsub(/^ {12}/, "")
246
+ hdiutil verify \\
247
+ "#{package_dir}/project-1.2.3-2.dmg" \\
248
+ -puppetstrings
249
+ EOH
250
+
251
+ subject.verify_dmg
252
+ end
253
+ end
254
+
255
+ describe "#remove_writable_dmg" do
256
+ it "logs a message" do
257
+ output = capture_logging { subject.remove_writable_dmg }
258
+ expect(output).to include("Removing writable dmg")
259
+ end
260
+
261
+ it "runs the command" do
262
+ expect(subject).to receive(:shellout!)
263
+ .with <<-EOH.gsub(/^ {12}/, "")
264
+ rm -rf "#{staging_dir}/project-writable.dmg"
265
+ EOH
266
+
267
+ subject.remove_writable_dmg
268
+ end
269
+ end
270
+
232
271
  describe "#set_dmg_icon" do
233
272
  it "logs a message" do
234
273
  output = capture_logging { subject.set_dmg_icon }
@@ -11,10 +11,10 @@ module Omnibus
11
11
 
12
12
  let(:manifest_entry) do
13
13
  double(Omnibus::ManifestEntry,
14
- name: "file",
15
- locked_version: "1.2.3",
16
- described_version: "1.2.3",
17
- locked_source: source)
14
+ name: "file",
15
+ locked_version: "1.2.3",
16
+ described_version: "1.2.3",
17
+ locked_source: source)
18
18
  end
19
19
 
20
20
  let(:cache_dir) { "/cache" }
@@ -331,11 +331,10 @@ module Omnibus
331
331
  context "when the file is a .#{extension}" do
332
332
  let(:manifest_entry) do
333
333
  double(Omnibus::ManifestEntry,
334
- name: "file",
335
- locked_version: "1.2.3",
336
- described_version: "1.2.3",
337
- locked_source: { url: "https://get.example.com/file.#{extension}", md5: "abcd1234" }.merge(source_options)
338
- )
334
+ name: "file",
335
+ locked_version: "1.2.3",
336
+ described_version: "1.2.3",
337
+ locked_source: { url: "https://get.example.com/file.#{extension}", md5: "abcd1234" }.merge(source_options))
339
338
  end
340
339
 
341
340
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
@@ -361,10 +360,10 @@ module Omnibus
361
360
  context "when the downloaded file is a folder" do
362
361
  let(:manifest_entry) do
363
362
  double(Omnibus::ManifestEntry,
364
- name: "file",
365
- locked_version: "1.2.3",
366
- described_version: "1.2.3",
367
- locked_source: { url: "https://get.example.com/folder", md5: "abcd1234" })
363
+ name: "file",
364
+ locked_version: "1.2.3",
365
+ described_version: "1.2.3",
366
+ locked_source: { url: "https://get.example.com/folder", md5: "abcd1234" })
368
367
  end
369
368
 
370
369
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
@@ -382,10 +381,10 @@ module Omnibus
382
381
  context "when the downloaded file is a regular file" do
383
382
  let(:manifest_entry) do
384
383
  double(Omnibus::ManifestEntry,
385
- name: "file",
386
- locked_version: "1.2.3",
387
- described_version: "1.2.3",
388
- locked_source: { url: "https://get.example.com/file", md5: "abcd1234" })
384
+ name: "file",
385
+ locked_version: "1.2.3",
386
+ described_version: "1.2.3",
387
+ locked_source: { url: "https://get.example.com/file", md5: "abcd1234" })
389
388
  end
390
389
 
391
390
  subject { described_class.new(manifest_entry, project_dir, build_dir) }
@@ -36,6 +36,7 @@ module Omnibus
36
36
  omnibus-name/config/projects/name.rb
37
37
  omnibus-name/config/software
38
38
  omnibus-name/config/software/name-zlib.rb
39
+ omnibus-name/config/software/preparation.rb
39
40
  omnibus-name/omnibus.rb
40
41
  omnibus-name/package-scripts
41
42
  omnibus-name/package-scripts/name