omnibus 4.1.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +22 -0
- data/MAINTAINERS.md +2 -1
- data/README.md +1 -1
- data/lib/omnibus/builder.rb +2 -17
- data/lib/omnibus/cli/publish.rb +4 -0
- data/lib/omnibus/exceptions.rb +12 -0
- data/lib/omnibus/fetchers/net_fetcher.rb +4 -0
- data/lib/omnibus/manifest.rb +1 -1
- data/lib/omnibus/metadata.rb +13 -4
- data/lib/omnibus/packager.rb +1 -0
- data/lib/omnibus/packagers/base.rb +1 -0
- data/lib/omnibus/packagers/bff.rb +1 -1
- data/lib/omnibus/packagers/deb.rb +4 -0
- data/lib/omnibus/packagers/msi.rb +168 -55
- data/lib/omnibus/packagers/rpm.rb +41 -29
- data/lib/omnibus/packagers/solaris.rb +76 -25
- data/lib/omnibus/publisher.rb +4 -0
- data/lib/omnibus/publishers/artifactory_publisher.rb +19 -8
- data/lib/omnibus/sugarable.rb +5 -0
- data/lib/omnibus/version.rb +1 -1
- data/omnibus.gemspec +1 -1
- data/resources/msi/CustomActionFastMsi.CA.dll +0 -0
- data/resources/msi/localization-en-us.wxl.erb +4 -0
- data/resources/msi/source.wxs.erb +46 -9
- data/resources/rpm/spec.erb +0 -1
- data/spec/functional/builder_spec.rb +109 -113
- data/spec/functional/fetchers/net_fetcher_spec.rb +10 -0
- data/spec/unit/metadata_spec.rb +39 -4
- data/spec/unit/packagers/bff_spec.rb +9 -0
- data/spec/unit/packagers/deb_spec.rb +17 -5
- data/spec/unit/packagers/msi_spec.rb +175 -3
- data/spec/unit/packagers/rpm_spec.rb +50 -3
- data/spec/unit/packagers/solaris_spec.rb +234 -0
- data/spec/unit/publisher_spec.rb +14 -0
- data/spec/unit/publishers/artifactory_publisher_spec.rb +72 -3
- data/spec/unit/sugarable_spec.rb +16 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1471f1e4e874c7a6d1146332f02e3a2b01ce2b47
|
4
|
+
data.tar.gz: 15c244b4ee8b8814058f17eecec80ff44b08337f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 186d0842eb7d493a482f3c661f9248d155db72c58dd8797a160c13900ba01fe7ce893c645bccfe981e922602f023f0e1261114405ddf9e303d169978bccd539f
|
7
|
+
data.tar.gz: 5be67f512343718da2c35bbbc6c18c1e7f0e67fff96a3d3a2b25a7ef5d67706a4b1f9398883e1d28be87529f6a544f63dc3b0ee8d567411135c7663efda38ca6
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
Omnibus CHANGELOG
|
2
2
|
=================
|
3
|
+
|
4
|
+
v5.0.0 (November 10, 2015)
|
5
|
+
--------------------------
|
6
|
+
### New Features
|
7
|
+
- Wind River Linux 5 support for Cisco Nexus devices (#539)
|
8
|
+
- [artifactory publisher] Support custom properties in Artifactory publishing (#568)
|
9
|
+
- [msi packager] New "fast" mode for MSI packager (#565)
|
10
|
+
- Change the `appbundler` DSL method to not make an apps dir
|
11
|
+
- Unit and functional tests now run on Windows (and are tested by Appveyor) (#556, #557)
|
12
|
+
|
13
|
+
### Bug Fixes
|
14
|
+
- [msi packager] Fix missing package name in signature (#541)
|
15
|
+
- [rpm packager] Fix building RPMs on ARM platforms (#542)
|
16
|
+
- [bff packager] Fix regression with AIX package ownership in staging directory (#553)
|
17
|
+
- [solaris packager] Use the proper architecture value in Solaris packages (#554, #555)
|
18
|
+
- Add info message for publish cli corner case (#551)
|
19
|
+
- [net fetcher] missing checksum raises exception (#549)
|
20
|
+
|
21
|
+
|
22
|
+
### Potentially Breaking Changes
|
23
|
+
- Dropped Ruby 1.9.x support (#567)
|
24
|
+
|
3
25
|
v4.1.0 (September 1, 2015)
|
4
26
|
-------------------------
|
5
27
|
### New Features
|
data/MAINTAINERS.md
CHANGED
@@ -18,9 +18,10 @@ project lead.
|
|
18
18
|
## Maintainers
|
19
19
|
|
20
20
|
* [Daniel DeLeo](https://github.com/danielsdeleo)
|
21
|
-
* [Jay Mundrawala](https://github.com/
|
21
|
+
* [Jay Mundrawala](https://github.com/jaym)
|
22
22
|
* [Lamont Granquist](https://github.com/lamont-granquist)
|
23
23
|
* [Scott Hain](https://github.com/scotthain)
|
24
24
|
* [Seth Vargo](http://github.com/sethvargo)
|
25
25
|
* [Steven Danna](https://github.com/stevendanna)
|
26
26
|
* [Yvonne Lam](http://github.com/yzl)
|
27
|
+
* [Thom May](https://github.com/thommay)
|
data/README.md
CHANGED
@@ -199,7 +199,7 @@ Additionally, there are a number of DSL methods avaiable inside the `build` bloc
|
|
199
199
|
|
200
200
|
For more DSL methods, please consult the [`Builder` documentation](http://rubydoc.info/github/opscode/omnibus/Omnibus/Builder).
|
201
201
|
|
202
|
-
You can support building multiple
|
202
|
+
You can support building multiple versions of the same software in the same software definition file using the `version` method and giving a block:
|
203
203
|
|
204
204
|
```ruby
|
205
205
|
name "ruby"
|
data/lib/omnibus/builder.rb
CHANGED
@@ -276,27 +276,12 @@ module Omnibus
|
|
276
276
|
def appbundle(app_name, options = {})
|
277
277
|
build_commands << BuildCommand.new("appbundle `#{app_name}'") do
|
278
278
|
bin_dir = "#{install_dir}/bin"
|
279
|
-
embedded_apps_root = "#{install_dir}/embedded/apps"
|
280
|
-
embedded_app_dir = "#{embedded_apps_root}/#{app_name}"
|
281
|
-
gemfile_lock = "#{embedded_app_dir}/Gemfile.lock"
|
282
279
|
appbundler_bin = windows_safe_path("#{install_dir}/embedded/bin/appbundler")
|
283
280
|
|
284
281
|
# Ensure the main bin dir exists
|
285
282
|
FileUtils.mkdir_p(bin_dir)
|
286
|
-
|
287
|
-
|
288
|
-
# Copy the application code into place
|
289
|
-
FileUtils.cp_r("#{Omnibus::Config.source_dir}/#{app_name}", embedded_apps_root)
|
290
|
-
# Delete any top-level `.git` directory
|
291
|
-
FileUtils.rm_rf("#{embedded_app_dir}/.git")
|
292
|
-
|
293
|
-
# Prepare the environment
|
294
|
-
options[:env] ||= {}
|
295
|
-
env = with_embedded_path || {}
|
296
|
-
env["BUNDLE_GEMFILE"] = gemfile_lock
|
297
|
-
options[:env].merge!(env)
|
298
|
-
|
299
|
-
shellout!("#{appbundler_bin} '#{embedded_app_dir}' '#{bin_dir}'", options)
|
283
|
+
|
284
|
+
shellout!("#{appbundler_bin} '#{Omnibus::Config.source_dir}/#{app_name}' '#{bin_dir}'", options)
|
300
285
|
end
|
301
286
|
end
|
302
287
|
expose :appbundle
|
data/lib/omnibus/cli/publish.rb
CHANGED
@@ -70,6 +70,10 @@ module Omnibus
|
|
70
70
|
type: :boolean,
|
71
71
|
desc: 'Optionally create an Artifactory build record for the published artifacts',
|
72
72
|
default: true
|
73
|
+
method_option :properties,
|
74
|
+
type: :hash,
|
75
|
+
desc: 'Properites to attach to published artifacts',
|
76
|
+
default: {}
|
73
77
|
desc 'artifactory REPOSITORY PATTERN', 'Publish to an Artifactory instance'
|
74
78
|
def artifactory(repository, pattern)
|
75
79
|
options[:repository] = repository
|
data/lib/omnibus/exceptions.rb
CHANGED
@@ -214,6 +214,18 @@ EOH
|
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
217
|
+
class ChecksumMissing < Error
|
218
|
+
def initialize(software)
|
219
|
+
super <<-EOH
|
220
|
+
Verification for #{software.name} failed due to a missing checksum.
|
221
|
+
|
222
|
+
This added security check is used to prevent MITM attacks when downloading the
|
223
|
+
remote file. You must specify a checksum for each version of software downloaded
|
224
|
+
from a remote location.
|
225
|
+
EOH
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
217
229
|
class ChecksumMismatch < Error
|
218
230
|
def initialize(software, expected, actual)
|
219
231
|
super <<-EOH
|
@@ -229,12 +229,16 @@ module Omnibus
|
|
229
229
|
#
|
230
230
|
# The digest type defined in the software definition
|
231
231
|
#
|
232
|
+
# @raise [ChecksumMissing]
|
233
|
+
# if the checksum does not exist
|
234
|
+
#
|
232
235
|
# @return [Symbol]
|
233
236
|
#
|
234
237
|
def digest_type
|
235
238
|
DIGESTS.each do |digest|
|
236
239
|
return digest if source.key? digest
|
237
240
|
end
|
241
|
+
raise ChecksumMissing.new(self)
|
238
242
|
end
|
239
243
|
|
240
244
|
#
|
data/lib/omnibus/manifest.rb
CHANGED
@@ -96,7 +96,7 @@ module Omnibus
|
|
96
96
|
when 1
|
97
97
|
from_hash_v1(manifest_data)
|
98
98
|
else
|
99
|
-
raise InvalidManifestFormat, "Unknown manifest
|
99
|
+
raise InvalidManifestFormat, "Unknown manifest format version: #{manifest_data['manifest_format']}"
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
data/lib/omnibus/metadata.rb
CHANGED
@@ -18,6 +18,9 @@ require 'json'
|
|
18
18
|
|
19
19
|
module Omnibus
|
20
20
|
class Metadata
|
21
|
+
extend Sugarable
|
22
|
+
include Sugarable
|
23
|
+
|
21
24
|
class << self
|
22
25
|
#
|
23
26
|
# Render the metadata for the package at the given path, generated by the
|
@@ -108,8 +111,14 @@ module Omnibus
|
|
108
111
|
# @return [String]
|
109
112
|
#
|
110
113
|
def arch
|
111
|
-
if
|
114
|
+
if windows? && windows_arch_i386?
|
112
115
|
'i386'
|
116
|
+
elsif solaris?
|
117
|
+
if intel?
|
118
|
+
'i386'
|
119
|
+
elsif sparc?
|
120
|
+
'sparc'
|
121
|
+
end
|
113
122
|
else
|
114
123
|
Ohai['kernel']['machine']
|
115
124
|
end
|
@@ -132,9 +141,9 @@ module Omnibus
|
|
132
141
|
# the platform family short name
|
133
142
|
#
|
134
143
|
def platform_shortname
|
135
|
-
if
|
144
|
+
if rhel?
|
136
145
|
'el'
|
137
|
-
elsif
|
146
|
+
elsif suse?
|
138
147
|
'sles'
|
139
148
|
else
|
140
149
|
Ohai['platform']
|
@@ -157,7 +166,7 @@ module Omnibus
|
|
157
166
|
#
|
158
167
|
def truncate_platform_version(platform_version, platform)
|
159
168
|
case platform
|
160
|
-
when 'centos', 'debian', 'el', 'fedora', 'freebsd', 'omnios', 'pidora', 'raspbian', 'rhel', 'sles', 'suse', 'smartos'
|
169
|
+
when 'centos', 'debian', 'el', 'fedora', 'freebsd', 'omnios', 'pidora', 'raspbian', 'rhel', 'sles', 'suse', 'smartos', 'nexus', 'ios_xr'
|
161
170
|
# Only want MAJOR (e.g. Debian 7, OmniOS r151006, SmartOS 20120809T221258Z)
|
162
171
|
platform_version.split('.').first
|
163
172
|
when 'aix', 'gentoo', 'mac_os_x', 'openbsd', 'slackware', 'solaris2', 'opensuse', 'ubuntu'
|
data/lib/omnibus/packager.rb
CHANGED
@@ -173,7 +173,7 @@ module Omnibus
|
|
173
173
|
# This implies that if we are in /tmp/staging/project/dir/things,
|
174
174
|
# we will chown from 'project' on, rather than 'project/dir', which leaves
|
175
175
|
# project owned by the build user (which is incorrect)
|
176
|
-
shellout!("sudo chown -R 0:0 #{File.join(staging_dir, project.install_dir)}")
|
176
|
+
shellout!("sudo chown -R 0:0 #{File.join(staging_dir, project.install_dir.match(/^\/?(\w+)/).to_s)}")
|
177
177
|
log.info(log_key) { "Creating .bff file" }
|
178
178
|
|
179
179
|
# Since we want the owner to be root, we need to sudo the mkinstallp
|
@@ -408,6 +408,10 @@ module Omnibus
|
|
408
408
|
else
|
409
409
|
Ohai['kernel']['machine']
|
410
410
|
end
|
411
|
+
when 'aarch64'
|
412
|
+
# Debian prefers amd64 on ARMv8/AArch64 (64bit ARM) platforms
|
413
|
+
# see https://wiki.debian.org/Arm64Port
|
414
|
+
'arm64'
|
411
415
|
when 'ppc64le'
|
412
416
|
# Debian prefers to use ppc64el for little endian architecture name
|
413
417
|
# where as others like gnutools/rhel use ppc64le( note the last 2 chars)
|
@@ -14,6 +14,8 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
+
require 'pathname'
|
18
|
+
|
17
19
|
module Omnibus
|
18
20
|
class Packager::MSI < Packager::Base
|
19
21
|
DEFAULT_TIMESTAMP_SERVERS = ['http://timestamp.digicert.com',
|
@@ -45,48 +47,29 @@ module Omnibus
|
|
45
47
|
FileSyncer.glob("#{resources_path}/assets/*").each do |file|
|
46
48
|
copy_file(file, "#{resources_dir}/assets/#{File.basename(file)}")
|
47
49
|
end
|
50
|
+
|
51
|
+
# Source for the custom action is at https://github.com/chef/fastmsi-custom-action
|
52
|
+
# The dll will be built separately as part of the custom action build process
|
53
|
+
# and made available as a binary for the Omnibus projects to use.
|
54
|
+
copy_file(resource_path('CustomActionFastMsi.CA.dll'), staging_dir) if fast_msi
|
48
55
|
end
|
49
56
|
|
50
57
|
build do
|
58
|
+
# If fastmsi, zip up the contents of the install directory
|
59
|
+
shellout!(zip_command) if fast_msi
|
60
|
+
|
51
61
|
# Harvest the files with heat.exe, recursively generate fragment for
|
52
62
|
# project directory
|
53
63
|
Dir.chdir(staging_dir) do
|
54
|
-
shellout!
|
55
|
-
heat.exe dir "#{windows_safe_path(project.install_dir)}"
|
56
|
-
-nologo -srd -gg -cg ProjectDir
|
57
|
-
-dr PROJECTLOCATION
|
58
|
-
-var "var.ProjectSourceDir"
|
59
|
-
-out "project-files.wxs"
|
60
|
-
EOH
|
64
|
+
shellout!(heat_command)
|
61
65
|
|
62
66
|
# Compile with candle.exe
|
63
|
-
|
64
|
-
|
65
|
-
shellout! <<-EOH.split.join(' ').squeeze(' ').strip
|
66
|
-
candle.exe
|
67
|
-
-nologo
|
68
|
-
#{wix_candle_flags}
|
69
|
-
#{wix_extension_switches(wix_candle_extensions)}
|
70
|
-
-dProjectSourceDir="#{windows_safe_path(project.install_dir)}" "project-files.wxs"
|
71
|
-
"#{windows_safe_path(staging_dir, 'source.wxs')}"
|
72
|
-
EOH
|
67
|
+
shellout!(candle_command)
|
73
68
|
|
74
69
|
# Create the msi, ignoring the 204 return code from light.exe since it is
|
75
70
|
# about some expected warnings
|
76
|
-
|
77
71
|
msi_file = windows_safe_path(Config.package_dir, msi_name)
|
78
|
-
|
79
|
-
light_command = <<-EOH.split.join(' ').squeeze(' ').strip
|
80
|
-
light.exe
|
81
|
-
-nologo
|
82
|
-
-ext WixUIExtension
|
83
|
-
#{wix_extension_switches(wix_light_extensions)}
|
84
|
-
-cultures:en-us
|
85
|
-
-loc "#{windows_safe_path(staging_dir, 'localization-en-us.wxl')}"
|
86
|
-
project-files.wixobj source.wixobj
|
87
|
-
-out "#{msi_file}"
|
88
|
-
EOH
|
89
|
-
shellout!(light_command, returns: [0, 204])
|
72
|
+
shellout!(light_command(msi_file), returns: [0, 204])
|
90
73
|
|
91
74
|
if signing_identity
|
92
75
|
sign_package(msi_file)
|
@@ -94,32 +77,11 @@ module Omnibus
|
|
94
77
|
|
95
78
|
# This assumes, rightly or wrongly, that any installers we want to bundle
|
96
79
|
# into our installer will be downloaded by omnibus and put in the cache dir
|
97
|
-
|
98
80
|
if bundle_msi
|
99
|
-
shellout!
|
100
|
-
candle.exe
|
101
|
-
-nologo
|
102
|
-
#{wix_candle_flags}
|
103
|
-
-ext WixBalExtension
|
104
|
-
#{wix_extension_switches(wix_candle_extensions)}
|
105
|
-
-dOmnibusCacheDir="#{windows_safe_path(File.expand_path(Config.cache_dir))}"
|
106
|
-
"#{windows_safe_path(staging_dir, 'bundle.wxs')}"
|
107
|
-
EOH
|
81
|
+
shellout!(candle_command(is_bundle: true))
|
108
82
|
|
109
83
|
bundle_file = windows_safe_path(Config.package_dir, bundle_name)
|
110
|
-
|
111
|
-
bundle_light_command = <<-EOH.split.join(' ').squeeze(' ').strip
|
112
|
-
light.exe
|
113
|
-
-nologo
|
114
|
-
-ext WixUIExtension
|
115
|
-
-ext WixBalExtension
|
116
|
-
#{wix_extension_switches(wix_light_extensions)}
|
117
|
-
-cultures:en-us
|
118
|
-
-loc "#{windows_safe_path(staging_dir, 'localization-en-us.wxl')}"
|
119
|
-
bundle.wixobj
|
120
|
-
-out "#{bundle_file}"
|
121
|
-
EOH
|
122
|
-
shellout!(bundle_light_command, returns: [0, 204])
|
84
|
+
shellout!(light_command(bundle_file, is_bundle: true), returns: [0, 204])
|
123
85
|
|
124
86
|
if signing_identity
|
125
87
|
sign_package(bundle_file)
|
@@ -149,7 +111,7 @@ module Omnibus
|
|
149
111
|
@upgrade_code || raise(MissingRequiredAttribute.new(self, :upgrade_code, '2CD7259C-776D-4DDB-A4C8-6E544E580AA1'))
|
150
112
|
else
|
151
113
|
unless val.is_a?(String)
|
152
|
-
raise InvalidValue.new(:
|
114
|
+
raise InvalidValue.new(:upgrade_code, 'be a String')
|
153
115
|
end
|
154
116
|
|
155
117
|
@upgrade_code = val
|
@@ -245,6 +207,25 @@ module Omnibus
|
|
245
207
|
end
|
246
208
|
expose :bundle_msi
|
247
209
|
|
210
|
+
#
|
211
|
+
# Signal that we're building a zip-based MSI
|
212
|
+
#
|
213
|
+
# @example
|
214
|
+
# fast_msi true
|
215
|
+
#
|
216
|
+
# @param [TrueClass, FalseClass] value
|
217
|
+
# whether we're building a zip-based MSI or not
|
218
|
+
#
|
219
|
+
# @return [TrueClass, FalseClass]
|
220
|
+
# whether we're building a zip-based MSI or not
|
221
|
+
def fast_msi(val = false)
|
222
|
+
unless (val.is_a?(TrueClass) || val.is_a?(FalseClass))
|
223
|
+
raise InvalidValue.new(:fast_msi, 'be TrueClass or FalseClass')
|
224
|
+
end
|
225
|
+
@fast_msi ||= val
|
226
|
+
end
|
227
|
+
expose :fast_msi
|
228
|
+
|
248
229
|
#
|
249
230
|
# Set the signing certificate name
|
250
231
|
#
|
@@ -311,6 +292,37 @@ module Omnibus
|
|
311
292
|
end
|
312
293
|
expose :signing_identity
|
313
294
|
|
295
|
+
#
|
296
|
+
# Discovers a path to a gem/file included in a gem under the install directory.
|
297
|
+
#
|
298
|
+
# @example
|
299
|
+
# gem_path 'chef-[0-9]*-mingw32' -> 'some/path/to/gems/chef-version-mingw32'
|
300
|
+
#
|
301
|
+
# @param [String] glob
|
302
|
+
# a ruby acceptable glob path such as with **, *, [] etc.
|
303
|
+
#
|
304
|
+
# @return [String] path relative to the project's install_dir
|
305
|
+
#
|
306
|
+
# Raises exception the glob matches 0 or more than 1 file/directory.
|
307
|
+
#
|
308
|
+
def gem_path(glob = NULL)
|
309
|
+
unless glob.is_a?(String) || null?(glob)
|
310
|
+
raise InvalidValue.new(:glob, 'be an String')
|
311
|
+
end
|
312
|
+
|
313
|
+
install_path = Pathname.new(project.install_dir)
|
314
|
+
|
315
|
+
# Find path in which the Chef gem is installed
|
316
|
+
search_pattern = install_path.join('**', 'gems')
|
317
|
+
search_pattern = search_pattern.join(glob) unless null?(glob)
|
318
|
+
file_paths = Pathname.glob(search_pattern).find
|
319
|
+
|
320
|
+
raise "Could not find `#{search_pattern}'!" if file_paths.none?
|
321
|
+
raise "Multiple possible matches of `#{search_pattern}'! : #{file_paths}" if file_paths.count > 1
|
322
|
+
file_paths.first.relative_path_from(install_path).to_s
|
323
|
+
end
|
324
|
+
expose :gem_path
|
325
|
+
|
314
326
|
#
|
315
327
|
# @!endgroup
|
316
328
|
# --------------------------------------------------
|
@@ -415,7 +427,7 @@ module Omnibus
|
|
415
427
|
friendly_name: project.friendly_name,
|
416
428
|
maintainer: project.maintainer,
|
417
429
|
hierarchy: hierarchy,
|
418
|
-
|
430
|
+
fastmsi: fast_msi,
|
419
431
|
wix_install_dir: wix_install_dir,
|
420
432
|
}
|
421
433
|
)
|
@@ -462,6 +474,106 @@ module Omnibus
|
|
462
474
|
"#{versions[0]}.#{versions[1]}.#{versions[2]}.#{project.build_iteration}"
|
463
475
|
end
|
464
476
|
|
477
|
+
#
|
478
|
+
# Get the shell command to create a zip file that contains
|
479
|
+
# the contents of the project install directory
|
480
|
+
#
|
481
|
+
# @return [String]
|
482
|
+
#
|
483
|
+
def zip_command
|
484
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
485
|
+
7z a -r
|
486
|
+
#{windows_safe_path(staging_dir)}\\#{project.name}.zip
|
487
|
+
#{windows_safe_path(project.install_dir)}\\*
|
488
|
+
EOH
|
489
|
+
end
|
490
|
+
|
491
|
+
#
|
492
|
+
# Get the shell command to run heat in order to create a
|
493
|
+
# a WIX manifest of project files to be packaged into the MSI
|
494
|
+
#
|
495
|
+
# @return [String]
|
496
|
+
#
|
497
|
+
def heat_command
|
498
|
+
if fast_msi
|
499
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
500
|
+
heat.exe file "#{project.name}.zip"
|
501
|
+
-cg ProjectDir
|
502
|
+
-dr INSTALLLOCATION
|
503
|
+
-nologo -sfrag -srd -sreg -gg
|
504
|
+
-out "project-files.wxs"
|
505
|
+
EOH
|
506
|
+
else
|
507
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
508
|
+
heat.exe dir "#{windows_safe_path(project.install_dir)}"
|
509
|
+
-nologo -srd -sreg -gg -cg ProjectDir
|
510
|
+
-dr PROJECTLOCATION
|
511
|
+
-var "var.ProjectSourceDir"
|
512
|
+
-out "project-files.wxs"
|
513
|
+
EOH
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
#
|
518
|
+
# Get the shell command to complie the project WIX files
|
519
|
+
#
|
520
|
+
# @return [String]
|
521
|
+
#
|
522
|
+
def candle_command(is_bundle: false)
|
523
|
+
if is_bundle
|
524
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
525
|
+
candle.exe
|
526
|
+
-nologo
|
527
|
+
#{wix_candle_flags}
|
528
|
+
-ext WixBalExtension
|
529
|
+
#{wix_extension_switches(wix_candle_extensions)}
|
530
|
+
-dOmnibusCacheDir="#{windows_safe_path(File.expand_path(Config.cache_dir))}"
|
531
|
+
"#{windows_safe_path(staging_dir, 'bundle.wxs')}"
|
532
|
+
EOH
|
533
|
+
else
|
534
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
535
|
+
candle.exe
|
536
|
+
-nologo
|
537
|
+
#{wix_candle_flags}
|
538
|
+
#{wix_extension_switches(wix_candle_extensions)}
|
539
|
+
-dProjectSourceDir="#{windows_safe_path(project.install_dir)}" "project-files.wxs"
|
540
|
+
"#{windows_safe_path(staging_dir, 'source.wxs')}"
|
541
|
+
EOH
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
#
|
546
|
+
# Get the shell command to link the project WIX object files
|
547
|
+
#
|
548
|
+
# @return [String]
|
549
|
+
#
|
550
|
+
def light_command(out_file, is_bundle: false)
|
551
|
+
if is_bundle
|
552
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
553
|
+
light.exe
|
554
|
+
-nologo
|
555
|
+
-ext WixUIExtension
|
556
|
+
-ext WixBalExtension
|
557
|
+
#{wix_extension_switches(wix_light_extensions)}
|
558
|
+
-cultures:en-us
|
559
|
+
-loc "#{windows_safe_path(staging_dir, 'localization-en-us.wxl')}"
|
560
|
+
bundle.wixobj
|
561
|
+
-out "#{out_file}"
|
562
|
+
EOH
|
563
|
+
else
|
564
|
+
<<-EOH.split.join(' ').squeeze(' ').strip
|
565
|
+
light.exe
|
566
|
+
-nologo
|
567
|
+
-ext WixUIExtension
|
568
|
+
#{wix_extension_switches(wix_light_extensions)}
|
569
|
+
-cultures:en-us
|
570
|
+
-loc "#{windows_safe_path(staging_dir, 'localization-en-us.wxl')}"
|
571
|
+
project-files.wixobj source.wixobj
|
572
|
+
-out "#{out_file}"
|
573
|
+
EOH
|
574
|
+
end
|
575
|
+
end
|
576
|
+
|
465
577
|
#
|
466
578
|
# The display version calculated from the {Project#build_version}.
|
467
579
|
#
|
@@ -545,6 +657,7 @@ module Omnibus
|
|
545
657
|
arr << '/sm' if machine_store?
|
546
658
|
arr << "/s #{cert_store_name}"
|
547
659
|
arr << "/sha1 #{thumbprint}"
|
660
|
+
arr << "/d #{project.package_name}"
|
548
661
|
arr << "\"#{msi_file}\""
|
549
662
|
end
|
550
663
|
shellout!(cmd.join(" "))
|