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
@@ -282,27 +282,27 @@ module Omnibus
|
|
282
282
|
render_template(resource_path('spec.erb'),
|
283
283
|
destination: spec_file,
|
284
284
|
variables: {
|
285
|
-
name:
|
286
|
-
version:
|
287
|
-
iteration:
|
288
|
-
vendor:
|
289
|
-
license:
|
290
|
-
dist_tag:
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
285
|
+
name: safe_base_package_name,
|
286
|
+
version: safe_version,
|
287
|
+
iteration: safe_build_iteration,
|
288
|
+
vendor: vendor,
|
289
|
+
license: license,
|
290
|
+
dist_tag: dist_tag,
|
291
|
+
maintainer: project.maintainer,
|
292
|
+
homepage: project.homepage,
|
293
|
+
description: project.description,
|
294
|
+
priority: priority,
|
295
|
+
category: category,
|
296
|
+
conflicts: project.conflicts,
|
297
|
+
replaces: project.replaces,
|
298
|
+
dependencies: project.runtime_dependencies,
|
299
|
+
user: project.package_user,
|
300
|
+
group: project.package_group,
|
301
|
+
scripts: scripts,
|
302
|
+
config_files: config_files,
|
303
|
+
files: files,
|
304
|
+
build_dir: build_dir,
|
305
|
+
platform_family: Ohai['platform_family']
|
306
306
|
}
|
307
307
|
)
|
308
308
|
end
|
@@ -316,6 +316,7 @@ module Omnibus
|
|
316
316
|
#
|
317
317
|
def create_rpm_file
|
318
318
|
command = %|fakeroot rpmbuild|
|
319
|
+
command << %| --target #{safe_architecture}|
|
319
320
|
command << %| -bb|
|
320
321
|
command << %| --buildroot #{staging_dir}/BUILD|
|
321
322
|
command << %| --define '_topdir #{staging_dir}'|
|
@@ -494,16 +495,27 @@ module Omnibus
|
|
494
495
|
# http://rpm.org/ticket/56
|
495
496
|
#
|
496
497
|
if version =~ /\-/
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
498
|
+
if Ohai['platform_family'] == 'wrlinux'
|
499
|
+
converted = version.gsub('-', '_') #WRL has an elderly RPM version
|
500
|
+
log.warn(log_key) do
|
501
|
+
"Omnibus replaces dashes (-) with tildes (~) so pre-release " \
|
502
|
+
"versions get sorted earlier than final versions. However, the " \
|
503
|
+
"version of rpmbuild on Wind River Linux does not support this. " \
|
504
|
+
"All dashes will be replaced with underscores (_). Converting " \
|
505
|
+
"`#{project.build_version}' to `#{converted}'."
|
506
|
+
end
|
507
|
+
else
|
508
|
+
converted = version.gsub('-', '~')
|
509
|
+
log.warn(log_key) do
|
510
|
+
"Tildes hold special significance in the RPM package versions. " \
|
511
|
+
"They mark a version as lower priority in RPM's version compare " \
|
512
|
+
"logic. We'll replace all dashes (-) with tildes (~) so pre-release" \
|
513
|
+
"versions get sorted earlier then final versions. Converting" \
|
514
|
+
"`#{project.build_version}' to `#{converted}'."
|
515
|
+
end
|
505
516
|
end
|
506
517
|
|
518
|
+
|
507
519
|
version = converted
|
508
520
|
end
|
509
521
|
|
@@ -14,29 +14,32 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
+
require 'socket'
|
18
|
+
|
17
19
|
module Omnibus
|
18
20
|
class Packager::Solaris < Packager::Base
|
21
|
+
# @return [Hash]
|
22
|
+
SCRIPT_MAP = {
|
23
|
+
# Default Omnibus naming
|
24
|
+
postinst: 'postinstall',
|
25
|
+
postrm: 'postremove',
|
26
|
+
# Default Solaris naming
|
27
|
+
postinstall: 'postinstall',
|
28
|
+
postremove: 'postremove',
|
29
|
+
}.freeze
|
30
|
+
|
19
31
|
id :solaris
|
20
32
|
|
21
33
|
build do
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
write_pkginfo_content
|
28
|
-
|
29
|
-
copy_file("#{project.package_scripts_path}/postinst", staging_dir_path('postinstall'))
|
30
|
-
copy_file("#{project.package_scripts_path}/postrm", staging_dir_path('postremove'))
|
31
|
-
|
32
|
-
shellout! "pkgmk -o -r #{install_dirname} -d #{staging_dir} -f #{staging_dir_path('Prototype')}"
|
33
|
-
shellout! "pkgchk -vd #{staging_dir} #{project.package_name}"
|
34
|
-
shellout! "pkgtrans #{staging_dir} #{package_path} #{project.package_name}"
|
34
|
+
write_scripts
|
35
|
+
write_prototype_file
|
36
|
+
write_pkginfo_file
|
37
|
+
create_solaris_file
|
35
38
|
end
|
36
39
|
|
37
40
|
# @see Base#package_name
|
38
41
|
def package_name
|
39
|
-
"#{project.package_name}-#{pkgmk_version}.#{
|
42
|
+
"#{project.package_name}-#{pkgmk_version}.#{safe_architecture}.solaris"
|
40
43
|
end
|
41
44
|
|
42
45
|
def pkgmk_version
|
@@ -50,24 +53,42 @@ module Omnibus
|
|
50
53
|
def install_basename
|
51
54
|
File.basename(project.install_dir)
|
52
55
|
end
|
53
|
-
|
56
|
+
|
54
57
|
def staging_dir_path(file_name)
|
55
58
|
File.join(staging_dir, file_name)
|
56
59
|
end
|
57
60
|
|
61
|
+
#
|
62
|
+
# Copy all scripts in {Project#package_scripts_path} to the control
|
63
|
+
# directory of this repo.
|
64
|
+
#
|
65
|
+
# @return [void]
|
66
|
+
#
|
67
|
+
def write_scripts
|
68
|
+
SCRIPT_MAP.each do |source, destination|
|
69
|
+
source_path = File.join(project.package_scripts_path, source.to_s)
|
70
|
+
|
71
|
+
if File.file?(source_path)
|
72
|
+
destination_path = staging_dir_path(destination)
|
73
|
+
log.debug(log_key) { "Adding script `#{source}' to `#{destination_path}'" }
|
74
|
+
copy_file(source_path, destination_path)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
58
79
|
#
|
59
80
|
# Generate a Prototype file for solaris build
|
60
81
|
#
|
61
|
-
def
|
62
|
-
|
63
|
-
i pkginfo
|
64
|
-
i postinstall
|
65
|
-
i postremove
|
66
|
-
EOF
|
82
|
+
def write_prototype_file
|
83
|
+
shellout! "cd #{install_dirname} && find #{install_basename} -print > #{staging_dir_path('files')}"
|
67
84
|
|
68
85
|
# generate list of control files
|
69
86
|
File.open staging_dir_path('Prototype'), 'w+' do |f|
|
70
|
-
f.write
|
87
|
+
f.write <<-EOF.gsub(/^ {10}/, '')
|
88
|
+
i pkginfo
|
89
|
+
i postinstall
|
90
|
+
i postremove
|
91
|
+
EOF
|
71
92
|
end
|
72
93
|
|
73
94
|
# generate the prototype's file list
|
@@ -80,7 +101,10 @@ module Omnibus
|
|
80
101
|
#
|
81
102
|
# Generate a pkginfo file for solaris build
|
82
103
|
#
|
83
|
-
def
|
104
|
+
def write_pkginfo_file
|
105
|
+
hostname = Socket.gethostname
|
106
|
+
|
107
|
+
# http://docs.oracle.com/cd/E19683-01/816-0219/6m6njqbat/index.html
|
84
108
|
pkginfo_content = <<-EOF.gsub(/^ {8}/, '')
|
85
109
|
CLASSES=none
|
86
110
|
TZ=PST
|
@@ -88,17 +112,44 @@ module Omnibus
|
|
88
112
|
BASEDIR=#{install_dirname}
|
89
113
|
PKG=#{project.package_name}
|
90
114
|
NAME=#{project.package_name}
|
91
|
-
ARCH=#{
|
115
|
+
ARCH=#{safe_architecture}
|
92
116
|
VERSION=#{pkgmk_version}
|
93
117
|
CATEGORY=application
|
94
118
|
DESC=#{project.description}
|
95
119
|
VENDOR=#{project.maintainer}
|
96
120
|
EMAIL=#{project.maintainer}
|
97
|
-
PSTAMP=#{
|
121
|
+
PSTAMP=#{hostname}#{Time.now.utc.iso8601}
|
98
122
|
EOF
|
99
123
|
File.open staging_dir_path('pkginfo'), 'w+' do |f|
|
100
124
|
f.write pkginfo_content
|
101
125
|
end
|
102
126
|
end
|
127
|
+
|
128
|
+
#
|
129
|
+
# Generate the Solaris file using +pkg*+.
|
130
|
+
#
|
131
|
+
# @return [void]
|
132
|
+
#
|
133
|
+
def create_solaris_file
|
134
|
+
shellout! "pkgmk -o -r #{install_dirname} -d #{staging_dir} -f #{staging_dir_path('Prototype')}"
|
135
|
+
shellout! "pkgchk -vd #{staging_dir} #{project.package_name}"
|
136
|
+
shellout! "pkgtrans #{staging_dir} #{package_path} #{project.package_name}"
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
# The architecture for this Solaris package.
|
141
|
+
#
|
142
|
+
# @return [String]
|
143
|
+
#
|
144
|
+
def safe_architecture
|
145
|
+
# The #i386? and #intel? helpers come from chef-sugar
|
146
|
+
if intel?
|
147
|
+
'i386'
|
148
|
+
elsif sparc?
|
149
|
+
'sparc'
|
150
|
+
else
|
151
|
+
Ohai['kernel']['machine']
|
152
|
+
end
|
153
|
+
end
|
103
154
|
end
|
104
155
|
end
|
data/lib/omnibus/publisher.rb
CHANGED
@@ -38,10 +38,7 @@ module Omnibus
|
|
38
38
|
artifact_for(package).upload(
|
39
39
|
repository,
|
40
40
|
remote_path_for(package),
|
41
|
-
|
42
|
-
'build.name' => package.metadata[:name],
|
43
|
-
'build.number' => package.metadata[:version],
|
44
|
-
),
|
41
|
+
default_properties.merge(metadata_properties_for(package)),
|
45
42
|
)
|
46
43
|
end
|
47
44
|
rescue Artifactory::Error::HTTPError => e
|
@@ -120,11 +117,11 @@ module Omnibus
|
|
120
117
|
name: 'omnibus',
|
121
118
|
version: Omnibus::VERSION,
|
122
119
|
},
|
123
|
-
properties:
|
120
|
+
properties: default_properties.merge(
|
124
121
|
'omnibus.project' => name,
|
125
122
|
'omnibus.version' => manifest.build_version,
|
126
123
|
'omnibus.version_manifest' => manifest.to_json,
|
127
|
-
|
124
|
+
),
|
128
125
|
modules: [
|
129
126
|
{
|
130
127
|
# com.getchef:chef-server:12.0.0
|
@@ -188,8 +185,8 @@ module Omnibus
|
|
188
185
|
#
|
189
186
|
# @return [Hash<String, String>]
|
190
187
|
#
|
191
|
-
def
|
192
|
-
{
|
188
|
+
def metadata_properties_for(package)
|
189
|
+
metadata = {
|
193
190
|
'omnibus.project' => package.metadata[:name],
|
194
191
|
'omnibus.platform' => package.metadata[:platform],
|
195
192
|
'omnibus.platform_version' => package.metadata[:platform_version],
|
@@ -201,6 +198,20 @@ module Omnibus
|
|
201
198
|
'omnibus.sha256' => package.metadata[:sha256],
|
202
199
|
'omnibus.sha512' => package.metadata[:sha512],
|
203
200
|
}
|
201
|
+
metadata.merge!(
|
202
|
+
'build.name' => package.metadata[:name],
|
203
|
+
'build.number' => package.metadata[:version],
|
204
|
+
) if build_record?
|
205
|
+
metadata
|
206
|
+
end
|
207
|
+
|
208
|
+
#
|
209
|
+
# Properties to attach to published artifacts (and build record).
|
210
|
+
#
|
211
|
+
# @return [Hash<String, String>]
|
212
|
+
#
|
213
|
+
def default_properties
|
214
|
+
@properties ||= @options[:properties] || {}
|
204
215
|
end
|
205
216
|
|
206
217
|
#
|
data/lib/omnibus/sugarable.rb
CHANGED
@@ -30,6 +30,11 @@ require 'chef/sugar/vagrant'
|
|
30
30
|
|
31
31
|
module Omnibus
|
32
32
|
module Sugarable
|
33
|
+
def self.extended(base)
|
34
|
+
base.send(:extend, Chef::Sugar::DSL)
|
35
|
+
base.send(:extend, Omnibus::Sugar)
|
36
|
+
end
|
37
|
+
|
33
38
|
def self.included(base)
|
34
39
|
base.send(:include, Chef::Sugar::DSL)
|
35
40
|
base.send(:include, Omnibus::Sugar)
|
data/lib/omnibus/version.rb
CHANGED
data/omnibus.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.description = gem.summary
|
14
14
|
gem.homepage = 'https://github.com/opscode/omnibus'
|
15
15
|
|
16
|
-
gem.required_ruby_version = '>=
|
16
|
+
gem.required_ruby_version = '>= 2'
|
17
17
|
|
18
18
|
gem.files = `git ls-files`.split($/)
|
19
19
|
gem.bindir = 'bin'
|
Binary file
|
@@ -16,4 +16,8 @@
|
|
16
16
|
<String Id="VerifyReadyDlgInstallTitle">{\WixUI_Font_Title_White}Ready to install [ProductName]</String>
|
17
17
|
|
18
18
|
<String Id="FeatureMainName"><%= friendly_name %></String>
|
19
|
+
|
20
|
+
<String Id="MinimumOSVersionMessage">This package requires minimum OS version: Windows 7/Windows Server 2008 R2 or greater.</String>
|
21
|
+
<String Id="DowngradeErrorMessage">A newer version of [ProductName] is already installed.</String>
|
22
|
+
<String Id="FileExtractionProgress">Extracting files, please wait...</String>
|
19
23
|
</WixLocalization>
|
@@ -12,23 +12,60 @@
|
|
12
12
|
Version="$(var.VersionNumber)" Manufacturer="!(loc.ManufacturerName)" UpgradeCode="$(var.UpgradeCode)">
|
13
13
|
|
14
14
|
<!--
|
15
|
-
|
16
|
-
The install
|
15
|
+
Minimum installer version (2.0) - Window XP and above.
|
16
|
+
The install scope is per machine, not the current user
|
17
17
|
-->
|
18
|
-
<Package InstallerVersion="200" InstallPrivileges="elevated"
|
18
|
+
<Package InstallerVersion="200" InstallPrivileges="elevated"
|
19
|
+
Compressed="yes" InstallScope="perMachine" />
|
19
20
|
|
20
21
|
<Media Id="1" Cabinet="Project.cab" EmbedCab="yes" CompressionLevel="high" />
|
21
22
|
|
22
|
-
<!--
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
<!--
|
24
|
+
Uncomment launch condition below to check for minimum OS
|
25
|
+
601 = Windows 7/Server 2008R2.
|
26
|
+
-->
|
27
|
+
<!-- Condition Message="!(loc.MinimumOSVersionMessage)">
|
28
|
+
<![CDATA[Installed OR VersionNT >= 601]]>
|
29
|
+
</Condition -->
|
30
|
+
|
31
|
+
<!-- We always do Major upgrades -->
|
32
|
+
<MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeErrorMessage)" />
|
33
|
+
|
34
|
+
<!--
|
35
|
+
If fastmsi is set, custom actions will be invoked during install to unzip
|
36
|
+
project files, and during uninstall to remove the project folder
|
37
|
+
-->
|
38
|
+
<% if fastmsi %>
|
39
|
+
<SetProperty Id="FastUnzip"
|
40
|
+
Value="FASTZIPDIR=[INSTALLLOCATION];FASTZIPAPPNAME=chefdk"
|
41
|
+
Sequence="execute"
|
42
|
+
Before="FastUnzip" />
|
43
|
+
|
44
|
+
<CustomAction Id="FastUnzip"
|
45
|
+
BinaryKey="CustomActionFastMsiDLL"
|
46
|
+
DllEntry="FastUnzip"
|
47
|
+
Execute="deferred"
|
48
|
+
Return="check" />
|
49
|
+
|
50
|
+
<Binary Id="CustomActionFastMsiDLL"
|
51
|
+
SourceFile="CustomActionFastMsi.CA.dll" />
|
52
|
+
|
53
|
+
<CustomAction Id="Cleanup"
|
54
|
+
Directory="INSTALLLOCATION"
|
55
|
+
ExeCommand="cmd /C "rd /S /Q chefdk""
|
56
|
+
Execute="deferred"
|
57
|
+
Return="ignore" />
|
27
58
|
|
28
59
|
<InstallExecuteSequence>
|
29
|
-
<
|
60
|
+
<Custom Action="FastUnzip" After="InstallFiles">NOT Installed</Custom>
|
61
|
+
<Custom Action="Cleanup" After="RemoveFiles">REMOVE~="ALL"</Custom>
|
30
62
|
</InstallExecuteSequence>
|
31
63
|
|
64
|
+
<UI>
|
65
|
+
<ProgressText Action="FastUnzip">!(loc.FileExtractionProgress)</ProgressText>
|
66
|
+
</UI>
|
67
|
+
<% end %>
|
68
|
+
|
32
69
|
<Directory Id="TARGETDIR" Name="SourceDir">
|
33
70
|
<Directory Id="WINDOWSVOLUME">
|
34
71
|
<% hierarchy.each.with_index do |(name, id), index| -%>
|
data/resources/rpm/spec.erb
CHANGED
@@ -19,7 +19,6 @@ Name: <%= name %>
|
|
19
19
|
Version: <%= version %>
|
20
20
|
Release: <%= iteration %><%= dist_tag %>
|
21
21
|
Summary: <%= description.split("\n").first.empty? ? "_" : description.split("\n").first %>
|
22
|
-
BuildArch: <%= architecture %>
|
23
22
|
AutoReqProv: no
|
24
23
|
BuildRoot: %buildroot
|
25
24
|
Prefix: /
|
@@ -15,18 +15,94 @@ module Omnibus
|
|
15
15
|
# manner similar to one that omnibus provides, we would need to emulate
|
16
16
|
# the fixup steps here as well, which is a pain the ass.
|
17
17
|
#
|
18
|
-
#
|
18
|
+
# Instead we write batch files that redirect to the batch files
|
19
|
+
# corresponding to the system installation and hope it all works out.
|
19
20
|
def fake_embedded_bin(name)
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
if windows?
|
22
|
+
ext = (name == 'ruby') ? '.exe' : '.bat'
|
23
|
+
source = Bundler.which(name + ext)
|
24
|
+
raise "Could not find #{name} in bundler environment" unless source
|
25
|
+
File.open(File.join(embedded_bin_dir, name + '.bat'), 'w') do |f|
|
26
|
+
f.write <<-EOH.gsub(/^ {12}/, '')
|
27
|
+
@"#{source}" %*
|
28
|
+
EOH
|
29
|
+
end
|
30
|
+
else
|
31
|
+
source = Bundler.which(name)
|
32
|
+
raise "Could not find #{name} in bundler environment" unless source
|
33
|
+
|
34
|
+
target = File.join(embedded_bin_dir, name)
|
35
|
+
create_link(source, target) unless File.exists?(target)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def shellout_opts(subject)
|
40
|
+
# Pass GEM_HOME and GEM_PATH to subprocess so our fake bin works
|
41
|
+
options = {}
|
42
|
+
options[:env] = {
|
43
|
+
'GEM_HOME' => ENV['GEM_HOME'],
|
44
|
+
'GEM_PATH' => ENV['GEM_PATH'],
|
45
|
+
}
|
46
|
+
options[:env].merge!(subject.with_embedded_path)
|
47
|
+
options
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def make_gemspec()
|
52
|
+
gemspec = File.join(project_dir, "#{project_name}.gemspec")
|
53
|
+
File.open(gemspec, 'w') do |f|
|
54
|
+
f.write <<-EOH.gsub(/^ {12}/, '')
|
55
|
+
Gem::Specification.new do |gem|
|
56
|
+
gem.name = '#{project_name}'
|
57
|
+
gem.version = '1.0.0'
|
58
|
+
gem.author = 'Chef Software, Inc.'
|
59
|
+
gem.email = 'info@getchef.com'
|
60
|
+
gem.description = 'Installs a thing'
|
61
|
+
gem.summary = gem.description
|
62
|
+
end
|
63
|
+
EOH
|
64
|
+
end
|
65
|
+
gemspec
|
66
|
+
end
|
67
|
+
|
68
|
+
def make_gemfile()
|
69
|
+
gemfile = File.join(project_dir, 'Gemfile')
|
70
|
+
File.open(gemfile, 'w') do |f|
|
71
|
+
f.write <<-EOH.gsub(/^ {12}/, '')
|
72
|
+
gemspec
|
73
|
+
EOH
|
74
|
+
end
|
75
|
+
gemfile
|
76
|
+
end
|
77
|
+
|
78
|
+
def make_gemfile_lock()
|
79
|
+
gemfile_lock = File.join(project_dir, 'Gemfile.lock')
|
80
|
+
File.open(gemfile_lock, 'w') do |f|
|
81
|
+
f.write <<-EOH.gsub(/^ {12}/, '')
|
82
|
+
PATH
|
83
|
+
remote: .
|
84
|
+
specs:
|
85
|
+
#{project_name} (1.0.0)
|
86
|
+
|
87
|
+
GEM
|
88
|
+
specs:
|
89
|
+
|
90
|
+
PLATFORMS
|
91
|
+
ruby
|
92
|
+
|
93
|
+
DEPENDENCIES
|
94
|
+
#{project_name}!
|
95
|
+
EOH
|
96
|
+
end
|
97
|
+
gemfile_lock
|
23
98
|
end
|
24
99
|
|
25
100
|
subject { described_class.new(software) }
|
101
|
+
let(:project_name) { 'example' }
|
102
|
+
let(:project_dir) { File.join(source_dir, project_name) }
|
26
103
|
|
27
104
|
describe '#command' do
|
28
105
|
it 'executes the command' do
|
29
|
-
path = File.join(software.install_dir, 'file.txt')
|
30
106
|
subject.command("echo 'Hello World!'")
|
31
107
|
|
32
108
|
output = capture_logging { subject.build }
|
@@ -78,7 +154,7 @@ module Omnibus
|
|
78
154
|
|
79
155
|
fake_embedded_bin('ruby')
|
80
156
|
|
81
|
-
subject.ruby(ruby)
|
157
|
+
subject.ruby(ruby, env: subject.with_embedded_path)
|
82
158
|
subject.build
|
83
159
|
|
84
160
|
path = "#{software.install_dir}/test.txt"
|
@@ -87,140 +163,60 @@ module Omnibus
|
|
87
163
|
end
|
88
164
|
end
|
89
165
|
|
90
|
-
describe '#gem'
|
166
|
+
describe '#gem' do
|
91
167
|
it 'executes the command as the embedded gem' do
|
92
|
-
|
93
|
-
File.open(gemspec, 'w') do |f|
|
94
|
-
f.write <<-EOH.gsub(/^ {12}/, '')
|
95
|
-
Gem::Specification.new do |gem|
|
96
|
-
gem.name = 'example'
|
97
|
-
gem.version = '1.0.0'
|
98
|
-
gem.author = 'Chef Software, Inc.'
|
99
|
-
gem.email = 'info@getchef.com'
|
100
|
-
gem.description = 'Installs a thing'
|
101
|
-
gem.summary = gem.description
|
102
|
-
end
|
103
|
-
EOH
|
104
|
-
end
|
105
|
-
|
168
|
+
make_gemspec
|
106
169
|
fake_embedded_bin('gem')
|
170
|
+
gem_file = "#{project_name}-1.0.0.gem"
|
107
171
|
|
108
|
-
subject.gem("build #{gemspec
|
109
|
-
subject.gem("install #{
|
172
|
+
subject.gem("build #{project_name}.gemspec", shellout_opts(subject))
|
173
|
+
subject.gem("install #{gem_file}", shellout_opts(subject))
|
110
174
|
output = capture_logging { subject.build }
|
111
175
|
|
176
|
+
expect(File.join(project_dir, gem_file)).to be_a_file
|
112
177
|
expect(output).to include('gem build')
|
113
178
|
expect(output).to include('gem install')
|
179
|
+
|
114
180
|
end
|
115
181
|
end
|
116
182
|
|
117
|
-
describe '#bundler'
|
183
|
+
describe '#bundler' do
|
118
184
|
it 'executes the command as the embedded bundler' do
|
119
|
-
|
120
|
-
|
121
|
-
f.write <<-EOH.gsub(/^ {12}/, '')
|
122
|
-
Gem::Specification.new do |gem|
|
123
|
-
gem.name = 'example'
|
124
|
-
gem.version = '1.0.0'
|
125
|
-
gem.author = 'Chef Software, Inc.'
|
126
|
-
gem.email = 'info@getchef.com'
|
127
|
-
gem.description = 'Installs a thing'
|
128
|
-
gem.summary = gem.description
|
129
|
-
end
|
130
|
-
EOH
|
131
|
-
end
|
132
|
-
|
133
|
-
gemfile = File.join(tmp_path, 'Gemfile')
|
134
|
-
File.open(gemfile, 'w') do |f|
|
135
|
-
f.write <<-EOH.gsub(/^ {12}/, '')
|
136
|
-
gemspec
|
137
|
-
EOH
|
138
|
-
end
|
139
|
-
|
185
|
+
make_gemspec
|
186
|
+
make_gemfile
|
140
187
|
fake_embedded_bin('bundle')
|
141
188
|
|
142
|
-
|
143
|
-
options = {}
|
144
|
-
options[:env] = {
|
145
|
-
'GEM_HOME' => ENV['GEM_HOME'],
|
146
|
-
'GEM_PATH' => ENV['GEM_PATH'],
|
147
|
-
}
|
148
|
-
|
149
|
-
subject.bundle('install', options)
|
189
|
+
subject.bundle('install', shellout_opts(subject))
|
150
190
|
output = capture_logging { subject.build }
|
151
191
|
|
192
|
+
expect(File.join(project_dir, 'Gemfile.lock')).to be_a_file
|
152
193
|
expect(output).to include('bundle install')
|
153
194
|
end
|
154
195
|
end
|
155
196
|
|
156
|
-
describe '#appbundle'
|
197
|
+
describe '#appbundle' do
|
157
198
|
it 'executes the command as the embedded appbundler' do
|
199
|
+
make_gemspec
|
200
|
+
make_gemfile
|
201
|
+
make_gemfile_lock
|
158
202
|
|
159
|
-
|
160
|
-
embedded_app_dir = "#{software.install_dir}/embedded/apps/example"
|
161
|
-
bin_dir = "#{software.install_dir}/bin"
|
162
|
-
|
163
|
-
FileUtils.mkdir(source_dir)
|
164
|
-
|
165
|
-
gemspec = File.join(source_dir, 'example.gemspec')
|
166
|
-
File.open(gemspec, 'w') do |f|
|
167
|
-
f.write <<-EOH.gsub(/^ {12}/, '')
|
168
|
-
Gem::Specification.new do |gem|
|
169
|
-
gem.name = 'example'
|
170
|
-
gem.version = '1.0.0'
|
171
|
-
gem.author = 'Chef Software, Inc.'
|
172
|
-
gem.email = 'info@getchef.com'
|
173
|
-
gem.description = 'Installs a thing'
|
174
|
-
gem.summary = gem.description
|
175
|
-
end
|
176
|
-
EOH
|
177
|
-
end
|
178
|
-
|
179
|
-
gemfile = File.join(source_dir, 'Gemfile')
|
180
|
-
File.open(gemfile, 'w') do |f|
|
181
|
-
f.write <<-EOH.gsub(/^ {12}/, '')
|
182
|
-
gemspec
|
183
|
-
EOH
|
184
|
-
end
|
185
|
-
|
186
|
-
gemfile_lock = File.join(source_dir, 'Gemfile.lock')
|
187
|
-
File.open(gemfile_lock, 'w') do |f|
|
188
|
-
f.write <<-EOH.gsub(/^ {12}/, '')
|
189
|
-
PATH
|
190
|
-
remote: .
|
191
|
-
specs:
|
192
|
-
example (1.0.0)
|
193
|
-
|
194
|
-
GEM
|
195
|
-
specs:
|
196
|
-
|
197
|
-
PLATFORMS
|
198
|
-
ruby
|
199
|
-
|
200
|
-
DEPENDENCIES
|
201
|
-
example!
|
202
|
-
EOH
|
203
|
-
end
|
204
|
-
|
203
|
+
fake_embedded_bin('gem')
|
205
204
|
fake_embedded_bin('appbundler')
|
206
205
|
|
207
|
-
#
|
208
|
-
|
209
|
-
|
210
|
-
'GEM_HOME' => ENV['GEM_HOME'],
|
211
|
-
'GEM_PATH' => ENV['GEM_PATH'],
|
212
|
-
}
|
213
|
-
|
214
|
-
subject.appbundle('example', options)
|
206
|
+
subject.gem("build #{project_name}.gemspec", shellout_opts(subject))
|
207
|
+
subject.gem("install #{project_name}-1.0.0.gem", shellout_opts(subject))
|
208
|
+
subject.appbundle(project_name, shellout_opts(subject))
|
215
209
|
output = capture_logging { subject.build }
|
216
210
|
|
217
|
-
|
211
|
+
appbundler_path = File.join(embedded_bin_dir, 'appbundler')
|
212
|
+
appbundler_path.gsub!(/\//,'\\') if windows?
|
213
|
+
expect(output).to include("#{appbundler_path} '#{project_dir}' '#{bin_dir}'")
|
218
214
|
end
|
219
215
|
end
|
220
216
|
|
221
|
-
describe '#rake'
|
217
|
+
describe '#rake' do
|
222
218
|
it 'executes the command as the embedded rake' do
|
223
|
-
rakefile = File.join(
|
219
|
+
rakefile = File.join(project_dir, 'Rakefile')
|
224
220
|
File.open(rakefile, 'w') do |f|
|
225
221
|
f.write <<-EOH.gsub(/^ {12}/, '')
|
226
222
|
task(:foo) { }
|
@@ -229,8 +225,8 @@ module Omnibus
|
|
229
225
|
|
230
226
|
fake_embedded_bin('rake')
|
231
227
|
|
232
|
-
subject.rake('-T')
|
233
|
-
subject.rake('foo')
|
228
|
+
subject.rake('-T', shellout_opts(subject))
|
229
|
+
subject.rake('foo', shellout_opts(subject))
|
234
230
|
output = capture_logging { subject.build }
|
235
231
|
|
236
232
|
expect(output).to include('rake -T')
|