boxen 3.0.0.beta1 → 3.1.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 +7 -0
- data/.travis.yml +0 -1
- data/README.md +1 -1
- data/boxen.gemspec +13 -13
- data/lib/boxen/check.rb +39 -8
- data/lib/boxen/cli.rb +45 -19
- data/lib/boxen/config.rb +61 -43
- data/lib/boxen/flags.rb +282 -0
- data/lib/boxen/hook.rb +8 -15
- data/lib/boxen/hook/github_issue.rb +120 -0
- data/lib/boxen/hook/web.rb +56 -0
- data/lib/boxen/keychain.rb +1 -1
- data/lib/boxen/postflight/env.rb +1 -1
- data/lib/boxen/preflight.rb +7 -4
- data/lib/boxen/preflight/creds.rb +47 -8
- data/lib/boxen/preflight/identity.rb +0 -2
- data/lib/boxen/preflight/os.rb +6 -2
- data/lib/boxen/puppeteer.rb +121 -0
- data/lib/boxen/runner.rb +149 -0
- data/script/bootstrap +1 -1
- data/script/tests +0 -1
- data/test/boxen/test.rb +1 -1
- data/test/boxen_check_test.rb +55 -0
- data/test/boxen_cli_test.rb +31 -8
- data/test/boxen_config_test.rb +31 -1
- data/test/boxen_directories_test.rb +4 -4
- data/test/boxen_flags_test.rb +217 -0
- data/test/{postflight/boxen_postflight_github_issue_test.rb → boxen_hook_github_issue_test.rb} +82 -72
- data/test/{postflight/boxen_postflight_web_hook_test.rb → boxen_hook_web_test.rb} +11 -12
- data/test/{postflight/boxen_postflight_active_test.rb → boxen_postflight_active_test.rb} +3 -3
- data/test/{postflight/boxen_postflight_env_test.rb → boxen_postflight_env_test.rb} +0 -0
- data/test/boxen_preflight_creds_test.rb +177 -0
- data/test/{preflight/boxen_preflight_etc_my_cnf_test.rb → boxen_preflight_etc_my_cnf_test.rb} +1 -1
- data/test/{preflight/boxen_preflight_rvm_test.rb → boxen_preflight_rvm_test.rb} +1 -1
- data/test/boxen_puppeteer_test.rb +101 -0
- data/test/boxen_runner_test.rb +171 -0
- metadata +172 -251
- data/lib/boxen/command.rb +0 -142
- data/lib/boxen/command/help.rb +0 -40
- data/lib/boxen/command/preflight.rb +0 -38
- data/lib/boxen/command/project.rb +0 -49
- data/lib/boxen/command/project/install.rb +0 -33
- data/lib/boxen/command/run.rb +0 -199
- data/lib/boxen/command/service.rb +0 -61
- data/lib/boxen/command/service/disable.rb +0 -15
- data/lib/boxen/command/service/enable.rb +0 -15
- data/lib/boxen/command/service/restart.rb +0 -24
- data/lib/boxen/command/version.rb +0 -29
- data/lib/boxen/command_status.rb +0 -15
- data/lib/boxen/postflight/github_issue.rb +0 -124
- data/lib/boxen/postflight/hooks.rb +0 -16
- data/lib/boxen/postflight/web_hook.rb +0 -63
- data/lib/boxen/preflight/facts.rb +0 -36
- data/lib/boxen/preflight/homebrew.rb +0 -13
- data/lib/boxen/preflight/offline.rb +0 -33
- data/lib/boxen/preflight/update.rb +0 -109
- data/lib/boxen/util/logging.rb +0 -59
- data/lib/boxen/version.rb +0 -3
- data/lib/system_timer.rb +0 -13
- data/test/boxen_command_test.rb +0 -93
- data/test/boxen_hook_test.rb +0 -25
- data/test/command/help_test.rb +0 -49
- data/test/command/project/install_test.rb +0 -34
- data/test/command/project_test.rb +0 -32
- data/test/command/run_test.rb +0 -21
- data/test/command/service/disable_test.rb +0 -49
- data/test/command/service/enable_test.rb +0 -49
- data/test/command/service/restart_test.rb +0 -53
- data/test/command/service_test.rb +0 -55
- data/test/command/version_test.rb +0 -15
- data/test/preflight/boxen_preflight_creds_test.rb +0 -82
- data/test/preflight/boxen_preflight_homebrew_test.rb +0 -10
- data/test/system_timer.rb +0 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2446bd003647a42616bee6f20530f55b3b56b678
|
4
|
+
data.tar.gz: a5bc7868ad7ba25d216e9cdc0feaa10166b0e35f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8ace9ed36907e0cf2ac8679a33d4fe7f253c927ea5460ef05ce9a34e0d64c5590e081e0a1917717f971ffca97fd809f1fbf89d9df2863ed5e08938a922bdba9
|
7
|
+
data.tar.gz: 3ef57a22a4192307c3c67ddee992d693fe37f3830c5a1aa398282adc66af7733306f4471bc270514db924bb8b8e03a66567e54f9de06e35948a7a16f8ca9b96d
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -42,7 +42,7 @@ and we can't just modify the sudoers file due to a chicken-egg problem.
|
|
42
42
|
|
43
43
|
## Contributing
|
44
44
|
|
45
|
-
Use the OS X system Ruby (
|
45
|
+
Use the OS X system Ruby (2.0 or newer). Run `script/tests` often. Open PR's.
|
46
46
|
Use the CI.
|
47
47
|
|
48
48
|
## Halp!
|
data/boxen.gemspec
CHANGED
@@ -1,30 +1,30 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
$:.unshift File.expand_path("../lib", __FILE__)
|
4
|
-
require "boxen/version"
|
5
|
-
|
6
3
|
Gem::Specification.new do |gem|
|
7
4
|
gem.name = "boxen"
|
8
|
-
gem.version =
|
9
|
-
|
10
|
-
|
5
|
+
gem.version = "3.1.0"
|
6
|
+
# Thanks go out to the previous maintainers John Barnette, Will
|
7
|
+
# Farrington, David Goodlad and Mike McQuaid for getting this project
|
8
|
+
# to where it is today.
|
9
|
+
gem.authors = ["Jacob Bednarz"]
|
10
|
+
gem.email = ["jacob.bednarz@gmail.com"]
|
11
11
|
gem.description = "Manage Mac development boxes with love (and Puppet)."
|
12
12
|
gem.summary = "You know, for laptops and stuff."
|
13
13
|
gem.homepage = "https://github.com/boxen/boxen"
|
14
|
+
gem.license = 'MIT'
|
14
15
|
|
15
|
-
gem.files = `git ls-files`.split
|
16
|
-
gem.test_files = gem.files.grep
|
17
|
-
gem.executables = gem.files.grep(/^bin/).map { |bin| File.basename(bin) }
|
16
|
+
gem.files = `git ls-files`.split $/
|
17
|
+
gem.test_files = gem.files.grep /^test/
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.add_dependency "ansi", "~> 1.4"
|
21
21
|
gem.add_dependency "hiera", "~> 1.0"
|
22
|
-
gem.add_dependency "highline", "~> 1.6"
|
22
|
+
gem.add_dependency "highline", "~> 1.6.0"
|
23
23
|
gem.add_dependency "json_pure", [">= 1.7.7", "< 2.0"]
|
24
|
-
gem.add_dependency "librarian-puppet", "~>
|
24
|
+
gem.add_dependency "librarian-puppet", "~> 2.2"
|
25
25
|
gem.add_dependency "octokit", "~> 2.7", ">= 2.7.1"
|
26
|
-
gem.add_dependency "puppet", "~> 3.
|
26
|
+
gem.add_dependency "puppet", "~> 3.7"
|
27
27
|
|
28
|
-
gem.add_development_dependency "minitest", "
|
28
|
+
gem.add_development_dependency "minitest", "4.4.0" # pinned for mocha
|
29
29
|
gem.add_development_dependency "mocha", "~> 0.13"
|
30
30
|
end
|
data/lib/boxen/check.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
|
-
require "
|
1
|
+
require "ansi"
|
2
2
|
|
3
3
|
module Boxen
|
4
4
|
|
5
5
|
# The superclass for preflight and postflight sanity checks.
|
6
6
|
|
7
7
|
class Check
|
8
|
-
|
8
|
+
|
9
|
+
# A collection of preflight instances for `config`. An instance is
|
10
|
+
# created for every constant under `self` that's also a
|
11
|
+
# subclass of `self`.
|
12
|
+
|
13
|
+
def self.checks(config)
|
14
|
+
constants.map { |n| const_get n }.
|
15
|
+
select { |c| c < self }.
|
16
|
+
map { |c| c.new config }
|
17
|
+
end
|
9
18
|
|
10
19
|
# Search `dir` and load all Ruby files under it.
|
11
20
|
|
@@ -13,12 +22,16 @@ module Boxen
|
|
13
22
|
Dir["#{dir}/*.rb"].sort.each { |f| load f }
|
14
23
|
end
|
15
24
|
|
25
|
+
# Check each instance against `config`.
|
26
|
+
|
27
|
+
def self.run(config)
|
28
|
+
checks(config).each { |check| check.run unless check.ok? }
|
29
|
+
end
|
30
|
+
|
16
31
|
attr_reader :config
|
17
|
-
attr_reader :command
|
18
32
|
|
19
|
-
def initialize(config
|
20
|
-
@config
|
21
|
-
@command = command
|
33
|
+
def initialize(config)
|
34
|
+
@config = config
|
22
35
|
end
|
23
36
|
|
24
37
|
# Is everything good to go? Implemented by subclasses.
|
@@ -33,9 +46,27 @@ module Boxen
|
|
33
46
|
raise "Subclasses must implement this method."
|
34
47
|
end
|
35
48
|
|
49
|
+
# A fancier `abort` and `warn`. This will probably really annoy
|
50
|
+
# someone at some point because it's overriding a Kernel method,
|
51
|
+
# but it's limited to checks.
|
52
|
+
|
53
|
+
def abort(message, *extras)
|
54
|
+
extras << { :color => :red }
|
55
|
+
warn message, *extras
|
56
|
+
exit 1
|
57
|
+
end
|
58
|
+
|
59
|
+
def warn(message, *extras)
|
60
|
+
options = Hash === extras.last ? extras.pop : {}
|
61
|
+
color = options[:color] || :yellow
|
62
|
+
|
63
|
+
$stderr.puts ANSI.send(color) { "--> #{message}" }
|
64
|
+
|
65
|
+
unless extras.empty?
|
66
|
+
extras.each { |line| $stderr.puts " #{line}" }
|
67
|
+
end
|
36
68
|
|
37
|
-
|
38
|
-
@config.debug?
|
69
|
+
$stderr.puts
|
39
70
|
end
|
40
71
|
end
|
41
72
|
end
|
data/lib/boxen/cli.rb
CHANGED
@@ -1,35 +1,61 @@
|
|
1
|
-
require "boxen/command"
|
2
1
|
require "boxen/config"
|
3
|
-
require "boxen/
|
2
|
+
require "boxen/flags"
|
3
|
+
require "boxen/postflight"
|
4
|
+
require "boxen/preflight"
|
5
|
+
require "boxen/runner"
|
6
|
+
require "boxen/util"
|
4
7
|
|
5
8
|
module Boxen
|
6
9
|
class CLI
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
10
|
+
attr_reader :config
|
11
|
+
attr_reader :flags
|
12
|
+
attr_reader :runner
|
13
|
+
|
14
|
+
def initialize(config, flags)
|
15
|
+
@config = config
|
16
|
+
@flags = flags
|
17
|
+
@runner = Boxen::Runner.new(@config, @flags)
|
11
18
|
end
|
12
19
|
|
13
|
-
def
|
20
|
+
def run
|
21
|
+
if flags.help?
|
22
|
+
puts flags
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
26
|
+
runner.run
|
14
27
|
end
|
15
28
|
|
16
|
-
|
17
|
-
|
29
|
+
# Run Boxen by wiring together the command-line flags, config,
|
30
|
+
# preflights, Puppet execution, and postflights. Returns Puppet's
|
31
|
+
# exit code.
|
32
|
+
|
33
|
+
def self.run(*args)
|
34
|
+
config = Boxen::Config.load
|
35
|
+
flags = Boxen::Flags.new args
|
36
|
+
|
37
|
+
# Apply command-line flags to the config in case we're changing or
|
38
|
+
# overriding anything.
|
39
|
+
flags.apply config
|
18
40
|
|
19
|
-
|
20
|
-
|
21
|
-
|
41
|
+
if flags.run?
|
42
|
+
# Run the preflight checks.
|
43
|
+
Boxen::Preflight.run config
|
22
44
|
|
23
|
-
|
45
|
+
# Save the config for Puppet (and next time).
|
46
|
+
Boxen::Config.save config
|
24
47
|
end
|
25
|
-
end
|
26
48
|
|
27
|
-
|
49
|
+
# Make the magic happen.
|
50
|
+
status = Boxen::CLI.new(config, flags).run
|
51
|
+
|
52
|
+
if flags.run?
|
53
|
+
# Run the postflight checks.
|
54
|
+
Boxen::Postflight.run config if status.success?
|
55
|
+
end
|
28
56
|
|
29
|
-
|
30
|
-
|
31
|
-
rescue => e
|
32
|
-
abort "#{e.class.name}: #{e.message}"
|
57
|
+
# Return Puppet's exit status.
|
58
|
+
return status.code
|
33
59
|
end
|
34
60
|
end
|
35
61
|
end
|
data/lib/boxen/config.rb
CHANGED
@@ -25,6 +25,9 @@ module Boxen
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
keychain = Boxen::Keychain.new config.user
|
29
|
+
config.token = keychain.token
|
30
|
+
|
28
31
|
if config.enterprise?
|
29
32
|
# configure to talk to GitHub Enterprise
|
30
33
|
Octokit.configure do |c|
|
@@ -77,19 +80,10 @@ module Boxen
|
|
77
80
|
def initialize(&block)
|
78
81
|
@fde = true
|
79
82
|
@pull = true
|
80
|
-
@debug = false
|
81
83
|
|
82
84
|
yield self if block_given?
|
83
85
|
end
|
84
86
|
|
85
|
-
def keychain
|
86
|
-
@keychain ||= Boxen::Keychain.new self.user
|
87
|
-
end
|
88
|
-
|
89
|
-
def token
|
90
|
-
@token ||= keychain.token
|
91
|
-
end
|
92
|
-
|
93
87
|
# Create an API instance using the current user creds. A new
|
94
88
|
# instance is created any time `token` changes.
|
95
89
|
|
@@ -100,32 +94,11 @@ module Boxen
|
|
100
94
|
# Spew a bunch of debug logging? Default is `false`.
|
101
95
|
|
102
96
|
def debug?
|
103
|
-
# TODO: fix this
|
104
97
|
!!@debug
|
105
98
|
end
|
106
99
|
|
107
100
|
attr_writer :debug
|
108
101
|
|
109
|
-
def offline?
|
110
|
-
@offline ||= false
|
111
|
-
end
|
112
|
-
|
113
|
-
attr_writer :offline
|
114
|
-
|
115
|
-
def report?
|
116
|
-
# TODO: Actually make this a thing
|
117
|
-
@report = false
|
118
|
-
end
|
119
|
-
|
120
|
-
attr_writer :report
|
121
|
-
|
122
|
-
def profile?
|
123
|
-
#TODO: Actually make this a thing
|
124
|
-
@profile = true
|
125
|
-
end
|
126
|
-
|
127
|
-
attr_writer :profile
|
128
|
-
|
129
102
|
# A GitHub user's public email.
|
130
103
|
|
131
104
|
attr_accessor :email
|
@@ -149,7 +122,7 @@ module Boxen
|
|
149
122
|
# `BOXEN_HOME` environment variable.
|
150
123
|
|
151
124
|
def homedir
|
152
|
-
@homedir
|
125
|
+
@homedir || ENV["BOXEN_HOME"] || "/opt/boxen"
|
153
126
|
end
|
154
127
|
|
155
128
|
attr_writer :homedir
|
@@ -159,7 +132,7 @@ module Boxen
|
|
159
132
|
# overwritten on every run.
|
160
133
|
|
161
134
|
def logfile
|
162
|
-
@logfile
|
135
|
+
@logfile || ENV["BOXEN_LOG_FILE"] || "#{repodir}/log/boxen.log"
|
163
136
|
end
|
164
137
|
|
165
138
|
attr_writer :logfile
|
@@ -172,6 +145,46 @@ module Boxen
|
|
172
145
|
|
173
146
|
attr_accessor :name
|
174
147
|
|
148
|
+
# Just go through the motions? Default is `false`.
|
149
|
+
|
150
|
+
def pretend?
|
151
|
+
!!@pretend
|
152
|
+
end
|
153
|
+
|
154
|
+
attr_writer :pretend
|
155
|
+
|
156
|
+
# Run a profiler on Puppet? Default is `false`.
|
157
|
+
|
158
|
+
def profile?
|
159
|
+
!!@profile
|
160
|
+
end
|
161
|
+
|
162
|
+
attr_writer :profile
|
163
|
+
|
164
|
+
# Enable the Puppet future parser? Default is `false`.
|
165
|
+
|
166
|
+
def future_parser?
|
167
|
+
!!@future_parser
|
168
|
+
end
|
169
|
+
|
170
|
+
attr_writer :future_parser
|
171
|
+
|
172
|
+
# Enable puppet reports ? Default is `false`.
|
173
|
+
|
174
|
+
def report?
|
175
|
+
!!@report
|
176
|
+
end
|
177
|
+
|
178
|
+
attr_writer :report
|
179
|
+
|
180
|
+
# Enable generation of dependency graphs.
|
181
|
+
|
182
|
+
def graph?
|
183
|
+
!!@graph
|
184
|
+
end
|
185
|
+
|
186
|
+
attr_writer :graph
|
187
|
+
|
175
188
|
# An Array of Boxen::Project entries, one for each project Boxen
|
176
189
|
# knows how to manage.
|
177
190
|
#
|
@@ -195,7 +208,7 @@ module Boxen
|
|
195
208
|
# `BOXEN_PUPPET_DIR` environment variable.
|
196
209
|
|
197
210
|
def puppetdir
|
198
|
-
@puppetdir
|
211
|
+
@puppetdir || ENV["BOXEN_PUPPET_DIR"] || "/tmp/boxen/puppet"
|
199
212
|
end
|
200
213
|
|
201
214
|
attr_writer :puppetdir
|
@@ -204,7 +217,7 @@ module Boxen
|
|
204
217
|
# `Dir.pwd`. Respects the `BOXEN_REPO_DIR` environment variable.
|
205
218
|
|
206
219
|
def repodir
|
207
|
-
@repodir
|
220
|
+
@repodir || ENV["BOXEN_REPO_DIR"] || Dir.pwd
|
208
221
|
end
|
209
222
|
|
210
223
|
attr_writer :repodir
|
@@ -215,7 +228,7 @@ module Boxen
|
|
215
228
|
# Respects the `BOXEN_REPO_NAME` environment variable.
|
216
229
|
|
217
230
|
def reponame
|
218
|
-
override = @reponame
|
231
|
+
override = @reponame || ENV["BOXEN_REPO_NAME"]
|
219
232
|
return override unless override.nil?
|
220
233
|
|
221
234
|
if File.directory? repodir
|
@@ -225,7 +238,7 @@ module Boxen
|
|
225
238
|
# find the path and strip off the .git suffix
|
226
239
|
repo_exp = Regexp.new Regexp.escape(ghuri.host) + "[/:]([^/]+/[^/]+)"
|
227
240
|
if $?.success? && repo_exp.match(url)
|
228
|
-
@reponame = $1.sub
|
241
|
+
@reponame = $1.sub /\.git$/, ""
|
229
242
|
end
|
230
243
|
end
|
231
244
|
end
|
@@ -235,7 +248,7 @@ module Boxen
|
|
235
248
|
# GitHub location (public or GitHub Enterprise)
|
236
249
|
|
237
250
|
def ghurl
|
238
|
-
@ghurl
|
251
|
+
@ghurl || ENV["BOXEN_GITHUB_ENTERPRISE_URL"] || "https://github.com"
|
239
252
|
end
|
240
253
|
|
241
254
|
attr_writer :ghurl
|
@@ -243,7 +256,8 @@ module Boxen
|
|
243
256
|
# Repository URL template (required for GitHub Enterprise)
|
244
257
|
|
245
258
|
def repotemplate
|
246
|
-
|
259
|
+
default = 'https://github.com/%s'
|
260
|
+
@repotemplate || ENV["BOXEN_REPO_URL_TEMPLATE"] || default
|
247
261
|
end
|
248
262
|
|
249
263
|
attr_writer :repotemplate
|
@@ -258,7 +272,7 @@ module Boxen
|
|
258
272
|
# `"/Users/#{user}/src"`.
|
259
273
|
|
260
274
|
def srcdir
|
261
|
-
@srcdir
|
275
|
+
@srcdir || ENV["BOXEN_SRC_DIR"] || "/Users/#{user}/src"
|
262
276
|
end
|
263
277
|
|
264
278
|
attr_writer :srcdir
|
@@ -267,11 +281,15 @@ module Boxen
|
|
267
281
|
# Respects the `BOXEN_NO_ISSUE` environment variable.
|
268
282
|
|
269
283
|
def stealth?
|
270
|
-
|
284
|
+
!!ENV["BOXEN_NO_ISSUE"] || @stealth
|
271
285
|
end
|
272
286
|
|
273
287
|
attr_writer :stealth
|
274
288
|
|
289
|
+
# A GitHub OAuth token. Default is `nil`.
|
290
|
+
|
291
|
+
attr_reader :token
|
292
|
+
|
275
293
|
def token=(token)
|
276
294
|
@token = token
|
277
295
|
@api = nil
|
@@ -280,7 +298,7 @@ module Boxen
|
|
280
298
|
# A local user login. Default is the `USER` environment variable.
|
281
299
|
|
282
300
|
def user
|
283
|
-
@user
|
301
|
+
@user || ENV["USER"]
|
284
302
|
end
|
285
303
|
|
286
304
|
attr_writer :user
|
@@ -295,7 +313,7 @@ module Boxen
|
|
295
313
|
# Respects the `BOXEN_S3_HOST` environment variable.
|
296
314
|
|
297
315
|
def s3host
|
298
|
-
@s3host
|
316
|
+
@s3host || ENV["BOXEN_S3_HOST"] || "s3.amazonaws.com"
|
299
317
|
end
|
300
318
|
|
301
319
|
attr_writer :s3host
|
@@ -304,7 +322,7 @@ module Boxen
|
|
304
322
|
# Respects the `BOXEN_S3_BUCKET` environment variable.
|
305
323
|
|
306
324
|
def s3bucket
|
307
|
-
@s3bucket
|
325
|
+
@s3bucket || ENV["BOXEN_S3_BUCKET"] || "boxen-downloads"
|
308
326
|
end
|
309
327
|
|
310
328
|
attr_writer :s3bucket
|