omnibus 4.1.0 → 5.0.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 +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(" "))
|