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,7 +19,6 @@ require 'time'
|
|
19
19
|
require 'omnibus/util'
|
20
20
|
|
21
21
|
module Omnibus
|
22
|
-
|
23
22
|
# Provides methods for generating Omnibus project build version
|
24
23
|
# strings automatically from Git repository information.
|
25
24
|
#
|
@@ -37,18 +36,18 @@ module Omnibus
|
|
37
36
|
#
|
38
37
|
# @see Omnibus::BuildVersion#semver
|
39
38
|
# @see Time#strftime
|
40
|
-
TIMESTAMP_FORMAT =
|
39
|
+
TIMESTAMP_FORMAT = '%Y%m%d%H%M%S'
|
41
40
|
|
42
41
|
# @deprecated Use {#semver} or {#git_describe} instead
|
43
42
|
def self.full
|
44
|
-
puts "#{
|
43
|
+
puts "#{name}.full is deprecated. Use #{name}.new.semver or #{name}.new.git_describe."
|
45
44
|
Omnibus::BuildVersion.new.git_describe
|
46
45
|
end
|
47
46
|
|
48
47
|
# Create a new BuildVersion
|
49
48
|
#
|
50
49
|
# @param [String] path Path from which to read git version information
|
51
|
-
def initialize(path=Omnibus.root)
|
50
|
+
def initialize(path = Omnibus.root)
|
52
51
|
@path = path
|
53
52
|
end
|
54
53
|
|
@@ -87,8 +86,8 @@ module Omnibus
|
|
87
86
|
if prerelease_version?
|
88
87
|
# ensure all dashes are dots per precedence rules (#12) in Semver
|
89
88
|
# 2.0.0-rc.1
|
90
|
-
prerelease = prerelease_tag.gsub(
|
91
|
-
build_tag <<
|
89
|
+
prerelease = prerelease_tag.gsub('-', '.')
|
90
|
+
build_tag << '-' << prerelease
|
92
91
|
end
|
93
92
|
|
94
93
|
# BUILD VERSION
|
@@ -107,11 +106,11 @@ module Omnibus
|
|
107
106
|
#
|
108
107
|
# format: git.COMMITS_SINCE_TAG.GIT_SHA example: git.207.694b062
|
109
108
|
unless commits_since_tag == 0
|
110
|
-
build_version_items << [
|
109
|
+
build_version_items << ['git', commits_since_tag, git_sha_tag].join('.')
|
111
110
|
end
|
112
111
|
|
113
112
|
unless build_version_items.empty?
|
114
|
-
build_tag <<
|
113
|
+
build_tag << '+' << build_version_items.join('.')
|
115
114
|
end
|
116
115
|
|
117
116
|
build_tag
|
@@ -130,17 +129,15 @@ module Omnibus
|
|
130
129
|
# @return [String]
|
131
130
|
def git_describe
|
132
131
|
@git_describe ||= begin
|
133
|
-
git_cmd =
|
134
|
-
cmd = shellout(git_cmd,
|
135
|
-
:live_stream => nil,
|
136
|
-
:cwd => @path)
|
132
|
+
git_cmd = 'git describe'
|
133
|
+
cmd = shellout(git_cmd, live_stream: nil, cwd: @path)
|
137
134
|
if cmd.exitstatus == 0
|
138
135
|
cmd.stdout.chomp
|
139
136
|
else
|
140
|
-
msg =
|
141
|
-
msg <<
|
137
|
+
msg = 'Could not extract version information from `git describe`. '
|
138
|
+
msg << 'Setting version to 0.0.0'
|
142
139
|
puts msg
|
143
|
-
|
140
|
+
'0.0.0'
|
144
141
|
end
|
145
142
|
end
|
146
143
|
end
|
@@ -161,7 +158,7 @@ module Omnibus
|
|
161
158
|
#
|
162
159
|
# @return [String]
|
163
160
|
def version_tag
|
164
|
-
version_composition.join(
|
161
|
+
version_composition.join('.')
|
165
162
|
end
|
166
163
|
|
167
164
|
# Return a prerelease tag string (if it exists), as extracted from {#git_describe}.
|
@@ -245,11 +242,11 @@ module Omnibus
|
|
245
242
|
@build_start_time ||= begin
|
246
243
|
if !ENV['BUILD_ID'].nil?
|
247
244
|
begin
|
248
|
-
Time.strptime(ENV['BUILD_ID'],
|
245
|
+
Time.strptime(ENV['BUILD_ID'], '%Y-%m-%d_%H-%M-%S')
|
249
246
|
rescue ArgumentError
|
250
|
-
error_message =
|
251
|
-
error_message <<
|
252
|
-
error_message <<
|
247
|
+
error_message = 'BUILD_ID environment variable '
|
248
|
+
error_message << 'should be in YYYY-MM-DD_hh-mm-ss '
|
249
|
+
error_message << 'format.'
|
253
250
|
raise ArgumentError, error_message
|
254
251
|
end
|
255
252
|
else
|
data/lib/omnibus/builder.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");
|
@@ -21,7 +21,6 @@ require 'ostruct'
|
|
21
21
|
|
22
22
|
module Omnibus
|
23
23
|
class Builder
|
24
|
-
|
25
24
|
# Proxies method calls to either a Builder object or the Software that the
|
26
25
|
# builder belongs to. Provides compatibility with our DSL where we never
|
27
26
|
# yield objects to blocks and hopefully hides some of the confusion that
|
@@ -29,8 +28,6 @@ module Omnibus
|
|
29
28
|
class DSLProxy
|
30
29
|
extend Forwardable
|
31
30
|
|
32
|
-
# @todo def_delegators :@builder, :patch, :command, :ruby, ...
|
33
|
-
|
34
31
|
def_delegator :@builder, :patch
|
35
32
|
def_delegator :@builder, :erb
|
36
33
|
def_delegator :@builder, :command
|
@@ -65,13 +62,10 @@ module Omnibus
|
|
65
62
|
super
|
66
63
|
end
|
67
64
|
end
|
68
|
-
|
69
65
|
end
|
70
66
|
|
71
|
-
|
72
67
|
# @todo code duplication with {Fetcher::ErrorReporter}
|
73
68
|
class ErrorReporter
|
74
|
-
|
75
69
|
# @todo fetcher isn't even used
|
76
70
|
def initialize(error, fetcher)
|
77
71
|
@error, @fetcher = error, fetcher
|
@@ -83,28 +77,29 @@ module Omnibus
|
|
83
77
|
end
|
84
78
|
|
85
79
|
def explain(why)
|
86
|
-
$stderr.puts
|
80
|
+
$stderr.puts '* ' * 40
|
87
81
|
$stderr.puts why
|
88
|
-
$stderr.puts
|
82
|
+
$stderr.puts 'Exception:'
|
89
83
|
$stderr.puts indent("#{e.class}: #{e.message.strip}", 2)
|
90
|
-
Array(e.backtrace).each {|l| $stderr.puts indent(l, 4) }
|
91
|
-
$stderr.puts
|
84
|
+
Array(e.backtrace).each { |l| $stderr.puts indent(l, 4) }
|
85
|
+
$stderr.puts '* ' * 40
|
92
86
|
end
|
93
87
|
|
94
88
|
private
|
95
89
|
|
96
90
|
def indent(string, n)
|
97
|
-
string.split("\n").map {|l|
|
91
|
+
string.split("\n").map { |l| ' '.rjust(n) << l }.join("\n")
|
98
92
|
end
|
99
|
-
|
100
93
|
end
|
101
94
|
|
102
95
|
# @todo Look at using Bundler.with_clean_env{ ... } instead
|
103
|
-
BUNDLER_BUSTER = {
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
96
|
+
BUNDLER_BUSTER = {
|
97
|
+
'RUBYOPT' => nil,
|
98
|
+
'BUNDLE_BIN_PATH' => nil,
|
99
|
+
'BUNDLE_GEMFILE' => nil,
|
100
|
+
'GEM_PATH' => nil,
|
101
|
+
'GEM_HOME' => nil,
|
102
|
+
}
|
108
103
|
|
109
104
|
attr_reader :build_commands
|
110
105
|
|
@@ -135,19 +130,19 @@ module Omnibus
|
|
135
130
|
File.expand_path("#{root}/config/patches/#{name}/#{args[:source]}")
|
136
131
|
end
|
137
132
|
|
138
|
-
source = candidate_paths.find{|path| File.exists?(path) }
|
133
|
+
source = candidate_paths.find { |path| File.exists?(path) }
|
139
134
|
|
140
135
|
unless source
|
141
|
-
|
136
|
+
fail MissingPatch.new(args[:source], candidate_paths)
|
142
137
|
end
|
143
138
|
|
144
139
|
plevel = args[:plevel] || 1
|
145
|
-
if args[:target]
|
140
|
+
if args[:target]
|
146
141
|
target = File.expand_path("#{project_dir}/#{args[:target]}")
|
147
|
-
@build_commands <<
|
142
|
+
@build_commands <<
|
148
143
|
"cat #{source} | patch -p#{plevel} #{target}"
|
149
144
|
else
|
150
|
-
@build_commands <<
|
145
|
+
@build_commands <<
|
151
146
|
"patch -d #{project_dir} -p#{plevel} -i #{source}"
|
152
147
|
end
|
153
148
|
end
|
@@ -158,12 +153,12 @@ module Omnibus
|
|
158
153
|
source_path = File.expand_path("#{Omnibus.project_root}/config/templates/#{name}/#{args[:source]}")
|
159
154
|
|
160
155
|
unless File.exists?(source_path)
|
161
|
-
|
156
|
+
fail MissingTemplate.new(args[:source], "#{Omnibus.project_root}/config/templates/#{name}")
|
162
157
|
end
|
163
158
|
|
164
159
|
block do
|
165
|
-
template = ERB.new(File.new(source_path).read, nil,
|
166
|
-
File.open(args[:dest],
|
160
|
+
template = ERB.new(File.new(source_path).read, nil, '%')
|
161
|
+
File.open(args[:dest], 'w') do |file|
|
167
162
|
file.write(template.result(OpenStruct.new(args[:vars]).instance_eval { binding }))
|
168
163
|
end
|
169
164
|
|
@@ -212,6 +207,8 @@ module Omnibus
|
|
212
207
|
|
213
208
|
def build
|
214
209
|
log "building #{name}"
|
210
|
+
log "version overridden from #{@software.default_version} to " \
|
211
|
+
"#{@software.version}" if @software.overridden?
|
215
212
|
time_it("#{name} build") do
|
216
213
|
@build_commands.each do |cmd|
|
217
214
|
execute(cmd)
|
@@ -248,8 +245,8 @@ module Omnibus
|
|
248
245
|
shell = nil
|
249
246
|
cmd_args = Array(cmd)
|
250
247
|
options = {
|
251
|
-
:
|
252
|
-
:
|
248
|
+
cwd: project_dir,
|
249
|
+
timeout: 5400,
|
253
250
|
}
|
254
251
|
options[:live_stream] = STDOUT if ENV['DEBUG']
|
255
252
|
if cmd_args.last.is_a? Hash
|
@@ -265,7 +262,7 @@ module Omnibus
|
|
265
262
|
log "Executing: `#{cmd_string}` with #{cmd_opts_for_display}"
|
266
263
|
|
267
264
|
shell = Mixlib::ShellOut.new(*cmd)
|
268
|
-
shell.environment[
|
265
|
+
shell.environment['HOME'] = '/tmp' unless ENV['HOME']
|
269
266
|
|
270
267
|
cmd_name = cmd_string.split(/\s+/).first
|
271
268
|
time_it("#{cmd_name} command") do
|
@@ -281,8 +278,8 @@ module Omnibus
|
|
281
278
|
ErrorReporter.new(e, self).explain("Failed to build #{name} while running `#{cmd_string}` with #{cmd_opts_for_display}")
|
282
279
|
raise
|
283
280
|
else
|
284
|
-
time_to_sleep = 5 * (2
|
285
|
-
retries +=1
|
281
|
+
time_to_sleep = 5 * (2**retries)
|
282
|
+
retries += 1
|
286
283
|
log "Failed to execute cmd #{cmd} #{retries} time(s). Retrying in #{time_to_sleep}s."
|
287
284
|
sleep(time_to_sleep)
|
288
285
|
retry
|
@@ -297,7 +294,7 @@ module Omnibus
|
|
297
294
|
# command as a string w/ opts
|
298
295
|
["#{str} #{cmd_args.first}", cmd_args.last]
|
299
296
|
elsif cmd_args.size == 0
|
300
|
-
|
297
|
+
fail ArgumentError, "I don't even"
|
301
298
|
else
|
302
299
|
# cmd given as argv array
|
303
300
|
cmd_args.dup.unshift(str)
|
@@ -311,11 +308,10 @@ module Omnibus
|
|
311
308
|
cmd_opts[:env] = cmd_opts[:env] ? BUNDLER_BUSTER.merge(cmd_opts[:env]) : BUNDLER_BUSTER
|
312
309
|
cmd_args << cmd_opts
|
313
310
|
else
|
314
|
-
cmd_args << {:
|
311
|
+
cmd_args << { env: BUNDLER_BUSTER }
|
315
312
|
end
|
316
313
|
end
|
317
314
|
|
318
|
-
|
319
315
|
def time_it(what)
|
320
316
|
start = Time.now
|
321
317
|
yield
|
@@ -331,29 +327,22 @@ module Omnibus
|
|
331
327
|
# Convert a hash to a string in the form `key=value`. It should work with
|
332
328
|
# whatever input is given but is designed to make the options to ShellOut
|
333
329
|
# look nice.
|
334
|
-
def to_kv_str(hash, join_str=
|
335
|
-
hash.
|
330
|
+
def to_kv_str(hash, join_str = ',')
|
331
|
+
hash.reduce([]) do |kv_pair_strs, (k, v)|
|
336
332
|
val_str = case v
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
333
|
+
when Hash
|
334
|
+
%Q["#{to_kv_str(v, " ") }"]
|
335
|
+
else
|
336
|
+
v.to_s
|
337
|
+
end
|
342
338
|
kv_pair_strs << "#{k}=#{val_str}"
|
343
339
|
end.join(join_str)
|
344
340
|
end
|
345
|
-
|
346
341
|
end
|
347
342
|
|
348
|
-
# @todo What's the point of this class? Can we not just detect that
|
349
|
-
# there are no commands in {Omnibus::Builder#build} and output the
|
350
|
-
# appropriate message? Seems like a lot of extra ceremony.
|
351
343
|
class NullBuilder < Builder
|
352
|
-
|
353
344
|
def build
|
354
345
|
log "Nothing to build for #{name}"
|
355
346
|
end
|
356
|
-
|
357
347
|
end
|
358
|
-
|
359
348
|
end
|
data/lib/omnibus/clean_tasks.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");
|
@@ -23,8 +23,6 @@
|
|
23
23
|
|
24
24
|
require 'rake/clean'
|
25
25
|
|
26
|
-
::CLEAN.include("#{Omnibus.config.source_dir}/**/*",
|
27
|
-
"#{Omnibus.config.build_dir}/**/*")
|
26
|
+
::CLEAN.include("#{Omnibus.config.source_dir}/**/*", "#{Omnibus.config.build_dir}/**/*")
|
28
27
|
|
29
|
-
::CLOBBER.include("#{Omnibus.config.cache_dir}/**/*",
|
30
|
-
"#{Omnibus.config.package_dir}/**/*")
|
28
|
+
::CLOBBER.include("#{Omnibus.config.cache_dir}/**/*", "#{Omnibus.config.package_dir}/**/*")
|
@@ -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");
|
@@ -24,17 +24,16 @@ require 'omnibus/cli/release'
|
|
24
24
|
module Omnibus
|
25
25
|
module CLI
|
26
26
|
class Application < Base
|
27
|
-
|
28
27
|
method_option :purge,
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
type: :boolean,
|
29
|
+
default: false,
|
30
|
+
desc: 'Remove ALL files generated during the build (including packages).'
|
32
31
|
method_option :path,
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
desc
|
32
|
+
aliases: [:p],
|
33
|
+
type: :string,
|
34
|
+
default: Dir.pwd,
|
35
|
+
desc: 'Path to the Omnibus project root.'
|
36
|
+
desc 'clean PROJECT', 'Remove temporary files generated during the build process.'
|
38
37
|
def clean(project_name)
|
39
38
|
project = load_project!(project_name)
|
40
39
|
|
@@ -49,45 +48,42 @@ module Omnibus
|
|
49
48
|
end
|
50
49
|
|
51
50
|
deletion_list.flatten!
|
52
|
-
deletion_list.each{|f| remove_file(f) }
|
51
|
+
deletion_list.each { |f| remove_file(f) }
|
53
52
|
end
|
54
53
|
|
55
|
-
desc
|
54
|
+
desc 'project PROJECT', 'Creates a skeletal Omnibus project'
|
56
55
|
def project(name)
|
57
|
-
name = name.chomp(
|
56
|
+
name = name.chomp('/') # remove trailing slash if present
|
58
57
|
target = File.join(Dir.pwd, "omnibus-#{name}")
|
59
|
-
install_path = File.join(
|
58
|
+
install_path = File.join('/opt', name)
|
60
59
|
opts = {
|
61
|
-
:
|
62
|
-
:
|
60
|
+
name: name,
|
61
|
+
install_path: install_path,
|
63
62
|
}
|
64
63
|
|
65
64
|
# core project files
|
66
|
-
template(File.join(
|
67
|
-
template(File.join(
|
68
|
-
template(File.join(
|
69
|
-
template(File.join(
|
65
|
+
template(File.join('Gemfile.erb'), File.join(target, 'Gemfile'), opts)
|
66
|
+
template(File.join('gitignore.erb'), File.join(target, '.gitignore'), opts)
|
67
|
+
template(File.join('README.md.erb'), File.join(target, 'README.md'), opts)
|
68
|
+
template(File.join('omnibus.rb.example.erb'), File.join(target, 'omnibus.rb.example'), opts)
|
70
69
|
|
71
70
|
# project definition
|
72
|
-
template(File.join(
|
71
|
+
template(File.join('project.rb.erb'), File.join(target, 'config', 'projects', "#{name}.rb"), opts)
|
73
72
|
|
74
73
|
# example software definitions
|
75
|
-
config_software = File.join(target,
|
76
|
-
template(File.join(
|
77
|
-
|
78
|
-
template(File.join(
|
79
|
-
File.join(config_software, "erlang-example.rb"), opts)
|
80
|
-
template(File.join("software", "ruby-example.rb.erb"),
|
81
|
-
File.join(config_software, "ruby-example.rb"), opts)
|
74
|
+
config_software = File.join(target, 'config', 'software')
|
75
|
+
template(File.join('software', 'c-example.rb.erb'), File.join(config_software, 'c-example.rb'), opts)
|
76
|
+
template(File.join('software', 'erlang-example.rb.erb'), File.join(config_software, 'erlang-example.rb'), opts)
|
77
|
+
template(File.join('software', 'ruby-example.rb.erb'), File.join(config_software, 'ruby-example.rb'), opts)
|
82
78
|
|
83
79
|
# Vagrant build lab
|
84
|
-
template(File.join(
|
85
|
-
template(File.join(
|
80
|
+
template(File.join('Berksfile.erb'), File.join(target, 'Berksfile'), opts)
|
81
|
+
template(File.join('Vagrantfile.erb'), File.join(target, 'Vagrantfile'), opts)
|
86
82
|
|
87
83
|
# render out stub packge scripts
|
88
84
|
%w{ makeselfinst preinst prerm postinst postrm }.each do |package_script|
|
89
|
-
script_path = File.join(target,
|
90
|
-
template_path = File.join(
|
85
|
+
script_path = File.join(target, 'package-scripts', name, package_script)
|
86
|
+
template_path = File.join('package_scripts', "#{package_script}.erb")
|
91
87
|
# render the package script
|
92
88
|
template(template_path, script_path, opts)
|
93
89
|
# ensure the package script is executable
|
@@ -95,7 +91,7 @@ module Omnibus
|
|
95
91
|
end
|
96
92
|
end
|
97
93
|
|
98
|
-
desc
|
94
|
+
desc 'version', 'Display version information'
|
99
95
|
def version
|
100
96
|
say("Omnibus: #{Omnibus::VERSION}", :yellow)
|
101
97
|
end
|
@@ -104,14 +100,14 @@ module Omnibus
|
|
104
100
|
# Subcommands
|
105
101
|
###########################################################################
|
106
102
|
|
107
|
-
desc
|
108
|
-
subcommand
|
103
|
+
desc 'build [COMMAND]', 'Perform build-related tasks'
|
104
|
+
subcommand 'build', Omnibus::CLI::Build
|
109
105
|
|
110
|
-
desc
|
111
|
-
subcommand
|
106
|
+
desc 'cache [COMMAND]', 'Perform cache management tasks'
|
107
|
+
subcommand 'cache', Omnibus::CLI::Cache
|
112
108
|
|
113
|
-
desc
|
114
|
-
subcommand
|
109
|
+
desc 'release [COMMAND]', 'Perform release tasks'
|
110
|
+
subcommand 'release', Omnibus::CLI::Release
|
115
111
|
|
116
112
|
###########################################################################
|
117
113
|
# Class Methods
|
@@ -119,22 +115,19 @@ module Omnibus
|
|
119
115
|
|
120
116
|
# Override start so we can catch and process any exceptions bubbling up
|
121
117
|
def self.start(*args)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
error_msg << "\n\nOriginal Backtrace:\n\n\t#{e.original.backtrace.join("\n\t")}"
|
131
|
-
end
|
132
|
-
# TODO - we need a proper UI class
|
133
|
-
Thor::Base.shell.new.say(error_msg, :red)
|
134
|
-
exit 1
|
118
|
+
super
|
119
|
+
rescue => e
|
120
|
+
error_msg = 'Something went wrong...the Omnibus just ran off the road!'
|
121
|
+
error_msg << "\n\nError raised was:\n\n\t#{$ERROR_INFO}"
|
122
|
+
error_msg << "\n\nBacktrace:\n\n\t#{e.backtrace.join("\n\t") }"
|
123
|
+
if e.respond_to?(:original) && e.original
|
124
|
+
error_msg << "\n\nOriginal Error:\n\n\t#{e.original}"
|
125
|
+
error_msg << "\n\nOriginal Backtrace:\n\n\t#{e.original.backtrace.join("\n\t") }"
|
135
126
|
end
|
127
|
+
# TODO: we need a proper UI class
|
128
|
+
Thor::Base.shell.new.say(error_msg, :red)
|
129
|
+
exit 1
|
136
130
|
end
|
137
|
-
|
138
131
|
end
|
139
132
|
end
|
140
133
|
end
|
data/lib/omnibus/cli/base.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");
|
@@ -24,20 +24,21 @@ module Omnibus
|
|
24
24
|
include Thor::Actions
|
25
25
|
|
26
26
|
class_option :config,
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
aliases: [:c],
|
28
|
+
type: :string,
|
29
|
+
default: File.join(Dir.pwd, Omnibus::DEFAULT_CONFIG_FILENAME),
|
30
|
+
desc: 'Path to the Omnibus configuration file to use.'
|
31
31
|
|
32
32
|
def initialize(args, options, config)
|
33
33
|
super(args, options, config)
|
34
34
|
$stdout.sync = true
|
35
35
|
|
36
|
-
# Don't try to initialize the Omnibus project for help commands
|
36
|
+
# Don't try to initialize the Omnibus project for help commands.#
|
37
|
+
# current_task renamed to current_command in Thor 0.18.0
|
37
38
|
current_command = config[:current_command] ? config[:current_command].name : config[:current_task].name
|
38
|
-
return if current_command ==
|
39
|
+
return if current_command == 'help'
|
39
40
|
|
40
|
-
if config = @options[:config]
|
41
|
+
if (config = @options[:config])
|
41
42
|
if config && File.exist?(@options[:config])
|
42
43
|
say("Using Omnibus configuration file #{config}", :green)
|
43
44
|
Omnibus.load_configuration(config)
|
@@ -46,24 +47,23 @@ module Omnibus
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
if path = @options[:path]
|
50
|
+
if (path = @options[:path])
|
50
51
|
# TODO: merge in all relevant CLI options here, as they should
|
51
52
|
# override anything from a configuration file.
|
52
53
|
Omnibus::Config.project_root(path)
|
53
54
|
Omnibus::Config.append_timestamp(@options[:timestamp]) if @options.key?('timestamp')
|
54
55
|
|
55
56
|
unless Omnibus.project_files.any?
|
56
|
-
|
57
|
+
fail Omnibus::CLI::Error, "Given path '#{path}' does not appear to be a valid Omnibus project root."
|
57
58
|
end
|
58
59
|
|
59
60
|
begin
|
60
61
|
Omnibus.process_configuration
|
61
62
|
rescue => e
|
62
|
-
error_msg =
|
63
|
+
error_msg = 'Could not load the Omnibus projects.'
|
63
64
|
raise Omnibus::CLI::Error.new(error_msg, e)
|
64
65
|
end
|
65
66
|
end
|
66
|
-
|
67
67
|
end
|
68
68
|
|
69
69
|
##################################################################
|
@@ -91,10 +91,8 @@ module Omnibus
|
|
91
91
|
def self.banner(command, namespace = nil, subcommand = false)
|
92
92
|
# Main commands have an effective namespace of 'application' OR
|
93
93
|
# contain subcommands
|
94
|
-
|
95
|
-
|
96
|
-
end
|
97
|
-
"#{basename} #{command.formatted_usage(self, $thor_runner, subcommand)}"
|
94
|
+
subcommand = self.namespace.split(':').last != 'application' || subcommands.empty?
|
95
|
+
"#{basename} #{command.formatted_usage(self, $thor_runner, subcommand) }"
|
98
96
|
end
|
99
97
|
|
100
98
|
protected
|
@@ -107,12 +105,11 @@ module Omnibus
|
|
107
105
|
project = Omnibus.project(project_name)
|
108
106
|
unless project
|
109
107
|
error_msg = "I don't know anything about project '#{project_name}'."
|
110
|
-
error_msg << " Valid project names include: #{Omnibus.project_names.join(', ')}"
|
111
|
-
|
108
|
+
error_msg << " Valid project names include: #{Omnibus.project_names.join(', ') }"
|
109
|
+
fail Omnibus::CLI::Error, error_msg
|
112
110
|
end
|
113
111
|
project
|
114
112
|
end
|
115
|
-
|
116
113
|
end
|
117
114
|
end
|
118
115
|
end
|
data/lib/omnibus/cli/build.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");
|
@@ -20,21 +20,22 @@ require 'omnibus/cli/base'
|
|
20
20
|
module Omnibus
|
21
21
|
module CLI
|
22
22
|
class Build < Base
|
23
|
-
|
24
23
|
namespace :build
|
25
24
|
|
26
25
|
class_option :path,
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
aliases: [:p],
|
27
|
+
type: :string,
|
28
|
+
default: Dir.pwd,
|
29
|
+
desc: 'Path to the Omnibus project root.'
|
31
30
|
|
32
31
|
method_option :timestamp,
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
aliases: [:t],
|
33
|
+
type: :boolean,
|
34
|
+
default: true,
|
35
|
+
desc: 'Append timestamp information to the version ' \
|
36
|
+
'identifier? Add a timestamp for build versions; ' \
|
37
|
+
'leave it off for release and pre-release versions'
|
38
|
+
desc 'project PROJECT', 'Build the given Omnibus project'
|
38
39
|
def project(project_name)
|
39
40
|
project = load_project!(project_name)
|
40
41
|
project_task_name = "projects:#{project.name}"
|
@@ -47,7 +48,7 @@ module Omnibus
|
|
47
48
|
Rake::Task[project_task_name].invoke
|
48
49
|
end
|
49
50
|
|
50
|
-
desc
|
51
|
+
desc 'software PROJECT SOFTWARE', 'Build the given software component'
|
51
52
|
def software(project_name, software_name)
|
52
53
|
project = load_project!(project_name)
|
53
54
|
software_task_name = "projects:#{project.name}:software:#{software_name}"
|
@@ -56,7 +57,6 @@ module Omnibus
|
|
56
57
|
|
57
58
|
Rake::Task[software_task_name].invoke
|
58
59
|
end
|
59
|
-
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|