omnibus-sonian 1.2.0.1

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.
Files changed (70) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +5 -0
  5. data/.yardopts +6 -0
  6. data/CHANGELOG.md +96 -0
  7. data/Gemfile +9 -0
  8. data/LICENSE +201 -0
  9. data/NOTICE +9 -0
  10. data/README.md +195 -0
  11. data/Rakefile +7 -0
  12. data/bin/makeself-header.sh +401 -0
  13. data/bin/makeself.sh +407 -0
  14. data/bin/omnibus +11 -0
  15. data/lib/omnibus.rb +304 -0
  16. data/lib/omnibus/artifact.rb +151 -0
  17. data/lib/omnibus/build_version.rb +285 -0
  18. data/lib/omnibus/builder.rb +328 -0
  19. data/lib/omnibus/clean_tasks.rb +30 -0
  20. data/lib/omnibus/cli.rb +35 -0
  21. data/lib/omnibus/cli/application.rb +140 -0
  22. data/lib/omnibus/cli/base.rb +118 -0
  23. data/lib/omnibus/cli/build.rb +62 -0
  24. data/lib/omnibus/cli/cache.rb +60 -0
  25. data/lib/omnibus/cli/release.rb +49 -0
  26. data/lib/omnibus/config.rb +224 -0
  27. data/lib/omnibus/exceptions.rb +143 -0
  28. data/lib/omnibus/fetcher.rb +184 -0
  29. data/lib/omnibus/fetchers.rb +22 -0
  30. data/lib/omnibus/fetchers/git_fetcher.rb +212 -0
  31. data/lib/omnibus/fetchers/net_fetcher.rb +193 -0
  32. data/lib/omnibus/fetchers/path_fetcher.rb +65 -0
  33. data/lib/omnibus/fetchers/s3_cache_fetcher.rb +42 -0
  34. data/lib/omnibus/health_check.rb +356 -0
  35. data/lib/omnibus/library.rb +62 -0
  36. data/lib/omnibus/overrides.rb +69 -0
  37. data/lib/omnibus/package_release.rb +163 -0
  38. data/lib/omnibus/project.rb +715 -0
  39. data/lib/omnibus/reports.rb +99 -0
  40. data/lib/omnibus/s3_cacher.rb +138 -0
  41. data/lib/omnibus/software.rb +441 -0
  42. data/lib/omnibus/templates/Berksfile.erb +3 -0
  43. data/lib/omnibus/templates/Gemfile.erb +4 -0
  44. data/lib/omnibus/templates/README.md.erb +102 -0
  45. data/lib/omnibus/templates/Vagrantfile.erb +95 -0
  46. data/lib/omnibus/templates/gitignore.erb +8 -0
  47. data/lib/omnibus/templates/omnibus.rb.example.erb +5 -0
  48. data/lib/omnibus/templates/package_scripts/makeselfinst.erb +27 -0
  49. data/lib/omnibus/templates/package_scripts/postinst.erb +17 -0
  50. data/lib/omnibus/templates/package_scripts/postrm.erb +9 -0
  51. data/lib/omnibus/templates/project.rb.erb +21 -0
  52. data/lib/omnibus/templates/software/c-example.rb.erb +42 -0
  53. data/lib/omnibus/templates/software/erlang-example.rb.erb +38 -0
  54. data/lib/omnibus/templates/software/ruby-example.rb.erb +24 -0
  55. data/lib/omnibus/util.rb +61 -0
  56. data/lib/omnibus/version.rb +20 -0
  57. data/omnibus.gemspec +34 -0
  58. data/spec/artifact_spec.rb +106 -0
  59. data/spec/build_version_spec.rb +266 -0
  60. data/spec/data/overrides/bad_line.overrides +3 -0
  61. data/spec/data/overrides/good.overrides +5 -0
  62. data/spec/data/overrides/with_dupes.overrides +4 -0
  63. data/spec/data/software/erchef.rb +40 -0
  64. data/spec/fetchers/net_fetcher_spec.rb +16 -0
  65. data/spec/overrides_spec.rb +114 -0
  66. data/spec/package_release_spec.rb +197 -0
  67. data/spec/s3_cacher_spec.rb +47 -0
  68. data/spec/software_spec.rb +85 -0
  69. data/spec/spec_helper.rb +28 -0
  70. metadata +252 -0
