boxen 2.9.0 → 3.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/boxen.gemspec +12 -12
  2. data/lib/boxen/check.rb +8 -39
  3. data/lib/boxen/cli.rb +19 -45
  4. data/lib/boxen/command.rb +142 -0
  5. data/lib/boxen/command/help.rb +40 -0
  6. data/lib/boxen/command/preflight.rb +38 -0
  7. data/lib/boxen/command/project.rb +49 -0
  8. data/lib/boxen/command/project/install.rb +33 -0
  9. data/lib/boxen/command/run.rb +199 -0
  10. data/lib/boxen/command/service.rb +61 -0
  11. data/lib/boxen/command/service/disable.rb +15 -0
  12. data/lib/boxen/command/service/enable.rb +15 -0
  13. data/lib/boxen/command/service/restart.rb +24 -0
  14. data/lib/boxen/command/version.rb +29 -0
  15. data/lib/boxen/command_status.rb +15 -0
  16. data/lib/boxen/config.rb +43 -61
  17. data/lib/boxen/hook.rb +15 -8
  18. data/lib/boxen/keychain.rb +1 -1
  19. data/lib/boxen/postflight/env.rb +1 -1
  20. data/lib/boxen/postflight/github_issue.rb +124 -0
  21. data/lib/boxen/postflight/hooks.rb +16 -0
  22. data/lib/boxen/postflight/web_hook.rb +63 -0
  23. data/lib/boxen/preflight.rb +4 -7
  24. data/lib/boxen/preflight/creds.rb +8 -47
  25. data/lib/boxen/preflight/facts.rb +36 -0
  26. data/lib/boxen/preflight/homebrew.rb +13 -0
  27. data/lib/boxen/preflight/identity.rb +2 -0
  28. data/lib/boxen/preflight/offline.rb +33 -0
  29. data/lib/boxen/preflight/os.rb +1 -1
  30. data/lib/boxen/preflight/update.rb +109 -0
  31. data/lib/boxen/util/logging.rb +59 -0
  32. data/lib/boxen/version.rb +3 -0
  33. data/script/bootstrap +1 -1
  34. data/script/tests +1 -0
  35. data/test/boxen/test.rb +1 -1
  36. data/test/boxen_cli_test.rb +8 -31
  37. data/test/boxen_command_test.rb +93 -0
  38. data/test/boxen_config_test.rb +1 -31
  39. data/test/boxen_directories_test.rb +4 -4
  40. data/test/boxen_hook_test.rb +25 -0
  41. data/test/command/help_test.rb +49 -0
  42. data/test/command/project/install_test.rb +34 -0
  43. data/test/command/project_test.rb +32 -0
  44. data/test/command/run_test.rb +21 -0
  45. data/test/command/service/disable_test.rb +49 -0
  46. data/test/command/service/enable_test.rb +49 -0
  47. data/test/command/service/restart_test.rb +53 -0
  48. data/test/command/service_test.rb +55 -0
  49. data/test/command/version_test.rb +15 -0
  50. data/test/{boxen_postflight_active_test.rb → postflight/boxen_postflight_active_test.rb} +3 -3
  51. data/test/{boxen_postflight_env_test.rb → postflight/boxen_postflight_env_test.rb} +0 -0
  52. data/test/{boxen_hook_github_issue_test.rb → postflight/boxen_postflight_github_issue_test.rb} +72 -82
  53. data/test/{boxen_hook_web_test.rb → postflight/boxen_postflight_web_hook_test.rb} +12 -11
  54. data/test/preflight/boxen_preflight_creds_test.rb +82 -0
  55. data/test/{boxen_preflight_etc_my_cnf_test.rb → preflight/boxen_preflight_etc_my_cnf_test.rb} +1 -1
  56. data/test/preflight/boxen_preflight_homebrew_test.rb +10 -0
  57. data/test/{boxen_preflight_rvm_test.rb → preflight/boxen_preflight_rvm_test.rb} +1 -1
  58. metadata +247 -171
  59. checksums.yaml +0 -7
  60. data/lib/boxen/flags.rb +0 -282
  61. data/lib/boxen/hook/github_issue.rb +0 -120
  62. data/lib/boxen/hook/web.rb +0 -56
  63. data/lib/boxen/puppeteer.rb +0 -121
  64. data/lib/boxen/runner.rb +0 -149
  65. data/test/boxen_check_test.rb +0 -55
  66. data/test/boxen_flags_test.rb +0 -217
  67. data/test/boxen_preflight_creds_test.rb +0 -177
  68. data/test/boxen_puppeteer_test.rb +0 -101
  69. data/test/boxen_runner_test.rb +0 -171
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: a2c7ad2a242d7d45a288a146594e81b031ba345f
4
- data.tar.gz: 9d65a80d35b4f4ee6efe941baab632c3b917cab1
5
- SHA512:
6
- metadata.gz: 48ef3bcc2b4c8a0f50fe5c8652e985b8d655f043bbe5dcf67ff555a18ae232d528ee9eaff43042f70defea76ea5ad19a6feff7ab57637c44c1cefe111538ba89
7
- data.tar.gz: 4b4b1a46ba559f4072bf57e584b69b46ca243b3c212365d724305117fe8d4db64d4d839800a0ebb537551b2d821cb98239c4055a82b93bc619bc293b98497810
@@ -1,282 +0,0 @@
1
- require "optparse"
2
- require "boxen/error"
3
-
4
- module Boxen
5
-
6
- # Various flags and settings parsed from the command line. See
7
- # Setup::Configuration for more info.
8
-
9
- class Flags
10
-
11
- attr_reader :args
12
- attr_reader :homedir
13
- attr_reader :logfile
14
- attr_reader :login
15
- attr_reader :token
16
- attr_reader :srcdir
17
- attr_reader :user
18
-
19
- attr_reader :disable_service
20
- attr_reader :enable_service
21
- attr_reader :restart_service
22
-
23
- # Create a new instance, optionally providing CLI `args` to
24
- # parse immediately.
25
-
26
- def initialize(*args)
27
- @args = []
28
- @debug = false
29
- @env = false
30
- @fde = true
31
- @help = false
32
- @pretend = false
33
- @profile = false
34
- @report = false
35
- @graph = false
36
- @projects = false
37
- @stealth = false
38
- @disable_service = false
39
- @enable_service = false
40
- @restart_service = false
41
- @disable_services = false
42
- @enable_services = false
43
- @restart_services = false
44
- @list_services = false
45
- @color = true
46
-
47
- @options = OptionParser.new do |o|
48
- o.banner = "Usage: #{File.basename $0} [options] [projects...]\n\n"
49
-
50
- o.on "--debug", "Be really verbose." do
51
- @debug = true
52
- end
53
-
54
- o.on "--pretend", "--noop", "Don't make changes." do
55
- @pretend = true
56
- end
57
-
58
- o.on "--report", "Enable puppet reports." do
59
- @report = true
60
- end
61
-
62
- o.on "--graph", "Enable generation of dependency graphs." do
63
- @graph = true
64
- end
65
-
66
- o.on "--env", "Show useful environment variables." do
67
- @env = true
68
- end
69
-
70
- o.on "--help", "-h", "-?", "Show help." do
71
- @help = true
72
- end
73
-
74
- o.on "--disable-service SERVICE", "Disable a Boxen service." do |service|
75
- @disable_service = service
76
- end
77
-
78
- o.on "--enable-service SERVICE", "Enable a Boxen service." do |service|
79
- @enable_service = service
80
- end
81
-
82
- o.on "--restart-service SERVICE", "Restart a Boxen service." do |service|
83
- @restart_service = service
84
- end
85
-
86
- o.on "--disable-services", "Disable all Boxen services." do
87
- @disable_services = true
88
- end
89
-
90
- o.on "--enable-services", "Enable all Boxen services." do
91
- @enable_services = true
92
- end
93
-
94
- o.on "--restart-services", "Restart all Boxen services." do
95
- @restart_services = true
96
- end
97
-
98
- o.on "--list-services", "List Boxen services." do
99
- @list_services = true
100
- end
101
-
102
- o.on "--homedir DIR", "Boxen's home directory." do |homedir|
103
- @homedir = homedir
104
- end
105
-
106
- o.on "--logfile DIR", "Boxen's log file." do |logfile|
107
- @logfile = logfile
108
- end
109
-
110
- o.on "--login LOGIN", "Your GitHub login." do |login|
111
- @login = login
112
- end
113
-
114
- o.on "--no-fde", "Don't require full disk encryption." do
115
- @fde = false
116
- end
117
-
118
- # --no-pull is used before options are parsed, but consumed here.
119
-
120
- o.on "--no-pull", "Don't try to update code before applying."
121
-
122
- o.on "--no-issue", "--stealth", "Don't open an issue on failure." do
123
- @stealth = true
124
- end
125
-
126
- o.on "--token TOKEN", "Your GitHub OAuth token." do |token|
127
- @token = token
128
- end
129
-
130
- o.on "--profile", "Profile the Puppet run." do
131
- @profile = true
132
- end
133
-
134
- o.on "--future-parser", "Enable the Puppet future parser" do
135
- @future_parser = true
136
- end
137
-
138
- o.on "--projects", "Show available projects." do
139
- @projects = true
140
- end
141
-
142
- o.on "--srcdir DIR", "The directory where repos live." do |srcdir|
143
- @srcdir = srcdir
144
- end
145
-
146
- o.on "--user USER", "Your local user." do |user|
147
- @user = user
148
- end
149
-
150
- o.on "--no-color", "Disable colors." do
151
- @color = false
152
- end
153
- end
154
-
155
- parse args.flatten.compact
156
- end
157
-
158
- # Apply these flags to `config`. Returns `config`.
159
-
160
- def apply(config)
161
- config.debug = debug?
162
- config.fde = fde? if config.fde?
163
- config.homedir = homedir if homedir
164
- config.logfile = logfile if logfile
165
- config.login = login if login
166
- config.token = token if token
167
- config.pretend = pretend?
168
- config.profile = profile?
169
- config.future_parser = future_parser?
170
- config.report = report?
171
- config.graph = graph?
172
- config.srcdir = srcdir if srcdir
173
- config.stealth = stealth?
174
- config.user = user if user
175
- config.color = color?
176
-
177
- config
178
- end
179
-
180
- def debug?
181
- @debug
182
- end
183
-
184
- def env?
185
- @env
186
- end
187
-
188
- def fde?
189
- @fde
190
- end
191
-
192
- def help?
193
- @help
194
- end
195
-
196
- def disable_services?
197
- @disable_services
198
- end
199
-
200
- def enable_services?
201
- @enable_services
202
- end
203
-
204
- def disable_service?
205
- @disable_service
206
- end
207
-
208
- def enable_service?
209
- @enable_service
210
- end
211
-
212
- def restart_service?
213
- @restart_service
214
- end
215
-
216
- def restart_services?
217
- @restart_services
218
- end
219
-
220
- def list_services?
221
- @list_services
222
- end
223
-
224
- def run?
225
- !(
226
- list_services? ||
227
- restart_services? || restart_service? ||
228
- enable_services? || enable_service? ||
229
- disable_services? || disable_service? ||
230
- help?
231
- )
232
- end
233
-
234
- # Parse `args` as an array of CLI argument Strings. Raises
235
- # Boxen::Error if anything goes wrong. Returns `self`.
236
-
237
- def parse(*args)
238
- @args = @options.parse! args.flatten.compact.map(&:to_s)
239
-
240
- self
241
-
242
- rescue OptionParser::MissingArgument, OptionParser::InvalidOption => e
243
- raise Boxen::Error, "#{e.message}\n#@options"
244
- end
245
-
246
- def pretend?
247
- @pretend
248
- end
249
-
250
- def profile?
251
- @profile
252
- end
253
-
254
- def future_parser?
255
- @future_parser
256
- end
257
-
258
- def report?
259
- @report
260
- end
261
-
262
- def graph?
263
- @graph
264
- end
265
-
266
- def projects?
267
- @projects
268
- end
269
-
270
- def stealth?
271
- @stealth
272
- end
273
-
274
- def color?
275
- @color
276
- end
277
-
278
- def to_s
279
- @options.to_s
280
- end
281
- end
282
- end
@@ -1,120 +0,0 @@
1
- require "boxen/hook"
2
-
3
- module Boxen
4
- class Hook
5
- class GitHubIssue < Hook
6
- def perform?
7
- enabled? &&
8
- !config.stealth? && !config.pretend? &&
9
- !config.login.to_s.empty? &&
10
- checkout.master?
11
- end
12
-
13
- def call
14
- if result.success?
15
- close_failures
16
- else
17
- warn "Sorry! Creating an issue on #{config.reponame}."
18
- record_failure
19
- end
20
- end
21
-
22
- def compare_url
23
- return unless config.reponame
24
- "#{config.ghurl}/#{config.reponame}/compare/#{checkout.sha}...master"
25
- end
26
-
27
- def hostname
28
- `hostname`.strip
29
- end
30
-
31
- def os
32
- `sw_vers -productVersion`.strip
33
- end
34
-
35
- def shell
36
- ENV["SHELL"]
37
- end
38
-
39
- def log
40
- File.read config.logfile
41
- end
42
-
43
- def record_failure
44
- return unless issues?
45
-
46
- title = "Failed for #{config.user}"
47
- config.api.create_issue(config.reponame, title, failure_details,
48
- :labels => [failure_label])
49
- end
50
-
51
- def close_failures
52
- return unless issues?
53
-
54
- comment = "Succeeded at version #{checkout.sha}."
55
- failures.each do |issue|
56
- config.api.add_comment(config.reponame, issue.number, comment)
57
- config.api.close_issue(config.reponame, issue.number)
58
- end
59
- end
60
-
61
- def failures
62
- return [] unless issues?
63
-
64
- issues = config.api.list_issues(config.reponame, :state => 'open',
65
- :labels => failure_label, :creator => config.login)
66
- issues.reject! {|i| i.labels.collect(&:name).include?(ongoing_label)}
67
- issues
68
- end
69
-
70
- def failure_details
71
- body = ''
72
- body << "Running on `#{hostname}` (OS X #{os}) under `#{shell}`, "
73
- body << "version #{checkout.sha} ([compare to master](#{compare_url}))."
74
- body << "\n\n"
75
-
76
- if checkout.dirty?
77
- body << "### Changes"
78
- body << "\n\n"
79
- body << "```\n#{checkout.changes}\n```"
80
- body << "\n\n"
81
- end
82
-
83
- body << "### Puppet Command"
84
- body << "\n\n"
85
- body << "```\n#{puppet.command.join(' ')}\n```"
86
- body << "\n\n"
87
-
88
- body << "### Output (from #{config.logfile})"
89
- body << "\n\n"
90
- body << "```\n#{log}\n```\n"
91
-
92
- body
93
- end
94
-
95
- def failure_label
96
- @failure_label ||= 'failure'
97
- end
98
- attr_writer :failure_label
99
-
100
- def ongoing_label
101
- @ongoing_label ||= 'ongoing'
102
- end
103
- attr_writer :ongoing_label
104
-
105
- def issues?
106
- return unless config.reponame
107
- return if config.reponame == 'boxen/our-boxen'
108
-
109
- config.api.repository(config.reponame).has_issues
110
- end
111
-
112
- private
113
- def required_environment_variables
114
- ['BOXEN_ISSUES_ENABLED']
115
- end
116
- end
117
- end
118
- end
119
-
120
- Boxen::Hook.register Boxen::Hook::GitHubIssue
@@ -1,56 +0,0 @@
1
- require "boxen/hook"
2
- require "json"
3
- require "net/http"
4
-
5
- module Boxen
6
- class Hook
7
- class Web < Hook
8
- def perform?
9
- enabled?
10
- end
11
-
12
- private
13
- def call
14
- payload = {
15
- :login => config.user,
16
- :sha => checkout.sha,
17
- :status => result.success? ? 'success' : 'failure',
18
- :time => "#{Time.now.utc.to_i}"
19
- }
20
-
21
- post_web_hook payload
22
- end
23
-
24
- def post_web_hook(payload)
25
- headers = { 'Content-Type' => 'application/json' }
26
-
27
- uri = URI.parse(URI.escape(ENV['BOXEN_WEB_HOOK_URL']))
28
-
29
- user, pass, host, port, path = \
30
- uri.user, uri.pass, uri.host, uri.port, uri.path
31
-
32
- request = Net::HTTP::Post.new(path, initheader = headers)
33
-
34
- if uri.scheme =~ /https/
35
- http.use_ssl = true
36
- end
37
-
38
- if user && pass
39
- request.basic_auth user, pass
40
- end
41
-
42
- request.body = payload.to_json
43
-
44
- response = Net::HTTP.new(host, port).start do |http|
45
- http.request(request)
46
- end
47
- end
48
-
49
- def required_environment_variables
50
- ['BOXEN_WEB_HOOK_URL']
51
- end
52
- end
53
- end
54
- end
55
-
56
- Boxen::Hook.register Boxen::Hook::Web