omnibus 6.0.30 → 7.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/README.md +24 -8
  4. data/Rakefile +1 -1
  5. data/lib/omnibus/build_version_dsl.rb +1 -0
  6. data/lib/omnibus/builder.rb +6 -5
  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_files/README.md.erb +18 -15
  20. data/lib/omnibus/generator_files/config/software/preparation.rb.erb +1 -1
  21. data/lib/omnibus/generator_files/omnibus.rb.erb +5 -4
  22. data/lib/omnibus/health_check.rb +1 -1
  23. data/lib/omnibus/licensing.rb +3 -4
  24. data/lib/omnibus/logger.rb +2 -1
  25. data/lib/omnibus/manifest.rb +1 -1
  26. data/lib/omnibus/metadata.rb +2 -2
  27. data/lib/omnibus/packagers/appx.rb +1 -2
  28. data/lib/omnibus/packagers/base.rb +1 -0
  29. data/lib/omnibus/packagers/bff.rb +6 -8
  30. data/lib/omnibus/packagers/deb.rb +7 -10
  31. data/lib/omnibus/packagers/ips.rb +3 -6
  32. data/lib/omnibus/packagers/makeself.rb +1 -2
  33. data/lib/omnibus/packagers/msi.rb +12 -11
  34. data/lib/omnibus/packagers/pkg.rb +125 -9
  35. data/lib/omnibus/packagers/rpm.rb +11 -12
  36. data/lib/omnibus/packagers/solaris.rb +4 -4
  37. data/lib/omnibus/packagers/windows_base.rb +7 -6
  38. data/lib/omnibus/project.rb +1 -0
  39. data/lib/omnibus/publisher.rb +14 -12
  40. data/lib/omnibus/publishers/s3_publisher.rb +6 -4
  41. data/lib/omnibus/s3_cache.rb +3 -1
  42. data/lib/omnibus/s3_helpers.rb +6 -6
  43. data/lib/omnibus/software.rb +66 -30
  44. data/lib/omnibus/templating.rb +1 -1
  45. data/lib/omnibus/util.rb +3 -2
  46. data/lib/omnibus/version.rb +1 -1
  47. data/lib/omnibus/whitelist.rb +6 -1
  48. data/omnibus.gemspec +6 -6
  49. data/resources/rpm/signing.erb +7 -10
  50. data/spec/functional/builder_spec.rb +2 -1
  51. data/spec/functional/fetchers/file_fetcher_spec.rb +4 -4
  52. data/spec/functional/fetchers/git_fetcher_spec.rb +4 -4
  53. data/spec/functional/fetchers/net_fetcher_spec.rb +5 -6
  54. data/spec/functional/fetchers/path_fetcher_spec.rb +4 -4
  55. data/spec/functional/file_syncer_spec.rb +42 -0
  56. data/spec/functional/licensing_spec.rb +5 -5
  57. data/spec/support/examples.rb +3 -4
  58. data/spec/unit/builder_spec.rb +9 -9
  59. data/spec/unit/changelogprinter_spec.rb +8 -6
  60. data/spec/unit/compressor_spec.rb +3 -3
  61. data/spec/unit/compressors/dmg_spec.rb +43 -4
  62. data/spec/unit/fetchers/net_fetcher_spec.rb +16 -17
  63. data/spec/unit/health_check_spec.rb +2 -6
  64. data/spec/unit/library_spec.rb +2 -1
  65. data/spec/unit/manifest_diff_spec.rb +2 -2
  66. data/spec/unit/manifest_spec.rb +1 -1
  67. data/spec/unit/metadata_spec.rb +9 -11
  68. data/spec/unit/omnibus_spec.rb +1 -1
  69. data/spec/unit/packagers/bff_spec.rb +2 -2
  70. data/spec/unit/packagers/msi_spec.rb +2 -2
  71. data/spec/unit/packagers/pkg_spec.rb +354 -0
  72. data/spec/unit/packagers/pkgsrc_spec.rb +1 -1
  73. data/spec/unit/packagers/solaris_spec.rb +7 -7
  74. data/spec/unit/project_spec.rb +2 -2
  75. data/spec/unit/publisher_spec.rb +8 -9
  76. data/spec/unit/publishers/artifactory_publisher_spec.rb +2 -4
  77. data/spec/unit/publishers/s3_publisher_spec.rb +2 -4
  78. data/spec/unit/s3_cacher_spec.rb +19 -6
  79. data/spec/unit/s3_helpers_spec.rb +22 -3
  80. data/spec/unit/software_spec.rb +72 -42
  81. data/spec/unit/util_spec.rb +1 -2
  82. metadata +17 -11
@@ -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
 
@@ -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) }
@@ -8,9 +8,7 @@ module Omnibus
8
8
  name: "chefdk",
9
9
  install_dir: "/opt/chefdk",
10
10
  library: double(Library,
11
- components: []
12
- )
13
- )
11
+ components: []))
14
12
  end
15
13
 
16
14
  def mkdump(base, size, x64 = false)
@@ -19,9 +17,7 @@ module Omnibus
19
17
  x64?: x64,
20
18
  ioh: double(x64 ? PEdump::IMAGE_OPTIONAL_HEADER64 : PEdump::IMAGE_OPTIONAL_HEADER32,
21
19
  ImageBase: base,
22
- SizeOfImage: size
23
- )
24
- )
20
+ SizeOfImage: size))
25
21
  expect(dump).to receive(:pe).and_return(pe)
26
22
  dump
27
23
  end
@@ -125,7 +125,8 @@ module Omnibus
125
125
  erchef, # project dep
126
126
  chef, # project dep
127
127
  chefdk, # project dep
128
- ])
128
+ ]
129
+ )
129
130
  end