@@ -0,0 +1,20 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2012 Opscode, 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
+ module Omnibus
19
+ VERSION = "1.2.0.1"
20
+ end
data/omnibus.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'omnibus/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "omnibus-sonian"
8
+ gem.version = Omnibus::VERSION
9
+ gem.license = "Apache 2.0"
10
+ gem.author = "Opscode"
11
+ gem.email = "info@opscode.com"
12
+ gem.description = "Omnibus helps you build self-installing, full-stack software builds. Sonian build."
13
+ gem.summary = gem.description
14
+ gem.homepage = "https://github.com/opscode/omnibus-ruby"
15
+
16
+ gem.required_ruby_version = ">= 1.9.1"
17
+
18
+ gem.files = `git ls-files`.split($/)
19
+ gem.bindir = "bin"
20
+ gem.executables = %w(omnibus)
21
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
22
+ gem.require_paths = ["lib"]
23
+
24
+ gem.add_dependency "mixlib-shellout", "~> 1.0"
25
+ gem.add_dependency "mixlib-config", "~> 1.1.2"
26
+ gem.add_dependency "ohai", ">= 0.6.12"
27
+ gem.add_dependency "rake", ">= 0.9"
28
+ gem.add_dependency "fpm", "~> 0.4.33"
29
+ gem.add_dependency "uber-s3"
30
+ gem.add_dependency "thor", ">= 0.16.0"
31
+
32
+ gem.add_development_dependency "rspec"
33
+ gem.add_development_dependency "rspec_junit_formatter"
34
+ end
@@ -0,0 +1,106 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2012 Opscode, 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 'omnibus/artifact'
19
+ require 'spec_helper'
20
+
21
+ describe Omnibus::Artifact do
22
+
23
+ let(:path) { "build_os=centos-5,machine_architecture=x86,role=oss-builder/pkg/demoproject-11.4.0-1.el5.x86_64.rpm" }
24
+
25
+ let(:content) { StringIO.new("this is the package content\n") }
26
+
27
+ let(:md5) { "d41d8cd98f00b204e9800998ecf8427e" }
28
+
29
+ let(:sha256) { "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
30
+
31
+ let(:platforms) { [ [ "el", "5", "x86_64" ], [ "sles","11.2","x86_64" ] ] }
32
+
33
+ let(:artifact) { Omnibus::Artifact.new(path, platforms, { :version => "11.4.0-1" }) }
34
+
35
+ it "has the path to the package" do
36
+ artifact.path.should == path
37
+ end
38
+
39
+ it "has a list of platforms the package supports" do
40
+ artifact.platforms.should == platforms
41
+ end
42
+
43
+ it "generates a MD5 of an artifact" do
44
+ File.should_receive(:open).with(path).and_return(content)
45
+ artifact.md5.should == md5
46
+ end
47
+
48
+ it "generates a SHA256 of an artifact" do
49
+ File.should_receive(:open).with(path).and_return(content)
50
+ artifact.sha256.should == sha256
51
+ end
52
+
53
+ it "generates 'flat' metadata" do
54
+ File.should_receive(:open).twice.with(path).and_return(content)
55
+ flat_metadata = artifact.flat_metadata
56
+ flat_metadata["platform"].should == "el"
57
+ flat_metadata["platform_version"].should == "5"
58
+ flat_metadata["arch"].should == "x86_64"
59
+ flat_metadata["version"].should == "11.4.0-1"
60
+ flat_metadata["basename"].should == "demoproject-11.4.0-1.el5.x86_64.rpm"
61
+ flat_metadata["md5"].should == md5
62
+ flat_metadata["sha256"].should == sha256
63
+ end
64
+
65
+ it "adds the package to a release manifest" do
66
+ expected = {
67
+ "el" => {
68
+ "5" => { "x86_64" => { "11.4.0-1" => "/el/5/x86_64/demoproject-11.4.0-1.el5.x86_64.rpm" } }
69
+ },
70
+ "sles" => {
71
+ "11.2" => { "x86_64" => { "11.4.0-1" => "/el/5/x86_64/demoproject-11.4.0-1.el5.x86_64.rpm" } }
72
+ }
73
+ }
74
+
75
+ manifest = artifact.add_to_release_manifest!({})
76
+ manifest.should == expected
77
+ end
78
+
79
+ it "adds the package to a v2 release manifest" do
80
+ File.should_receive(:open).with(path).twice.and_return(content)
81
+ expected = {
82
+ "el" => {
83
+ "5" => { "x86_64" => { "11.4.0-1" => {
84
+ "relpath" => "/el/5/x86_64/demoproject-11.4.0-1.el5.x86_64.rpm",
85
+ "md5" => md5,
86
+ "sha256" => sha256
87
+ }
88
+ }
89
+ }
90
+ },
91
+ "sles" => {
92
+ "11.2" => { "x86_64" => { "11.4.0-1" => {
93
+ "relpath" => "/el/5/x86_64/demoproject-11.4.0-1.el5.x86_64.rpm",
94
+ "md5" => md5,
95
+ "sha256" => sha256
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ v2_manifest = artifact.add_to_v2_release_manifest!({})
102
+ v2_manifest.should == expected
103
+ end
104
+
105
+ end
106
+
@@ -0,0 +1,266 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2012 Opscode, 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 'omnibus/build_version'
19
+ require 'spec_helper'
20
+
21
+ describe Omnibus::BuildVersion do
22
+
23
+ let(:git_describe){ "11.0.0-alpha1-207-g694b062" }
24
+ let(:valid_semver_regex){/^\d+\.\d+\.\d+(\-[\dA-Za-z\-\.]+)?(\+[\dA-Za-z\-\.]+)?$/}
25
+ let(:valid_git_describe_regex){/^\d+\.\d+\.\d+(\-[A-Za-z0-9\-\.]+)?(\-\d+\-g[0-9a-f]+)?$/}
26
+
27
+ subject(:build_version){ Omnibus::BuildVersion.new }
28
+
29
+ before :each do
30
+ ENV['BUILD_ID'] = nil
31
+ ENV['OMNIBUS_APPEND_TIMESTAMP'] = nil
32
+ Omnibus::BuildVersion.any_instance.stub(:shellout)
33
+ .and_return(mock("ouput",
34
+ :stdout => git_describe,
35
+ :exitstatus => 0))
36
+ end
37
+
38
+ describe "git describe parsing" do
39
+
40
+ # we prefer our git tags to be SemVer compliant
41
+
42
+ # release version
43
+ context "11.0.1" do
44
+ let(:git_describe){ "11.0.1" }
45
+ its(:version_tag){ should == "11.0.1" }
46
+ its(:prerelease_tag){ should be_nil }
47
+ its(:git_sha_tag){ should be_nil }
48
+ its(:commits_since_tag){ should == 0 }
49
+ its(:development_version?){ should be_true }
50
+ its(:prerelease_version?){ should be_false }
51
+ end
52
+
53
+ # SemVer compliant prerelease version
54
+ context "11.0.0-alpha.2" do
55
+ let(:git_describe){ "11.0.0-alpha.2" }
56
+ its(:version_tag){ should == "11.0.0" }
57
+ its(:prerelease_tag){ should == "alpha.2" }
58
+ its(:git_sha_tag){ should be_nil }
59
+ its(:commits_since_tag){ should == 0 }
60
+ its(:development_version?){ should be_false }
61
+ its(:prerelease_version?){ should be_true }
62
+ end
63
+
64
+ # full git describe string
65
+ context "11.0.0-alpha.3-59-gf55b180" do
66
+ let(:git_describe){ "11.0.0-alpha.3-59-gf55b180" }
67
+ its(:version_tag){ should == "11.0.0" }
68
+ its(:prerelease_tag){ should == "alpha.3" }
69
+ its(:git_sha_tag){ should == "f55b180" }
70
+ its(:commits_since_tag){ should == 59 }
71
+ its(:development_version?){ should be_false }
72
+ its(:prerelease_version?){ should be_true }
73
+ end
74
+
75
+ # Degenerate git tag formats
76
+
77
+ # RubyGems compliant git tag
78
+ context "10.16.0.rc.0" do
79
+ let(:git_describe){ "10.16.0.rc.0" }
80
+ its(:version_tag){ should == "10.16.0" }
81
+ its(:prerelease_tag){ should == "rc.0" }
82
+ its(:git_sha_tag){ should be_nil }
83
+ its(:commits_since_tag){ should == 0 }
84
+ its(:development_version?){ should be_false }
85
+ its(:prerelease_version?){ should be_true }
86
+ end
87
+
88
+ # dash seperated prerelease
89
+ context "11.0.0-alpha-2" do
90
+ let(:git_describe){ "11.0.0-alpha-2" }
91
+ its(:version_tag){ should == "11.0.0" }
92
+ its(:prerelease_tag){ should == "alpha-2" }
93
+ its(:git_sha_tag){ should be_nil }
94
+ its(:commits_since_tag){ should == 0 }
95
+ its(:development_version?){ should be_false }
96
+ its(:prerelease_version?){ should be_true }
97
+ end
98
+
99
+ # dash seperated prerelease full git describe string
100
+ context "11.0.0-alpha-2-59-gf55b180" do
101
+ let(:git_describe){ "11.0.0-alpha-2-59-gf55b180" }
102
+ its(:version_tag){ should == "11.0.0" }
103
+ its(:prerelease_tag){ should == "alpha-2" }
104
+ its(:git_sha_tag){ should == "f55b180" }
105
+ its(:commits_since_tag){ should == 59 }
106
+ its(:development_version?){ should be_false }
107
+ its(:prerelease_version?){ should be_true }
108
+ end
109
+
110
+ # WTF git tag
111
+ context "11.0.0-alpha2" do
112
+ let(:git_describe){ "11.0.0-alpha2" }
113
+ its(:version_tag){ should == "11.0.0" }
114
+ its(:prerelease_tag){ should == "alpha2" }
115
+ its(:git_sha_tag){ should be_nil }
116
+ its(:commits_since_tag){ should == 0 }
117
+ its(:development_version?){ should be_false }
118
+ its(:prerelease_version?){ should be_true }
119
+ end
120
+ end
121
+
122
+ describe "semver output" do
123
+ let(:today_string){ Time.now.utc.strftime("%Y%m%d") }
124
+
125
+ it "generates a valid semver version" do
126
+ build_version.semver.should =~ valid_semver_regex
127
+ end
128
+
129
+ it "generates a version matching format 'MAJOR.MINOR.PATCH-PRERELEASE+TIMESTAMP.git.COMMITS_SINCE.GIT_SHA'" do
130
+ build_version.semver.should =~ /11.0.0-alpha1\+#{today_string}[0-9]+.git.207.694b062/
131
+ end
132
+
133
+ it "uses ENV['BUILD_ID'] to generate timestamp if set" do
134
+ ENV['BUILD_ID'] = "2012-12-25_16-41-40"
135
+ build_version.semver.should == "11.0.0-alpha1+20121225164140.git.207.694b062"
136
+ end
137
+
138
+ it "fails on invalid ENV['BUILD_ID'] values" do
139
+ ENV['BUILD_ID'] = "AAAA"
140
+ expect { build_version.semver }.to raise_error(ArgumentError)
141
+ end
142
+
143
+ context "prerelease version with dashes" do
144
+ let(:git_describe){ "11.0.0-alpha-3-207-g694b062" }
145
+
146
+ it "converts all dashes to dots" do
147
+ build_version.semver.should =~ /11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/
148
+ end
149
+ end
150
+
151
+ context "exact version" do
152
+ let(:git_describe){ "11.0.0-alpha2" }
153
+
154
+ it "appends a timestamp with no git info" do
155
+ build_version.semver.should =~ /11.0.0-alpha2\+#{today_string}[0-9]+/
156
+ end
157
+ end
158
+
159
+ describe "appending a timestamp" do
160
+ let(:git_describe){ "11.0.0-alpha-3-207-g694b062" }
161
+
162
+ it "appends a timestamp by default" do
163
+ build_version.semver.should =~ /11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/
164
+ end
165
+
166
+ describe "ENV['OMNIBUS_APPEND_TIMESTAMP'] is set" do
167
+ ["true","t","yes","y",1].each do |truthy|
168
+ context "to #{truthy}" do
169
+ before { ENV['OMNIBUS_APPEND_TIMESTAMP'] = truthy.to_s }
170
+ it "appends a timestamp" do
171
+ build_version.semver.should =~ /11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/
172
+ end
173
+ end
174
+ end
175
+
176
+ ["false","f","no","n",0].each do |falsey|
177
+ context "to #{falsey}" do
178
+ before { ENV['OMNIBUS_APPEND_TIMESTAMP'] = falsey.to_s }
179
+ it "does not append a timestamp" do
180
+ build_version.semver.should =~ /11.0.0-alpha.3\+git.207.694b062/
181
+ end
182
+ end
183
+ end
184
+ end
185
+
186
+ describe "Omnibus::Config.append_timestamp is set" do
187
+ context "is true" do
188
+ before { Omnibus::Config.append_timestamp(true) }
189
+ it "appends a timestamp" do
190
+ build_version.semver.should =~ /11.0.0-alpha.3\+#{today_string}[0-9]+.git.207.694b062/
191
+ end
192
+ end
193
+
194
+ context "is false" do
195
+ before { Omnibus::Config.append_timestamp(false) }
196
+ it "does not append a timestamp" do
197
+ build_version.semver.should =~ /11.0.0-alpha.3\+git.207.694b062/
198
+ end
199
+ end
200
+ end
201
+
202
+ describe "both are set" do
203
+ before do
204
+ ENV['OMNIBUS_APPEND_TIMESTAMP'] = "false"
205
+ Omnibus::Config.append_timestamp(true)
206
+ end
207
+ it "prefers the value from ENV['OMNIBUS_APPEND_TIMESTAMP']" do
208
+ build_version.semver.should =~ /11.0.0-alpha.3\+git.207.694b062/
209
+ end
210
+ end
211
+ end
212
+ end
213
+
214
+ describe "git describe output" do
215
+ it "generates a valid git describe version" do
216
+ build_version.git_describe.should =~ valid_git_describe_regex
217
+ end
218
+
219
+ it "generates a version matching format 'MAJOR.MINOR.PATCH-PRELEASE.COMMITS_SINCE-gGIT_SHA'" do
220
+ build_version.git_describe.should == git_describe
221
+ end
222
+ end
223
+
224
+ describe "deprecated full output" do
225
+ it "generates a valid git describe version" do
226
+ Omnibus::BuildVersion.full.should =~ valid_git_describe_regex
227
+ end
228
+
229
+ it "outputs a deprecation message" do
230
+ Omnibus::BuildVersion.should_receive(:puts).with(/is deprecated/)
231
+ Omnibus::BuildVersion.full
232
+ end
233
+ end
234
+
235
+ describe "`git describe` command failure" do
236
+ before do
237
+ stderr =<<-STDERR
238
+ fatal: No tags can describe '809ea1afcce67e1148c1bf0822d40a7ef12c380e'.
239
+ Try --always, or create some tags.
240
+ STDERR
241
+ build_version.stub(:shellout)
242
+ .and_return(mock("ouput",
243
+ :stderr => stderr,
244
+ :exitstatus => 128))
245
+ end
246
+ it "sets the version to 0.0.0" do
247
+ build_version.git_describe.should eq("0.0.0")
248
+ end
249
+ end
250
+
251
+ describe "#initialize `path` parameter" do
252
+ let(:path) { "/some/fake/path" }
253
+ subject(:build_version){ Omnibus::BuildVersion.new(path) }
254
+
255
+ it "runs `git describe` at an alternate path" do
256
+ build_version.should_receive(:shellout)
257
+ .with("git describe",
258
+ {:live_stream => nil,
259
+ :cwd => path})
260
+ .and_return(mock("ouput",
261
+ :stdout => git_describe,
262
+ :exitstatus => 0))
263
+ build_version.git_describe
264
+ end
265
+ end
266
+ end
@@ -0,0 +1,3 @@
1
+ foo 1.0.0
2
+ THIS IS A BAD LINE
3
+ bar 1.0.0
@@ -0,0 +1,5 @@
1
+ foo 1.2.3
2
+ bar 0.0.1
3
+ baz deadbeefdeadbeefdeadbeefdeadbeef
4
+ spunky master
5
+ monkey release
@@ -0,0 +1,4 @@
1
+ foo 1.0.0
2
+ erchef 1.0.0
3
+ bar 1.0.0
4
+ erchef 2.0.0