omnibus 1.3.0 → 2.0.0.rc1
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 +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
@@ -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,75 +19,75 @@ require 'omnibus/package_release'
|
|
19
19
|
require 'spec_helper'
|
20
20
|
|
21
21
|
describe Omnibus::PackageRelease do
|
22
|
-
let(:s3_key) {
|
23
|
-
let(:s3_secret) {
|
24
|
-
let(:s3_bucket) {
|
25
|
-
let(:pkg_path) {
|
22
|
+
let(:s3_key) { 's3key' }
|
23
|
+
let(:s3_secret) { 'hey-bezos-store-my-stuff' }
|
24
|
+
let(:s3_bucket) { 'myorg-omnibus-packages' }
|
25
|
+
let(:pkg_path) { 'pkg/chef_11.4.0-183-g2c0040c-0.el6.x86_64.rpm' }
|
26
26
|
let(:pkg_metadata_path) { "#{pkg_path}.metadata.json" }
|
27
27
|
|
28
28
|
let(:config) do
|
29
29
|
{
|
30
|
-
:
|
31
|
-
:
|
32
|
-
:
|
30
|
+
release_s3_access_key: s3_key,
|
31
|
+
release_s3_secret_key: s3_secret,
|
32
|
+
release_s3_bucket: s3_bucket,
|
33
33
|
}
|
34
34
|
end
|
35
35
|
subject(:package_release) do
|
36
36
|
Omnibus::PackageRelease.new(pkg_path)
|
37
37
|
end
|
38
38
|
|
39
|
-
it
|
40
|
-
package_release.package_path.
|
39
|
+
it 'has a package path' do
|
40
|
+
expect(package_release.package_path).to eq(pkg_path)
|
41
41
|
end
|
42
42
|
|
43
43
|
it "defaults to `:private' access policy" do
|
44
|
-
package_release.access_policy.
|
44
|
+
expect(package_release.access_policy).to eq(:private)
|
45
45
|
end
|
46
46
|
|
47
|
-
describe
|
47
|
+
describe 'validating configuration' do
|
48
48
|
|
49
49
|
before do
|
50
50
|
Omnibus.stub(:config).and_return(config)
|
51
51
|
end
|
52
52
|
|
53
|
-
it
|
53
|
+
it 'validates that the s3 key is set' do
|
54
54
|
config.delete(:release_s3_access_key)
|
55
|
-
|
55
|
+
expect { package_release.validate_config! }.to raise_error(Omnibus::InvalidS3ReleaseConfiguration)
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'validates that the s3 secret key is set' do
|
59
59
|
config.delete(:release_s3_secret_key)
|
60
|
-
|
60
|
+
expect { package_release.validate_config! }.to raise_error(Omnibus::InvalidS3ReleaseConfiguration)
|
61
61
|
end
|
62
62
|
|
63
|
-
it
|
63
|
+
it 'validates that the s3 bucket is set' do
|
64
64
|
config.delete(:release_s3_bucket)
|
65
|
-
|
65
|
+
expect { package_release.validate_config! }.to raise_error(Omnibus::InvalidS3ReleaseConfiguration)
|
66
66
|
end
|
67
67
|
|
68
|
-
it
|
69
|
-
|
68
|
+
it 'does not error on a valid configuration' do
|
69
|
+
expect { package_release.validate_config! }.to_not raise_error
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
describe
|
74
|
-
it
|
75
|
-
|
73
|
+
describe 'validating package for upload' do
|
74
|
+
it 'ensures that the package file exists' do
|
75
|
+
expect { package_release.validate_package! }.to raise_error(Omnibus::NoPackageFile)
|
76
76
|
end
|
77
77
|
|
78
|
-
it
|
79
|
-
File.
|
80
|
-
File.
|
81
|
-
|
78
|
+
it 'ensures that there is a metadata file for the package' do
|
79
|
+
expect(File).to receive(:exist?).with(pkg_path).and_return(true)
|
80
|
+
expect(File).to receive(:exist?).with(pkg_metadata_path).and_return(false)
|
81
|
+
expect { package_release.validate_package! }.to raise_error(Omnibus::NoPackageMetadataFile)
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
context
|
85
|
+
context 'with a valid config and package' do
|
86
86
|
|
87
|
-
let(:basename) {
|
88
|
-
let(:md5) {
|
89
|
-
let(:platform_path) {
|
90
|
-
let(:pkg_content) {
|
87
|
+
let(:basename) { 'chef_11.4.0-183-g2c0040c-0.el6.x86_64.rpm' }
|
88
|
+
let(:md5) { '016f2e0854c69901b3f0ad8f99ffdb75' }
|
89
|
+
let(:platform_path) { 'el/6/x86_64' }
|
90
|
+
let(:pkg_content) { 'expected package content' }
|
91
91
|
|
92
92
|
let(:metadata_json) do
|
93
93
|
<<-E
|
@@ -111,38 +111,37 @@ describe Omnibus::PackageRelease do
|
|
111
111
|
IO.stub(:read).with(pkg_path).and_return(pkg_content)
|
112
112
|
end
|
113
113
|
|
114
|
-
it
|
114
|
+
it 'configures s3 with the given credentials' do
|
115
115
|
expected_s3_config = {
|
116
|
-
:
|
117
|
-
:
|
118
|
-
:
|
119
|
-
:
|
116
|
+
access_key: s3_key,
|
117
|
+
secret_access_key: s3_secret,
|
118
|
+
bucket: s3_bucket,
|
119
|
+
adaper: :net_http,
|
120
120
|
}
|
121
|
-
UberS3.
|
121
|
+
expect(UberS3).to receive(:new).with(expected_s3_config)
|
122
122
|
package_release.s3_client
|
123
123
|
end
|
124
124
|
|
125
|
-
it
|
126
|
-
package_release.platform_path.
|
125
|
+
it 'generates the relative path for the package s3 key' do
|
126
|
+
expect(package_release.platform_path).to eq(platform_path)
|
127
127
|
end
|
128
128
|
|
129
|
-
|
130
|
-
|
131
|
-
package_release.s3_client.should_receive(:store).with(
|
129
|
+
it 'uploads the package and metadata' do
|
130
|
+
expect(package_release.s3_client).to receive(:store).with(
|
132
131
|
"#{platform_path}/#{basename}.metadata.json",
|
133
132
|
metadata_json,
|
134
|
-
:
|
133
|
+
access: :private,
|
135
134
|
)
|
136
|
-
package_release.s3_client.
|
135
|
+
expect(package_release.s3_client).to receive(:store).with(
|
137
136
|
"#{platform_path}/#{basename}",
|
138
137
|
pkg_content,
|
139
|
-
:
|
140
|
-
:
|
138
|
+
access: :private,
|
139
|
+
content_md5: md5,
|
141
140
|
)
|
142
141
|
package_release.release
|
143
142
|
end
|
144
143
|
|
145
|
-
context
|
144
|
+
context 'and a callback is given for after upload' do
|
146
145
|
let(:upload_records) { [] }
|
147
146
|
|
148
147
|
subject(:package_release) do
|
@@ -151,42 +150,44 @@ describe Omnibus::PackageRelease do
|
|
151
150
|
end
|
152
151
|
end
|
153
152
|
|
154
|
-
it
|
155
|
-
package_release.s3_client.
|
153
|
+
it 'fires the after_upload callback for each item uploaded' do
|
154
|
+
expect(package_release.s3_client).to receive(:store).with(
|
156
155
|
"#{platform_path}/#{basename}.metadata.json",
|
157
156
|
metadata_json,
|
158
|
-
:
|
157
|
+
access: :private,
|
159
158
|
)
|
160
|
-
package_release.s3_client.
|
159
|
+
expect(package_release.s3_client).to receive(:store).with(
|
161
160
|
"#{platform_path}/#{basename}",
|
162
161
|
pkg_content,
|
163
|
-
:
|
164
|
-
:
|
162
|
+
access: :private,
|
163
|
+
content_md5: md5,
|
165
164
|
)
|
166
165
|
package_release.release
|
167
166
|
|
168
|
-
upload_records.
|
169
|
-
|
167
|
+
expect(upload_records).to eq [
|
168
|
+
"#{platform_path}/#{basename}.metadata.json",
|
169
|
+
"#{platform_path}/#{basename}",
|
170
|
+
]
|
170
171
|
end
|
171
172
|
end
|
172
173
|
|
173
|
-
context
|
174
|
+
context 'and the package is public' do
|
174
175
|
|
175
176
|
subject(:package_release) do
|
176
|
-
Omnibus::PackageRelease.new(pkg_path, :
|
177
|
+
Omnibus::PackageRelease.new(pkg_path, access: :public_read)
|
177
178
|
end
|
178
179
|
|
179
|
-
it
|
180
|
-
package_release.s3_client.
|
180
|
+
it 'uploads the package and metadata' do
|
181
|
+
expect(package_release.s3_client).to receive(:store).with(
|
181
182
|
"#{platform_path}/#{basename}.metadata.json",
|
182
183
|
metadata_json,
|
183
|
-
:
|
184
|
+
access: :public_read,
|
184
185
|
)
|
185
|
-
package_release.s3_client.
|
186
|
+
expect(package_release.s3_client).to receive(:store).with(
|
186
187
|
"#{platform_path}/#{basename}",
|
187
188
|
pkg_content,
|
188
|
-
:
|
189
|
-
:
|
189
|
+
access: :public_read,
|
190
|
+
content_md5: md5,
|
190
191
|
)
|
191
192
|
package_release.release
|
192
193
|
end
|
@@ -0,0 +1,261 @@
|
|
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 'stringio'
|
19
|
+
require 'omnibus/packagers/mac_pkg'
|
20
|
+
require 'spec_helper'
|
21
|
+
|
22
|
+
describe Omnibus::Packagers::MacPkg do
|
23
|
+
|
24
|
+
let(:project_name) { 'myproject' }
|
25
|
+
|
26
|
+
let(:mac_pkg_identifier) { 'com.mycorp.myproject' }
|
27
|
+
|
28
|
+
let(:omnibus_root) { '/omnibus/project/root' }
|
29
|
+
|
30
|
+
let(:scripts_path) { "#{omnibus_root}/scripts" }
|
31
|
+
|
32
|
+
let(:package_dir) { '/home/someuser/omnibus-myproject/pkg' }
|
33
|
+
|
34
|
+
let(:package_tmp) { '/var/cache/omnibus/pkg-tmp' }
|
35
|
+
|
36
|
+
let(:files_path) { "#{omnibus_root}/files" }
|
37
|
+
|
38
|
+
let(:expected_distribution_content) do
|
39
|
+
<<-EOH
|
40
|
+
<?xml version="1.0" standalone="no"?>
|
41
|
+
<installer-gui-script minSpecVersion="1">
|
42
|
+
<title>Myproject</title>
|
43
|
+
<background file="background.png" alignment="bottomleft" mime-type="image/png"/>
|
44
|
+
<welcome file="welcome.html" mime-type="text/html"/>
|
45
|
+
<license file="license.html" mime-type="text/html"/>
|
46
|
+
|
47
|
+
<!-- Generated by productbuild - - synthesize -->
|
48
|
+
<pkg-ref id="com.mycorp.myproject"/>
|
49
|
+
<options customize="never" require-scripts="false"/>
|
50
|
+
<choices-outline>
|
51
|
+
<line choice="default">
|
52
|
+
<line choice="com.mycorp.myproject"/>
|
53
|
+
</line>
|
54
|
+
</choices-outline>
|
55
|
+
<choice id="default"/>
|
56
|
+
<choice id="com.mycorp.myproject" visible="false">
|
57
|
+
<pkg-ref id="com.mycorp.myproject"/>
|
58
|
+
</choice>
|
59
|
+
<pkg-ref id="com.mycorp.myproject" version="23.4.2" onConclusion="none">myproject-core.pkg</pkg-ref>
|
60
|
+
</installer-gui-script>
|
61
|
+
EOH
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:expected_distribution_path) { '/var/cache/omnibus/pkg-tmp/mac-pkg/Distribution' }
|
65
|
+
|
66
|
+
let(:productbuild_argv) do
|
67
|
+
%W[
|
68
|
+
productbuild
|
69
|
+
--distribution #{expected_distribution_path}
|
70
|
+
--resources /omnibus/project/root/files/mac_pkg/Resources
|
71
|
+
/home/someuser/omnibus-myproject/pkg/myproject.pkg
|
72
|
+
]
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:pkgbuild_argv) do
|
76
|
+
%w[
|
77
|
+
pkgbuild
|
78
|
+
--identifier com.mycorp.myproject
|
79
|
+
--version 23.4.2
|
80
|
+
--scripts /omnibus/project/root/scripts
|
81
|
+
--root /opt/myproject
|
82
|
+
--install-location /opt/myproject
|
83
|
+
myproject-core.pkg
|
84
|
+
]
|
85
|
+
end
|
86
|
+
|
87
|
+
let(:shellout_opts) do
|
88
|
+
{
|
89
|
+
timeout: 3600,
|
90
|
+
cwd: File.join(package_tmp, 'mac-pkg'),
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
let(:project) do
|
95
|
+
double Omnibus::Project,
|
96
|
+
name: project_name,
|
97
|
+
build_version: '23.4.2',
|
98
|
+
maintainer: "Joe's Software",
|
99
|
+
install_path: '/opt/myproject',
|
100
|
+
package_scripts_path: scripts_path,
|
101
|
+
files_path: files_path,
|
102
|
+
package_dir: package_dir,
|
103
|
+
package_tmp: package_tmp,
|
104
|
+
mac_pkg_identifier: mac_pkg_identifier
|
105
|
+
end
|
106
|
+
|
107
|
+
let(:packager) do
|
108
|
+
Omnibus::Packagers::MacPkg.new(project)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "uses the project's version" do
|
112
|
+
expect(packager.version).to eq(project.build_version)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "uses the project's name" do
|
116
|
+
expect(packager.name).to eq(project.name)
|
117
|
+
end
|
118
|
+
|
119
|
+
it "uses the project's mac_pkg_identifier" do
|
120
|
+
expect(packager.identifier).to eq(mac_pkg_identifier)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "uses the project's install_path as the package root" do
|
124
|
+
expect(packager.pkg_root).to eq(project.install_path)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "uses the project's install_path as the package install location" do
|
128
|
+
expect(packager.install_location).to eq(project.install_path)
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'names the component package PROJECT_NAME-core.pkg' do
|
132
|
+
expect(packager.component_pkg_name).to eq('myproject-core.pkg')
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'names the product package PROJECT_NAME.pkg' do
|
136
|
+
# NOTE: #package_name is used by Project, so it's part of the **PUBLIC**
|
137
|
+
# API.
|
138
|
+
expect(packager.package_name).to eq('myproject.pkg')
|
139
|
+
expect(packager.product_pkg_name).to eq('myproject.pkg')
|
140
|
+
end
|
141
|
+
|
142
|
+
it "use's the project's package_scripts_path" do
|
143
|
+
expect(packager.scripts).to eq(project.package_scripts_path)
|
144
|
+
end
|
145
|
+
|
146
|
+
it "makes a list of required files to generate the 'product' pkg file" do
|
147
|
+
project_file_path = '/omnibus/project/root/files/mac_pkg/Resources'
|
148
|
+
required_files = %w[background.png welcome.html license.html].map do |basename|
|
149
|
+
File.join(project_file_path, basename)
|
150
|
+
end
|
151
|
+
|
152
|
+
expect(packager.required_files).to match_array(required_files)
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'validates that all required files are present' do
|
156
|
+
expected_error_text = <<-E
|
157
|
+
Your omnibus repo is missing the following files required to build Mac
|
158
|
+
packages:
|
159
|
+
* /omnibus/project/root/files/mac_pkg/Resources/background.png
|
160
|
+
* /omnibus/project/root/files/mac_pkg/Resources/license.html
|
161
|
+
* /omnibus/project/root/files/mac_pkg/Resources/welcome.html
|
162
|
+
E
|
163
|
+
# RSpec 2.14.1 doesn't do nice diffs of expected error strings, so do this
|
164
|
+
# the hard way for now.
|
165
|
+
e = nil
|
166
|
+
begin
|
167
|
+
packager.validate_omnibus_project!
|
168
|
+
rescue => e
|
169
|
+
end
|
170
|
+
expect(e).to be_a(Omnibus::MissingMacPkgResource)
|
171
|
+
expect(e.to_s).to eq(expected_error_text)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'clears and recreates the staging dir' do
|
175
|
+
expect(FileUtils).to receive(:rm_rf).with('/var/cache/omnibus/pkg-tmp/mac-pkg')
|
176
|
+
expect(FileUtils).to receive(:mkdir_p).with('/var/cache/omnibus/pkg-tmp/mac-pkg')
|
177
|
+
packager.setup_staging_dir!
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'generates a pkgbuild command' do
|
181
|
+
expect(packager.pkgbuild_command).to eq(pkgbuild_argv)
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'runs pkgbuild' do
|
185
|
+
expected_args = pkgbuild_argv + [shellout_opts]
|
186
|
+
expect(packager).to receive(:shellout!).with(*expected_args)
|
187
|
+
packager.build_component_pkg
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'has a temporary staging location for the distribution file' do
|
191
|
+
expect(packager.staging_dir).to eq('/var/cache/omnibus/pkg-tmp/mac-pkg')
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'generates a Distribution file describing the product package content' do
|
195
|
+
expect(packager.distribution).to eq(expected_distribution_content)
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'generates a productbuild command' do
|
199
|
+
expect(packager.productbuild_command).to eq(productbuild_argv)
|
200
|
+
end
|
201
|
+
|
202
|
+
describe 'building the product package' do
|
203
|
+
|
204
|
+
let(:distribution_file) { StringIO.new }
|
205
|
+
|
206
|
+
before do
|
207
|
+
expect(File).to receive(:open)
|
208
|
+
.with(expected_distribution_path, File::RDWR | File::CREAT | File::EXCL, 0600)
|
209
|
+
.and_yield(distribution_file)
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'writes the distribution file to the staging directory' do
|
213
|
+
packager.generate_distribution
|
214
|
+
expect(distribution_file.string).to eq(expected_distribution_content)
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'generates the distribution and runs productbuild' do
|
218
|
+
expected_shellout_args = productbuild_argv + [shellout_opts]
|
219
|
+
|
220
|
+
expect(packager).to receive(:shellout!).with(*expected_shellout_args)
|
221
|
+
packager.build_product_pkg
|
222
|
+
expect(distribution_file.string).to eq(expected_distribution_content)
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
context "when the mac_pkg_identifier isn't specified by the project" do
|
227
|
+
|
228
|
+
let(:mac_pkg_identifier) { nil }
|
229
|
+
let(:project_name) { 'My $Project' }
|
230
|
+
|
231
|
+
it 'sanitizes the MAINTAINER name' do
|
232
|
+
expect(packager.sanitized_maintainer).to eq('joessoftware')
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'sanitizes the project name' do
|
236
|
+
expect(packager.sanitized_name).to eq('myproject')
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'uses com.example.PROJECT_NAME as the identifier' do
|
240
|
+
expect(packager.identifier).to eq('test.joessoftware.pkg.myproject')
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
context 'when the project has the required Resource files' do
|
246
|
+
|
247
|
+
before do
|
248
|
+
project_file_path = '/omnibus/project/root/files/mac_pkg/Resources'
|
249
|
+
%w[background.png welcome.html license.html].each do |basename|
|
250
|
+
path = File.join(project_file_path, basename)
|
251
|
+
File.stub(:exist?).with(path).and_return(true)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'validates the presence of the required files' do
|
256
|
+
expect(packager.validate_omnibus_project!).to be_true
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright (c) 2014 Noah Kantrowitz
|
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 'spec_helper'
|
19
|
+
|
20
|
+
require 'omnibus/project'
|
21
|
+
|
22
|
+
describe Omnibus::Project do
|
23
|
+
let(:project) do
|
24
|
+
Omnibus::Project.load(project_path('sample'))
|
25
|
+
end
|
26
|
+
|
27
|
+
subject { project }
|
28
|
+
|
29
|
+
describe 'basics' do
|
30
|
+
it 'should return a name' do
|
31
|
+
expect(project.name).to eq('sample')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should return an install path' do
|
35
|
+
expect(project.install_path).to eq('/sample')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should return a maintainer' do
|
39
|
+
expect(project.maintainer).to eq('Sample Devs')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should return a homepage' do
|
43
|
+
expect(project.homepage).to eq('http://example.com/')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should return a build version' do
|
47
|
+
expect(project.build_version).to eq('1.0')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should return a build iteration' do
|
51
|
+
expect(project.build_iteration).to eq('1')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should return an array of files and dirs' do
|
55
|
+
expect(project.extra_package_files).to eq(['/path/to/sample_dir', '/path/to/file.conf'])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#iteration' do
|
60
|
+
let(:fauxhai_options) { Hash.new }
|
61
|
+
around(:each) do |example|
|
62
|
+
data = OHAI.data
|
63
|
+
begin
|
64
|
+
OHAI.data = Mash.new(Fauxhai.mock(fauxhai_options).data)
|
65
|
+
example.run
|
66
|
+
ensure
|
67
|
+
OHAI.data = data
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when on RHEL' do
|
72
|
+
let(:fauxhai_options) { { platform: 'redhat', version: '6.4' } }
|
73
|
+
it 'should return a RHEL iteration' do
|
74
|
+
expect(project.iteration).to eq('1.el6')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when on Debian' do
|
79
|
+
let(:fauxhai_options) { { platform: 'debian', version: '7.2' } }
|
80
|
+
it 'should return a Debian iteration' do
|
81
|
+
expect(project.iteration).to eq('1')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when on FreeBSD' do
|
86
|
+
let(:fauxhai_options) { { platform: 'freebsd', version: '9.1' } }
|
87
|
+
it 'should return a FreeBSD iteration' do
|
88
|
+
expect(project.iteration).to eq('1.freebsd.9.amd64')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when on Windows' do
|
93
|
+
let(:fauxhai_options) { { platform: 'windows', version: '2008R2' } }
|
94
|
+
it 'should return a Windows iteration' do
|
95
|
+
expect(project.iteration).to eq('1.windows')
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'when on OS X' do
|
100
|
+
let(:fauxhai_options) { { platform: 'mac_os_x', version: '10.8.2' } }
|
101
|
+
it 'should return a generic iteration' do
|
102
|
+
expect(project.iteration).to eq('1.mac_os_x.10.8.2')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#overrides' do
|
108
|
+
let(:project) { Omnibus::Project.load(project_path('chefdk')) }
|
109
|
+
|
110
|
+
it 'should set an override for the zlib version' do
|
111
|
+
expect(project.overrides[:zlib][:version]).to eq('1.2.8')
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should access the zlib version through the #override method as well' do
|
115
|
+
expect(project.override(:zlib)[:version]).to eq('1.2.8')
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'should set all the things through #overrides' do
|
119
|
+
project.overrides(thing: { version: '6.6.6' })
|
120
|
+
expect(project.override(:zlib)).to be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should retrieve the things set through #overrides' do
|
124
|
+
project.overrides(thing: { version: '6.6.6' })
|
125
|
+
expect(project.override(:thing)[:version]).to eq('6.6.6')
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should not set other things through setting a single #override' do
|
129
|
+
project.override(:thing, version: '6.6.6')
|
130
|
+
expect(project.override(:zlib)[:version]).to eq('1.2.8')
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should retrieve the things set through #overrides' do
|
134
|
+
project.override(:thing, version: '6.6.6')
|
135
|
+
expect(project.override(:thing)[:version]).to eq('6.6.6')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/spec/s3_cacher_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright (c) 2013
|
2
|
+
# Copyright:: Copyright (c) 2013-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,22 +26,21 @@ describe Omnibus::S3Cache do
|
|
26
26
|
let(:source_a) { double(source: { url: 'a' }) }
|
27
27
|
let(:source_b) { double(source: { url: 'b' }) }
|
28
28
|
let(:source_c) { double(source: {}) }
|
29
|
-
let(:projects)
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
let(:projects) do
|
30
|
+
[
|
31
|
+
double(library: [source_a, source_c]),
|
32
|
+
double(library: [source_c, source_b]),
|
33
|
+
]
|
34
|
+
end
|
33
35
|
let(:software_with_urls) { [source_a, source_b] }
|
34
36
|
|
35
37
|
before do
|
36
|
-
Omnibus.stub(config: double(
|
37
|
-
s3_bucket: 'test', s3_access_key: 'test', s3_secret_key: 'test'
|
38
|
-
}))
|
39
|
-
|
38
|
+
Omnibus.stub(config: double(s3_bucket: 'test', s3_access_key: 'test', s3_secret_key: 'test'))
|
40
39
|
Omnibus.stub(projects: projects)
|
41
40
|
end
|
42
41
|
|
43
42
|
it 'lists all software with urls' do
|
44
|
-
tarball_software.
|
43
|
+
expect(tarball_software).to eq(software_with_urls)
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|