130
131
  end
131
132
  end
@@ -12,7 +12,7 @@ module Omnibus
12
12
  end
13
13
 
14
14
  let(:manifest_one) do
15
- m = Omnibus::Manifest.new()
15
+ m = Omnibus::Manifest.new
16
16
  m.add("foo", manifest_entry_for("foo", "1.2.4", "deadbeef"))
17
17
  m.add("bar", manifest_entry_for("bar", "1.2.4", "deadbeef"))
18
18
  m.add("baz", manifest_entry_for("baz", "1.2.4", "deadbeef"))
@@ -20,7 +20,7 @@ module Omnibus
20
20
  end
21
21
 
22
22
  let(:manifest_two) do
23
- m = Omnibus::Manifest.new()
23
+ m = Omnibus::Manifest.new
24
24
  m.add("foo", manifest_entry_for("foo", "1.2.5", "deadbea0"))
25
25
  m.add("baz", manifest_entry_for("baz", "1.2.4", "deadbeef"))
26
26
  m.add("quux", manifest_entry_for("quux", "1.2.4", "deadbeef"))
@@ -45,7 +45,7 @@ module Omnibus
45
45
  second = ManifestEntry.new("wombat", {})
46
46
  subject.add("foobar", first)
47
47
  subject.add("wombat", second)
48
- expect(subject.entry_names).to eq([:foobar, :wombat])
48
+ expect(subject.entry_names).to eq(%i{foobar wombat})
49
49
  end
50
50
  end
51
51
 
@@ -16,8 +16,7 @@ module Omnibus
16
16
  md5: "abc123",
17
17
  sha1: "abc123",
18
18
  sha256: "abcd1234",
19
- sha512: "abcdef123456"
20
- )
19
+ sha512: "abcdef123456")
21
20
  end
22
21
 
23
22
  let(:project) do
@@ -29,15 +28,13 @@ module Omnibus
29
28
  build_iteration: "1",
30
29
  license: "Apache-2.0",
31
30
  built_manifest: double(Manifest,
32
- to_hash: {
33
- manifest_format: 2,
34
- build_version: "1.2.3",
35
- build_git_revision: "SHA",
36
- license: "Apache-2.0",
37
- }
38
- ),
39
- license_file_path: license_path
40
- )
31
+ to_hash: {
32
+ manifest_format: 2,
33
+ build_version: "1.2.3",
34
+ build_git_revision: "SHA",
35
+ license: "Apache-2.0",
36
+ }),
37
+ license_file_path: license_path)
41
38
  end
42
39
 
43
40
  let(:data) { { foo: "bar" } }
@@ -219,6 +216,7 @@ module Omnibus
219
216
  it_behaves_like "a version manipulator", "fedora", "11.5", "11"
220
217
  it_behaves_like "a version manipulator", "freebsd", "10.0", "10"
221
218
  it_behaves_like "a version manipulator", "gentoo", "4.9.95-gentoo", "rolling"
219
+ it_behaves_like "a version manipulator", "kali", "rolling", "rolling"
222
220
  it_behaves_like "a version manipulator", "mac_os_x", "10.9.1", "10.9"
223
221
  it_behaves_like "a version manipulator", "omnios", "r151010", "r151010"
224
222
  it_behaves_like "a version manipulator", "openbsd", "5.4.4", "5.4"
@@ -15,7 +15,7 @@ describe Omnibus do
15
15
 
16
16
  Omnibus::Config.project_root(File.join(tmp_path, "/foo/bar"))
17
17
  Omnibus::Config.local_software_dirs([File.join(tmp_path, "/local"), File.join(tmp_path, "/other")])
18
- Omnibus::Config.software_gems(["omnibus-software", "custom-omnibus-software"])
18
+ Omnibus::Config.software_gems(%w{omnibus-software custom-omnibus-software})
19
19
  end
20
20
 
21
21
  describe "#which" do
@@ -301,7 +301,7 @@ module Omnibus
301
301
  # A note - the /opt/ here is essentially project.install_dir one level up.
302
302
  # There is nothing magical about 'opt' as a directory.
303
303
  expect(subject).to receive(:shellout!)
304
- .with(/chown -Rh 0:0 #{staging_dir}\/opt$/)
304
+ .with(%r{chown -Rh 0:0 #{staging_dir}/opt$})
305
305
  subject.create_bff_file
306
306
  end
307
307
 
@@ -312,7 +312,7 @@ module Omnibus
312
312
 
313
313
  it "uses the correct command" do
314
314
  expect(subject).to receive(:shellout!)
315
- .with(/\/usr\/sbin\/mkinstallp -d/)
315
+ .with(%r{/usr/sbin/mkinstallp -d})
316
316
  subject.create_bff_file
317
317
  end
318
318
 
@@ -419,7 +419,7 @@ module Omnibus
419
419
  end
420
420
 
421
421
  it "outputs a source.wxs file to the staging directory" do
422
- expect(subject.candle_command).to include("#{subject.windows_safe_path(staging_dir, 'source.wxs')}")
422
+ expect(subject.candle_command).to include("#{subject.windows_safe_path(staging_dir, "source.wxs")}")
423
423
  end
424
424
  end
425
425
 
@@ -433,7 +433,7 @@ module Omnibus
433
433
  end
434
434
 
435
435
  it "outputs a bundle.wxs file to the staging directory" do
436
- expect(subject.candle_command(is_bundle: true)).to include("#{subject.windows_safe_path(staging_dir, 'bundle.wxs')}")
436
+ expect(subject.candle_command(is_bundle: true)).to include("#{subject.windows_safe_path(staging_dir, "bundle.wxs")}")
437
437
  end
438
438
  end
439
439
  end