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
@@ -1,61 +0,0 @@
|
|
1
|
-
require "boxen/command"
|
2
|
-
require "boxen/service"
|
3
|
-
|
4
|
-
class Boxen::Command::Service < Boxen::Command
|
5
|
-
def self.detailed_help
|
6
|
-
<<-EOS
|
7
|
-
|
8
|
-
boxen service
|
9
|
-
|
10
|
-
Display all services Boxen knows about.
|
11
|
-
|
12
|
-
boxen service:enable <service1> [<service2> ...]
|
13
|
-
|
14
|
-
Enable and start a Boxen-managed service. If none are given,
|
15
|
-
enables and starts all Boxen-managed services.
|
16
|
-
|
17
|
-
boxen service:disable <service1> [<service2> ...]
|
18
|
-
|
19
|
-
Disable and stop a Boxen-managed service. If none are given,
|
20
|
-
disables and stops all Boxen-managed services.
|
21
|
-
|
22
|
-
boxen service:restart [<service1> <service2> ...]
|
23
|
-
|
24
|
-
Restart a Boxen-managed service. If none are given, restarts all
|
25
|
-
Boxen-managed services.
|
26
|
-
|
27
|
-
NOTE: 'boxen service' is aliased to 'services' for convenience
|
28
|
-
|
29
|
-
EOS
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.help
|
33
|
-
"Show and manage Boxen services."
|
34
|
-
end
|
35
|
-
|
36
|
-
def run
|
37
|
-
@args = [] # we don't care about args here
|
38
|
-
|
39
|
-
puts "Boxen manages the following services:\n\n"
|
40
|
-
|
41
|
-
services.each do |service|
|
42
|
-
puts " #{service.name}"
|
43
|
-
end
|
44
|
-
|
45
|
-
Boxen::CommandStatus.new(0)
|
46
|
-
end
|
47
|
-
|
48
|
-
def services
|
49
|
-
@services ||= if @args.any?
|
50
|
-
@args.map { |s| Boxen::Service.new(s) }
|
51
|
-
else
|
52
|
-
Boxen::Service.list
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
require "boxen/command/service/enable"
|
58
|
-
require "boxen/command/service/disable"
|
59
|
-
require "boxen/command/service/restart"
|
60
|
-
|
61
|
-
Boxen::Command.register :service, Boxen::Command::Service, :services
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "boxen/command/service"
|
2
|
-
|
3
|
-
class Boxen::Command::Service::Disable < Boxen::Command::Service
|
4
|
-
def run
|
5
|
-
services.each do |service|
|
6
|
-
puts "Disabling service: #{service.name}"
|
7
|
-
service.disable
|
8
|
-
end
|
9
|
-
|
10
|
-
Boxen::CommandStatus.new(0)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
Boxen::Command.register :"service:disable", Boxen::Command::Service::Disable
|
15
|
-
Boxen::Command.register :"services:disable", Boxen::Command::Service::Disable
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "boxen/command/service"
|
2
|
-
|
3
|
-
class Boxen::Command::Service::Enable < Boxen::Command::Service
|
4
|
-
def run
|
5
|
-
services.each do |service|
|
6
|
-
puts "Enabling service: #{service.name}"
|
7
|
-
service.enable
|
8
|
-
end
|
9
|
-
|
10
|
-
Boxen::CommandStatus.new(0)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
Boxen::Command.register :"service:enable", Boxen::Command::Service::Enable
|
15
|
-
Boxen::Command.register :"services:enable", Boxen::Command::Service::Enable
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "boxen/command/service"
|
2
|
-
|
3
|
-
class Boxen::Command::Service::Restart < Boxen::Command::Service
|
4
|
-
def run
|
5
|
-
services.each do |service|
|
6
|
-
puts "Restarting service: #{service.name}"
|
7
|
-
service.disable
|
8
|
-
service.enable
|
9
|
-
end
|
10
|
-
|
11
|
-
Boxen::CommandStatus.new(0)
|
12
|
-
end
|
13
|
-
|
14
|
-
def services
|
15
|
-
@services ||= if @args.any?
|
16
|
-
@args.map { |s| Boxen::Service.new(s) }
|
17
|
-
else
|
18
|
-
Boxen::Service.list_enabled
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
Boxen::Command.register :"service:restart", Boxen::Command::Service::Restart
|
24
|
-
Boxen::Command.register :"services:restart", Boxen::Command::Service::Restart
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require "boxen/command"
|
2
|
-
require "boxen/version"
|
3
|
-
|
4
|
-
class Boxen::Command::Version < Boxen::Command
|
5
|
-
def self.help
|
6
|
-
"Displays the current version of Boxen"
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.detailed_help
|
10
|
-
<<-EOS
|
11
|
-
|
12
|
-
boxen version
|
13
|
-
|
14
|
-
Display the current version of the Boxen gem.
|
15
|
-
|
16
|
-
EOS
|
17
|
-
end
|
18
|
-
|
19
|
-
def run
|
20
|
-
puts "Boxen #{version}"
|
21
|
-
Boxen::CommandStatus.new(0)
|
22
|
-
end
|
23
|
-
|
24
|
-
def version
|
25
|
-
Boxen::VERSION
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
Boxen::Command.register :version, Boxen::Command::Version, :"-v", :"--version"
|
data/lib/boxen/command_status.rb
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
require "boxen/postflight"
|
2
|
-
require "boxen/checkout"
|
3
|
-
|
4
|
-
# Checks to see if the basic environment is loaded.
|
5
|
-
|
6
|
-
class Boxen::Postflight::GithubIssue < Boxen::Postflight
|
7
|
-
def checkout
|
8
|
-
@checkout ||= Boxen::Checkout.new(@config)
|
9
|
-
end
|
10
|
-
|
11
|
-
def ok?
|
12
|
-
# Only run if we have credentials and we're on master
|
13
|
-
!enabled? || config.login.to_s.empty? || !checkout.master?
|
14
|
-
end
|
15
|
-
|
16
|
-
def run
|
17
|
-
if command.success?
|
18
|
-
close_failures
|
19
|
-
else
|
20
|
-
warn "Sorry! Creating an issue on #{config.reponame}"
|
21
|
-
record_failure
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def compare_url
|
26
|
-
return unless config.reponame
|
27
|
-
"#{config.ghurl}/#{config.reponame}/compare/#{checkout.sha}...master"
|
28
|
-
end
|
29
|
-
|
30
|
-
def hostname
|
31
|
-
Socket.gethostname
|
32
|
-
end
|
33
|
-
|
34
|
-
def os
|
35
|
-
`sw_vers -productVersion`.strip
|
36
|
-
end
|
37
|
-
|
38
|
-
def shell
|
39
|
-
ENV["SHELL"]
|
40
|
-
end
|
41
|
-
|
42
|
-
def logfile
|
43
|
-
File.read config.logfile
|
44
|
-
end
|
45
|
-
|
46
|
-
def record_failure
|
47
|
-
return unless issues?
|
48
|
-
|
49
|
-
title = "Failed for #{config.user}"
|
50
|
-
config.api.create_issue config.reponame,
|
51
|
-
title,
|
52
|
-
failure_details,
|
53
|
-
:labels => [
|
54
|
-
failure_label
|
55
|
-
]
|
56
|
-
end
|
57
|
-
|
58
|
-
def close_failures
|
59
|
-
return unless issues?
|
60
|
-
|
61
|
-
comment = "Succeeded at version #{checkout.sha}."
|
62
|
-
failures.each do |issue|
|
63
|
-
config.api.add_comment(config.reponame, issue.number, comment)
|
64
|
-
config.api.close_issue(config.reponame, issue.number)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def failures
|
69
|
-
return [] unless issues?
|
70
|
-
|
71
|
-
issues = config.api.list_issues(config.reponame, :state => 'open',
|
72
|
-
:labels => failure_label, :creator => config.login)
|
73
|
-
issues.reject! {|i| i.labels.collect(&:name).include?(ongoing_label)}
|
74
|
-
issues
|
75
|
-
end
|
76
|
-
|
77
|
-
def failure_details
|
78
|
-
body = ''
|
79
|
-
body << "Running on `#{hostname}` (OS X #{os}) under `#{shell}`, "
|
80
|
-
body << "version #{checkout.sha} ([compare to master](#{compare_url}))."
|
81
|
-
body << "\n\n"
|
82
|
-
|
83
|
-
if checkout.dirty?
|
84
|
-
body << "### Changes"
|
85
|
-
body << "\n\n"
|
86
|
-
body << "```\n#{checkout.changes}\n```"
|
87
|
-
body << "\n\n"
|
88
|
-
end
|
89
|
-
|
90
|
-
body << "### Output (from #{config.logfile})"
|
91
|
-
body << "\n\n"
|
92
|
-
body << "```\n#{logfile}\n```\n"
|
93
|
-
|
94
|
-
body
|
95
|
-
end
|
96
|
-
|
97
|
-
attr_writer :failure_label
|
98
|
-
def failure_label
|
99
|
-
@failure_label ||= 'failure'
|
100
|
-
end
|
101
|
-
|
102
|
-
attr_writer :ongoing_label
|
103
|
-
def ongoing_label
|
104
|
-
@ongoing_label ||= 'ongoing'
|
105
|
-
end
|
106
|
-
|
107
|
-
def issues?
|
108
|
-
return unless config.reponame
|
109
|
-
return if config.reponame == 'boxen/our-boxen'
|
110
|
-
|
111
|
-
config.api.repository(config.reponame).has_issues
|
112
|
-
end
|
113
|
-
|
114
|
-
def required_environment_variables
|
115
|
-
['BOXEN_ISSUES_ENABLED']
|
116
|
-
end
|
117
|
-
|
118
|
-
def enabled?
|
119
|
-
required_vars = Array(required_environment_variables)
|
120
|
-
required_vars.any? && required_vars.all? do |var|
|
121
|
-
ENV[var] && !ENV[var].empty?
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require "boxen/postflight"
|
2
|
-
require "boxen/hook"
|
3
|
-
|
4
|
-
# Prints deprecation notices for all pre-3.x style hooks
|
5
|
-
|
6
|
-
class Boxen::Postflight::Hooks < Boxen::Postflight
|
7
|
-
def ok?
|
8
|
-
!Boxen::Hook.all.any?
|
9
|
-
end
|
10
|
-
|
11
|
-
def run
|
12
|
-
::Boxen::Hook.all.each do |hook|
|
13
|
-
warn "DEPRECATION WARNING: Boxen::Hook is deprecated (#{hook})"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require "boxen/postflight"
|
2
|
-
require "json"
|
3
|
-
require "net/http"
|
4
|
-
|
5
|
-
class Boxen::Postflight::WebHook < Boxen::Postflight
|
6
|
-
def ok?
|
7
|
-
!enabled?
|
8
|
-
end
|
9
|
-
|
10
|
-
attr_writer :checkout
|
11
|
-
def checkout
|
12
|
-
@checkout ||= Boxen::Checkout.new(config)
|
13
|
-
end
|
14
|
-
|
15
|
-
def run
|
16
|
-
payload = {
|
17
|
-
:login => config.user,
|
18
|
-
:sha => checkout.sha,
|
19
|
-
:status => command.success? ? 'success' : 'failure',
|
20
|
-
:time => "#{Time.now.utc.to_i}"
|
21
|
-
}
|
22
|
-
|
23
|
-
post_web_hook payload
|
24
|
-
end
|
25
|
-
|
26
|
-
def post_web_hook(payload)
|
27
|
-
headers = { 'Content-Type' => 'application/json' }
|
28
|
-
|
29
|
-
uri = URI.parse(URI.escape(ENV['BOXEN_WEB_HOOK_URL']))
|
30
|
-
|
31
|
-
user, pass, host, port, path = \
|
32
|
-
uri.user, uri.pass, uri.host, uri.port, uri.path
|
33
|
-
|
34
|
-
request = Net::HTTP::Post.new(path, headers)
|
35
|
-
|
36
|
-
if uri.scheme =~ /https/
|
37
|
-
http.use_ssl = true
|
38
|
-
end
|
39
|
-
|
40
|
-
if user && pass
|
41
|
-
request.basic_auth user, pass
|
42
|
-
end
|
43
|
-
|
44
|
-
request.body = payload.to_json
|
45
|
-
|
46
|
-
response = Net::HTTP.new(host, port).start do |http|
|
47
|
-
http.request(request)
|
48
|
-
end
|
49
|
-
|
50
|
-
response
|
51
|
-
end
|
52
|
-
|
53
|
-
def required_environment_variables
|
54
|
-
['BOXEN_WEB_HOOK_URL']
|
55
|
-
end
|
56
|
-
|
57
|
-
def enabled?
|
58
|
-
required_vars = Array(required_environment_variables)
|
59
|
-
required_vars.any? && required_vars.all? do |var|
|
60
|
-
ENV[var] && !ENV[var].empty?
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require "fileutils"
|
2
|
-
require "pathname"
|
3
|
-
|
4
|
-
require "boxen/preflight"
|
5
|
-
|
6
|
-
class Boxen::Preflight::Facts < Boxen::Preflight
|
7
|
-
def ok?
|
8
|
-
write_facts
|
9
|
-
|
10
|
-
true
|
11
|
-
end
|
12
|
-
|
13
|
-
def run
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def facter_d
|
19
|
-
Pathname.new("#{config.homedir}/facts.d")
|
20
|
-
end
|
21
|
-
|
22
|
-
def write_facts
|
23
|
-
FileUtils.mkdir_p facter_d
|
24
|
-
|
25
|
-
write_fact "offline", config.offline?
|
26
|
-
end
|
27
|
-
|
28
|
-
def write_fact(name, value)
|
29
|
-
File.open("#{facter_d}/#{name}.txt", "w") do |f|
|
30
|
-
f.write "#{name}=#{value}\n"
|
31
|
-
end
|
32
|
-
|
33
|
-
debug "Setting global fact `#{name}` to `#{value}`"
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require "boxen/preflight"
|
2
|
-
|
3
|
-
class Boxen::Preflight::Homebrew < Boxen::Preflight
|
4
|
-
def run
|
5
|
-
warn "You have an existing Homebrew install in /usr/local",
|
6
|
-
"The Boxen provides its own Homebrew, so consider deleting yours.",
|
7
|
-
"Keeping both will confuse many projects."
|
8
|
-
end
|
9
|
-
|
10
|
-
def ok?
|
11
|
-
!File.exist? "/usr/local/Library/Homebrew"
|
12
|
-
end
|
13
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require "socket"
|
2
|
-
require "timeout"
|
3
|
-
|
4
|
-
require "boxen/preflight"
|
5
|
-
|
6
|
-
class Boxen::Preflight::Offline < Boxen::Preflight
|
7
|
-
def ok?
|
8
|
-
config.offline = !google_reachable?
|
9
|
-
|
10
|
-
info "Running boxen in offline mode as we couldn't reach google." if config.offline?
|
11
|
-
|
12
|
-
true
|
13
|
-
end
|
14
|
-
|
15
|
-
def run
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def google_reachable?
|
21
|
-
@online = begin
|
22
|
-
timeout(3) do
|
23
|
-
s = TCPSocket.new('google.com', 80)
|
24
|
-
s.close
|
25
|
-
end
|
26
|
-
true
|
27
|
-
rescue Errno::ECONNREFUSED
|
28
|
-
true
|
29
|
-
rescue Timeout::Error, StandardError
|
30
|
-
false
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|