omnibus 1.3.0 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -1
- data/.rubocop.yml +30 -0
- data/.travis.yml +14 -3
- data/CHANGELOG.md +72 -49
- data/Gemfile +8 -5
- data/NOTICE +2 -2
- data/README.md +65 -7
- data/Rakefile +12 -3
- data/bin/makeself-header.sh +1 -1
- data/bin/makeself.sh +2 -2
- data/bin/omnibus +2 -2
- data/functional/fixtures/mac_pkg/files/mac_pkg/Resources/background.png +0 -0
- data/functional/fixtures/mac_pkg/files/mac_pkg/Resources/license.html +1 -0
- data/functional/fixtures/mac_pkg/files/mac_pkg/Resources/welcome.html +1 -0
- data/functional/fixtures/mac_pkg/package-scripts/functional-test-project/postinstall +4 -0
- data/functional/packagers/mac_pkg_spec.rb +72 -0
- data/lib/omnibus/artifact.rb +11 -13
- data/lib/omnibus/build_version.rb +18 -21
- data/lib/omnibus/builder.rb +37 -48
- data/lib/omnibus/clean_tasks.rb +3 -5
- data/lib/omnibus/cli/application.rb +46 -53
- data/lib/omnibus/cli/base.rb +16 -19
- data/lib/omnibus/cli/build.rb +13 -13
- data/lib/omnibus/cli/cache.rb +13 -15
- data/lib/omnibus/cli/release.rb +4 -9
- data/lib/omnibus/cli.rb +2 -4
- data/lib/omnibus/config.rb +43 -23
- data/lib/omnibus/exceptions.rb +35 -1
- data/lib/omnibus/fetcher.rb +9 -13
- data/lib/omnibus/fetchers/git_fetcher.rb +15 -19
- data/lib/omnibus/fetchers/net_fetcher.rb +34 -38
- data/lib/omnibus/fetchers/path_fetcher.rb +7 -9
- data/lib/omnibus/fetchers/s3_cache_fetcher.rb +3 -4
- data/lib/omnibus/fetchers.rb +3 -3
- data/lib/omnibus/health_check.rb +126 -127
- data/lib/omnibus/library.rb +11 -12
- data/lib/omnibus/overrides.rb +6 -8
- data/lib/omnibus/package_release.rb +20 -22
- data/lib/omnibus/packagers/mac_pkg.rb +285 -0
- data/lib/omnibus/project.rb +215 -110
- data/lib/omnibus/reports.rb +16 -24
- data/lib/omnibus/s3_cacher.rb +15 -21
- data/lib/omnibus/software.rb +178 -88
- data/lib/omnibus/util.rb +25 -13
- data/lib/omnibus/version.rb +2 -2
- data/lib/omnibus.rb +11 -13
- data/omnibus.gemspec +20 -18
- data/spec/artifact_spec.rb +55 -52
- data/spec/build_version_spec.rb +121 -129
- data/spec/config_spec.rb +40 -0
- data/spec/data/projects/chefdk.rb +41 -0
- data/spec/data/projects/sample.rb +10 -0
- data/spec/data/software/erchef.rb +12 -12
- data/spec/data/software/zlib.rb +67 -0
- data/spec/fetchers/git_fetcher_spec.rb +55 -48
- data/spec/fetchers/net_fetcher_spec.rb +72 -78
- data/spec/omnibus_spec.rb +59 -0
- data/spec/overrides_spec.rb +64 -64
- data/spec/package_release_spec.rb +65 -64
- data/spec/packagers/mac_pkg_spec.rb +261 -0
- data/spec/project_spec.rb +138 -0
- data/spec/s3_cacher_spec.rb +9 -10
- data/spec/software_spec.rb +71 -50
- data/spec/spec_helper.rb +14 -7
- metadata +68 -60
- data/.rspec +0 -1
- data/.yardopts +0 -6
- data/spec/software_dirs_spec.rb +0 -34
data/lib/omnibus/library.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2012
|
2
|
+
# Copyright:: Copyright (c) 2012-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -19,7 +19,6 @@ module Omnibus
|
|
19
19
|
#
|
20
20
|
# Used to generate the manifest of all software components with versions
|
21
21
|
class Library
|
22
|
-
|
23
22
|
attr_reader :components
|
24
23
|
|
25
24
|
def initialize(project)
|
@@ -32,31 +31,31 @@ module Omnibus
|
|
32
31
|
end
|
33
32
|
|
34
33
|
def version_map
|
35
|
-
@components.
|
36
|
-
map[component.name] = if component.
|
37
|
-
{
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
@components.reduce({}) do |map, component|
|
35
|
+
map[component.name] = if component.default_version
|
36
|
+
{
|
37
|
+
version: component.version,
|
38
|
+
default_version: component.default_version,
|
39
|
+
overridden: component.overridden?,
|
40
|
+
version_guid: component.version_guid,
|
41
|
+
}
|
41
42
|
else
|
42
43
|
## Components without a version are
|
43
44
|
## pieces of the omnibus project
|
44
45
|
## itself, and so don't really fit
|
45
46
|
## with the concept of overrides
|
46
|
-
v = {:
|
47
|
+
v = { version: @project.build_version }
|
47
48
|
if @project.build_version.respond_to?(:git_sha)
|
48
49
|
v[:version_guid] = "git:#{@project.build_version.git_sha}"
|
49
50
|
end
|
50
51
|
v
|
51
52
|
end
|
52
53
|
map
|
53
|
-
|
54
|
+
end
|
54
55
|
end
|
55
56
|
|
56
57
|
def select(*args, &block)
|
57
58
|
@components.select(*args, &block)
|
58
59
|
end
|
59
60
|
end
|
60
|
-
|
61
61
|
end
|
62
|
-
|
data/lib/omnibus/overrides.rb
CHANGED
@@ -2,8 +2,7 @@ require 'pp'
|
|
2
2
|
|
3
3
|
module Omnibus
|
4
4
|
module Overrides
|
5
|
-
|
6
|
-
DEFAULT_OVERRIDE_FILE_NAME = "omnibus.overrides"
|
5
|
+
DEFAULT_OVERRIDE_FILE_NAME = 'omnibus.overrides'
|
7
6
|
|
8
7
|
# Parses a file of override information into a Hash.
|
9
8
|
#
|
@@ -18,17 +17,17 @@ module Omnibus
|
|
18
17
|
# @return [Hash, nil]
|
19
18
|
def self.parse_file(file)
|
20
19
|
if file
|
21
|
-
File.readlines(file).
|
20
|
+
File.readlines(file).reduce({}) do |acc, line|
|
22
21
|
info = line.split
|
23
22
|
|
24
23
|
unless info.count == 2
|
25
|
-
|
24
|
+
fail ArgumentError, "Invalid overrides line: '#{line.chomp}'"
|
26
25
|
end
|
27
26
|
|
28
27
|
package, version = info
|
29
28
|
|
30
29
|
if acc[package]
|
31
|
-
|
30
|
+
fail ArgumentError, "Multiple overrides present for '#{package}' in overrides file #{file}!"
|
32
31
|
end
|
33
32
|
|
34
33
|
acc[package] = version
|
@@ -56,14 +55,13 @@ module Omnibus
|
|
56
55
|
overrides = parse_file(file)
|
57
56
|
|
58
57
|
if overrides
|
59
|
-
puts
|
58
|
+
puts '********************************************************************************'
|
60
59
|
puts "Using Overrides from #{Omnibus::Overrides.resolve_override_file}"
|
61
60
|
pp overrides
|
62
|
-
puts
|
61
|
+
puts '********************************************************************************'
|
63
62
|
end
|
64
63
|
|
65
64
|
overrides || {}
|
66
65
|
end
|
67
|
-
|
68
66
|
end
|
69
67
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2012
|
2
|
+
# Copyright:: Copyright (c) 2012-2014 Chef Software, Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,7 +26,6 @@ require 'uber-s3'
|
|
26
26
|
|
27
27
|
module Omnibus
|
28
28
|
class PackageRelease
|
29
|
-
|
30
29
|
attr_reader :package_path
|
31
30
|
attr_reader :access_policy
|
32
31
|
|
@@ -36,16 +35,16 @@ module Omnibus
|
|
36
35
|
# @yield callback triggered by successful upload. Allows users of this
|
37
36
|
# class to add UI feedback.
|
38
37
|
# @yieldparam s3_object_key [String] the S3 key of the uploaded object.
|
39
|
-
def initialize(package_path, opts={:
|
38
|
+
def initialize(package_path, opts = { access: :private }, &block)
|
40
39
|
@package_path = package_path
|
41
40
|
@metadata = nil
|
42
41
|
@s3_client = nil
|
43
42
|
|
44
43
|
@after_upload = if block_given?
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
44
|
+
block
|
45
|
+
else
|
46
|
+
->(item_key) { nil }
|
47
|
+
end
|
49
48
|
|
50
49
|
# sets @access_policy
|
51
50
|
handle_opts(opts)
|
@@ -62,9 +61,9 @@ module Omnibus
|
|
62
61
|
def release
|
63
62
|
validate_config!
|
64
63
|
validate_package!
|
65
|
-
s3_client.store(metadata_key, metadata_json, :
|
64
|
+
s3_client.store(metadata_key, metadata_json, access: access_policy)
|
66
65
|
uploaded(metadata_key)
|
67
|
-
s3_client.store(package_key, package_content, :
|
66
|
+
s3_client.store(package_key, package_content, access: access_policy, content_md5: md5)
|
68
67
|
uploaded(package_key)
|
69
68
|
end
|
70
69
|
|
@@ -81,11 +80,11 @@ module Omnibus
|
|
81
80
|
end
|
82
81
|
|
83
82
|
def platform_path
|
84
|
-
File.join(metadata[
|
83
|
+
File.join(metadata['platform'], metadata['platform_version'], metadata['arch'])
|
85
84
|
end
|
86
85
|
|
87
86
|
def md5
|
88
|
-
metadata[
|
87
|
+
metadata['md5']
|
89
88
|
end
|
90
89
|
|
91
90
|
def metadata
|
@@ -106,9 +105,9 @@ module Omnibus
|
|
106
105
|
|
107
106
|
def validate_package!
|
108
107
|
if !File.exist?(package_path)
|
109
|
-
|
108
|
+
fail NoPackageFile.new(package_path)
|
110
109
|
elsif !File.exist?(package_metadata_path)
|
111
|
-
|
110
|
+
fail NoPackageMetadataFile.new(package_metadata_path)
|
112
111
|
else
|
113
112
|
true
|
114
113
|
end
|
@@ -119,16 +118,16 @@ module Omnibus
|
|
119
118
|
true
|
120
119
|
else
|
121
120
|
err = InvalidS3ReleaseConfiguration.new(s3_bucket, s3_access_key, s3_secret_key)
|
122
|
-
|
121
|
+
fail err
|
123
122
|
end
|
124
123
|
end
|
125
124
|
|
126
125
|
def s3_client
|
127
126
|
@s3_client ||= UberS3.new(
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
127
|
+
access_key: s3_access_key,
|
128
|
+
secret_access_key: s3_secret_key,
|
129
|
+
bucket: s3_bucket,
|
130
|
+
adaper: :net_http,
|
132
131
|
)
|
133
132
|
end
|
134
133
|
|
@@ -151,13 +150,12 @@ module Omnibus
|
|
151
150
|
def handle_opts(opts)
|
152
151
|
access_policy = opts[:access]
|
153
152
|
if access_policy.nil?
|
154
|
-
|
155
|
-
elsif
|
156
|
-
|
153
|
+
fail ArgumentError, "options to #{self.class} must specify `:access' (given: #{opts.inspect})"
|
154
|
+
elsif ![:private, :public_read].include?(access_policy)
|
155
|
+
fail ArgumentError, "option `:access' must be one of `[:private, :public_read]' (given: #{access_policy.inspect})"
|
157
156
|
else
|
158
157
|
@access_policy = access_policy
|
159
158
|
end
|
160
159
|
end
|
161
|
-
|
162
160
|
end
|
163
161
|
end
|
@@ -0,0 +1,285 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) 2014 Chef Software, Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require 'forwardable'
|
19
|
+
require 'fileutils'
|
20
|
+
require 'omnibus/util'
|
21
|
+
|
22
|
+
module Omnibus
|
23
|
+
module Packagers
|
24
|
+
# Builds a Mac OS X "product" package (.pkg extension)
|
25
|
+
#
|
26
|
+
# Mac OS X packages are built in two stages. First, files are packaged up
|
27
|
+
# into one or more "component" .pkg files (MacPkg only supports making a
|
28
|
+
# single component). This is done with `pkgbuild`. Next the component(s)
|
29
|
+
# are combined into a single "product" package, using `productbuild`. It is
|
30
|
+
# this container package that can have custom branding (background image)
|
31
|
+
# and a license. It can also allow for user customization of which
|
32
|
+
# component packages to install, but MacPkg does not expose this feature.
|
33
|
+
class MacPkg
|
34
|
+
include Util
|
35
|
+
|
36
|
+
extend Forwardable
|
37
|
+
|
38
|
+
# The Omnibus::Project instance that we're packaging.
|
39
|
+
attr_reader :project
|
40
|
+
|
41
|
+
# !@method name
|
42
|
+
# @return (see Project#name)
|
43
|
+
def_delegator :@project, :name
|
44
|
+
|
45
|
+
# !@method version
|
46
|
+
# @return (see Project#build_version)
|
47
|
+
def_delegator :@project, :build_version, :version
|
48
|
+
|
49
|
+
# !@method identifier
|
50
|
+
# @return (see Project#mac_pkg_identifier)
|
51
|
+
def_delegator :@project, :mac_pkg_identifier, :identifier
|
52
|
+
|
53
|
+
# !@method pkg_root
|
54
|
+
# @return (see Project#install_path)
|
55
|
+
def_delegator :@project, :install_path, :pkg_root
|
56
|
+
|
57
|
+
# !@method install_location
|
58
|
+
# @return (see Project#install_path)
|
59
|
+
def_delegator :@project, :install_path, :install_location
|
60
|
+
|
61
|
+
# !@method scripts
|
62
|
+
# @return (see Project#package_scripts_path)
|
63
|
+
def_delegator :@project, :package_scripts_path, :scripts
|
64
|
+
|
65
|
+
# !@method files_path
|
66
|
+
# @return (see Project#files_path)
|
67
|
+
def_delegator :@project, :files_path
|
68
|
+
|
69
|
+
# !@method package_dir
|
70
|
+
# @return (see Project#package_dir)
|
71
|
+
def_delegator :@project, :package_dir
|
72
|
+
|
73
|
+
# @param project [Project] the omnibus project to package.
|
74
|
+
def initialize(project)
|
75
|
+
@project = project
|
76
|
+
end
|
77
|
+
|
78
|
+
# Build the package.
|
79
|
+
def build
|
80
|
+
# Ensure the omnibus project repo contains the stuff we need.
|
81
|
+
validate_omnibus_project!
|
82
|
+
|
83
|
+
# create the staging dir for intermediate build products, if needed.
|
84
|
+
setup_staging_dir!
|
85
|
+
|
86
|
+
# build the component package
|
87
|
+
build_component_pkg
|
88
|
+
|
89
|
+
# build the product package
|
90
|
+
build_product_pkg
|
91
|
+
end
|
92
|
+
|
93
|
+
# Verifies that the #required_files are present in the
|
94
|
+
# omnibus project repo.
|
95
|
+
# @return [true] if required files are present.
|
96
|
+
# @raise [MissingMacPkgResource] if anything is missing.
|
97
|
+
def validate_omnibus_project!
|
98
|
+
missing_files = required_files.select { |f| !File.exist?(f) }
|
99
|
+
if missing_files.empty?
|
100
|
+
true # all good
|
101
|
+
else
|
102
|
+
fail MissingMacPkgResource.new(missing_files)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Nukes and re-creates the staging_dir
|
107
|
+
# @return [void]
|
108
|
+
def setup_staging_dir!
|
109
|
+
FileUtils.rm_rf(staging_dir)
|
110
|
+
FileUtils.mkdir_p(staging_dir)
|
111
|
+
end
|
112
|
+
|
113
|
+
def build_component_pkg
|
114
|
+
shellout!(*pkgbuild_command, shellout_opts)
|
115
|
+
end
|
116
|
+
|
117
|
+
def build_product_pkg
|
118
|
+
generate_distribution
|
119
|
+
shellout!(*productbuild_command, shellout_opts)
|
120
|
+
end
|
121
|
+
|
122
|
+
# The argv for a pkgbuild command that will build the component package.
|
123
|
+
# The resulting package is only an intermediate build product. It can be
|
124
|
+
# installed with the mac installer, but doesn't contain the data needed
|
125
|
+
# to customize the installer UI.
|
126
|
+
# @return [Array<String>] argv for the pkgbuild command.
|
127
|
+
def pkgbuild_command
|
128
|
+
%W[
|
129
|
+
pkgbuild
|
130
|
+
--identifier #{identifier}
|
131
|
+
--version #{version}
|
132
|
+
--scripts #{scripts}
|
133
|
+
--root #{pkg_root}
|
134
|
+
--install-location #{install_location}
|
135
|
+
#{component_pkg_name}
|
136
|
+
]
|
137
|
+
end
|
138
|
+
|
139
|
+
# The argv for a productbuild command that will build the product package.
|
140
|
+
# The generated package is the final build product that you ship to end
|
141
|
+
# users.
|
142
|
+
# @return [Array<String>] argv for the productbuild command
|
143
|
+
def productbuild_command
|
144
|
+
%W[
|
145
|
+
productbuild
|
146
|
+
--distribution #{distribution_staging_path}
|
147
|
+
--resources #{mac_pkg_files_path}
|
148
|
+
#{product_pkg_path}
|
149
|
+
]
|
150
|
+
end
|
151
|
+
|
152
|
+
# Writes the Distribution file to the staging area.
|
153
|
+
# @return [void]
|
154
|
+
def generate_distribution
|
155
|
+
File.open(distribution_staging_path, File::RDWR | File::CREAT | File::EXCL, 0600) do |file|
|
156
|
+
file.print(distribution)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# The name of the (only) component package.
|
161
|
+
# @return [String] the filename of the component .pkg file to create.
|
162
|
+
def component_pkg_name
|
163
|
+
"#{name}-core.pkg"
|
164
|
+
end
|
165
|
+
|
166
|
+
# The basename of the end-result package (that will be distributed to
|
167
|
+
# users).
|
168
|
+
#
|
169
|
+
# Project uses this to generate metadata about the package after its
|
170
|
+
# built.
|
171
|
+
#
|
172
|
+
# @return [String] the basename of the package file
|
173
|
+
def package_name
|
174
|
+
"#{name}.pkg"
|
175
|
+
end
|
176
|
+
|
177
|
+
def identifier
|
178
|
+
project.mac_pkg_identifier ||
|
179
|
+
"test.#{sanitized_maintainer}.pkg.#{sanitized_name}"
|
180
|
+
end
|
181
|
+
|
182
|
+
# Internally in this class we want to call this the "product package" so
|
183
|
+
# we can be unambiguous and consistent.
|
184
|
+
alias_method :product_pkg_name, :package_name
|
185
|
+
|
186
|
+
# The full path where the product package was/will be written.
|
187
|
+
#
|
188
|
+
# @return [String] Path to the packge file.
|
189
|
+
def product_pkg_path
|
190
|
+
File.join(package_dir, product_pkg_name)
|
191
|
+
end
|
192
|
+
|
193
|
+
# @return [String] Filesystem path where the Distribution file is written.
|
194
|
+
def distribution_staging_path
|
195
|
+
File.join(staging_dir, 'Distribution')
|
196
|
+
end
|
197
|
+
|
198
|
+
# Generates the content of the Distribution file, which is used by
|
199
|
+
# productbuild to select the component packages to include in the product
|
200
|
+
# package. Also includes information used to customize the UI of the Mac
|
201
|
+
# OS X installer.
|
202
|
+
# @return [String] Distribution file content (XML)
|
203
|
+
def distribution
|
204
|
+
<<-END_DISTRIBTION
|
205
|
+
<?xml version="1.0" standalone="no"?>
|
206
|
+
<installer-gui-script minSpecVersion="1">
|
207
|
+
<title>#{name.capitalize}</title>
|
208
|
+
<background file="background.png" alignment="bottomleft" mime-type="image/png"/>
|
209
|
+
<welcome file="welcome.html" mime-type="text/html"/>
|
210
|
+
<license file="license.html" mime-type="text/html"/>
|
211
|
+
|
212
|
+
<!-- Generated by productbuild - - synthesize -->
|
213
|
+
<pkg-ref id="#{identifier}"/>
|
214
|
+
<options customize="never" require-scripts="false"/>
|
215
|
+
<choices-outline>
|
216
|
+
<line choice="default">
|
217
|
+
<line choice="#{identifier}"/>
|
218
|
+
</line>
|
219
|
+
</choices-outline>
|
220
|
+
<choice id="default"/>
|
221
|
+
<choice id="#{identifier}" visible="false">
|
222
|
+
<pkg-ref id="#{identifier}"/>
|
223
|
+
</choice>
|
224
|
+
<pkg-ref id="#{identifier}" version="#{version}" onConclusion="none">#{component_pkg_name}</pkg-ref>
|
225
|
+
</installer-gui-script>
|
226
|
+
END_DISTRIBTION
|
227
|
+
end
|
228
|
+
|
229
|
+
# A directory where intermediate build products are stored.
|
230
|
+
# @return [String] Path to the directory
|
231
|
+
def staging_dir
|
232
|
+
File.join(project.package_tmp, 'mac-pkg')
|
233
|
+
end
|
234
|
+
|
235
|
+
# A list of the files that will be used to customize the "product" package.P
|
236
|
+
# @return [Array<String>] paths to the required files.
|
237
|
+
def required_files
|
238
|
+
[
|
239
|
+
background_png_path,
|
240
|
+
license_file_path,
|
241
|
+
welcome_file_path,
|
242
|
+
]
|
243
|
+
end
|
244
|
+
|
245
|
+
def sanitized_name
|
246
|
+
name.gsub(/[^[:alnum:]]/, '').downcase
|
247
|
+
end
|
248
|
+
|
249
|
+
def sanitized_maintainer
|
250
|
+
project.maintainer.gsub(/[^[:alnum:]]/, '').downcase
|
251
|
+
end
|
252
|
+
|
253
|
+
# The path to the directory inside the omnibus project's repo where the
|
254
|
+
# pkg resource files are.
|
255
|
+
# @return [String] path to the Resources directory
|
256
|
+
def mac_pkg_files_path
|
257
|
+
File.join(files_path, 'mac_pkg', 'Resources')
|
258
|
+
end
|
259
|
+
|
260
|
+
# @return [String] path to the license file
|
261
|
+
def license_file_path
|
262
|
+
File.join(mac_pkg_files_path, 'license.html')
|
263
|
+
end
|
264
|
+
|
265
|
+
# @return [String] path to the background image for the product package.
|
266
|
+
def background_png_path
|
267
|
+
File.join(mac_pkg_files_path, 'background.png')
|
268
|
+
end
|
269
|
+
|
270
|
+
# Path to the welcome file. This is the content that's displayed on the
|
271
|
+
# first screen of the installer.
|
272
|
+
# @return [String] path to the welcome file
|
273
|
+
def welcome_file_path
|
274
|
+
File.join(mac_pkg_files_path, 'welcome.html')
|
275
|
+
end
|
276
|
+
|
277
|
+
def shellout_opts
|
278
|
+
{
|
279
|
+
timeout: 3600,
|
280
|
+
cwd: staging_dir,
|
281
|
+
}
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|