hobo-inviqa 0.0.4 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +27 -6
- data/README.md +1 -10
- data/bin/hobo +20 -0
- data/features/hobo/help.feature +5 -1
- data/hobo.gemspec +4 -0
- data/lib/hobo.rb +17 -14
- data/lib/hobo/asset_applicator.rb +16 -0
- data/lib/hobo/cli.rb +40 -20
- data/lib/hobo/config.rb +5 -0
- data/lib/hobo/config/file.rb +3 -1
- data/lib/hobo/errors.rb +8 -1
- data/lib/hobo/help_formatter.rb +8 -1
- data/lib/hobo/helper/file_locator.rb +8 -5
- data/lib/hobo/helper/shell.rb +12 -4
- data/lib/hobo/helper/vm_command.rb +67 -0
- data/lib/hobo/lib/host_check.rb +23 -0
- data/lib/hobo/lib/host_check/deps.rb +21 -0
- data/lib/hobo/lib/host_check/git.rb +52 -0
- data/lib/hobo/lib/host_check/ruby.rb +42 -0
- data/lib/hobo/lib/host_check/vagrant.rb +15 -0
- data/lib/hobo/lib/s3sync.rb +233 -0
- data/lib/hobo/lib/seed/project.rb +12 -0
- data/lib/hobo/lib/seed/seed.rb +19 -0
- data/lib/hobo/logging.rb +22 -0
- data/lib/hobo/metadata.rb +7 -1
- data/lib/hobo/null.rb +31 -0
- data/lib/hobo/patches/deepstruct.rb +23 -0
- data/lib/hobo/patches/rake.rb +14 -1
- data/lib/hobo/patches/slop.rb +11 -1
- data/lib/hobo/paths.rb +8 -3
- data/lib/hobo/tasks/assets.rb +96 -0
- data/lib/hobo/tasks/console.rb +18 -0
- data/lib/hobo/tasks/debug.rb +2 -2
- data/lib/hobo/tasks/deps.rb +1 -1
- data/lib/hobo/tasks/host.rb +17 -0
- data/lib/hobo/tasks/vm.rb +2 -2
- data/lib/hobo/ui.rb +21 -16
- data/lib/hobo/version.rb +1 -1
- data/spec/hobo/asset_applicator_spec.rb +31 -0
- data/spec/hobo/cli_spec.rb +115 -97
- data/spec/hobo/config/file_spec.rb +13 -3
- data/spec/hobo/help_formatter_spec.rb +50 -18
- data/spec/hobo/helpers/file_locator_spec.rb +5 -1
- data/spec/hobo/helpers/shell_spec.rb +15 -1
- data/spec/hobo/helpers/vm_command_spec.rb +85 -0
- data/spec/hobo/lib/s3sync_spec.rb +13 -0
- data/spec/hobo/lib/seed/project_spec.rb +7 -8
- data/spec/hobo/lib/seed/seed_spec.rb +3 -4
- data/spec/hobo/logging_spec.rb +28 -0
- data/spec/hobo/metadata_spec.rb +10 -0
- data/spec/hobo/null_spec.rb +31 -0
- data/spec/hobo/paths_spec.rb +6 -6
- data/spec/hobo/ui_spec.rb +4 -0
- metadata +93 -6
- data/features/vm.feature +0 -0
data/Gemfile.lock
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hobo-inviqa (0.0.
|
4
|
+
hobo-inviqa (0.0.6)
|
5
|
+
aws-sdk (~> 1.34.0)
|
5
6
|
bundler (~> 1.5.2)
|
7
|
+
deepstruct (~> 0.0.5)
|
6
8
|
highline (~> 1.6.20)
|
7
9
|
rake (~> 10.1.1)
|
8
10
|
rake-hooks (~> 1.2.3)
|
11
|
+
ruby-progressbar (~> 1.4.1)
|
12
|
+
semantic (~> 1.3.0)
|
9
13
|
slop (~> 3.4.7)
|
10
14
|
|
11
15
|
GEM
|
@@ -15,10 +19,17 @@ GEM
|
|
15
19
|
childprocess (>= 0.3.6)
|
16
20
|
cucumber (>= 1.1.1)
|
17
21
|
rspec-expectations (>= 2.7.0)
|
22
|
+
aws-sdk (1.34.0)
|
23
|
+
json (~> 1.4)
|
24
|
+
nokogiri (>= 1.4.4)
|
25
|
+
uuidtools (~> 2.1)
|
18
26
|
builder (3.2.2)
|
19
27
|
celluloid (0.15.2)
|
20
28
|
timers (~> 1.1.0)
|
21
|
-
|
29
|
+
celluloid-io (0.15.0)
|
30
|
+
celluloid (>= 0.15.0)
|
31
|
+
nio4r (>= 0.5.0)
|
32
|
+
childprocess (0.5.1)
|
22
33
|
ffi (~> 1.0, >= 1.0.11)
|
23
34
|
coderay (1.1.0)
|
24
35
|
cucumber (1.3.10)
|
@@ -27,6 +38,7 @@ GEM
|
|
27
38
|
gherkin (~> 2.12)
|
28
39
|
multi_json (>= 1.7.5, < 2.0)
|
29
40
|
multi_test (>= 0.0.2)
|
41
|
+
deepstruct (0.0.5)
|
30
42
|
diff-lcs (1.2.5)
|
31
43
|
fakefs (0.5.0)
|
32
44
|
ffi (1.9.3)
|
@@ -42,18 +54,24 @@ GEM
|
|
42
54
|
guard-cucumber (1.4.1)
|
43
55
|
cucumber (>= 1.2.0)
|
44
56
|
guard (>= 1.1.0)
|
45
|
-
guard-rspec (4.2.
|
57
|
+
guard-rspec (4.2.6)
|
46
58
|
guard (~> 2.1)
|
47
59
|
rspec (>= 2.14, < 4.0)
|
48
60
|
highline (1.6.20)
|
49
|
-
|
61
|
+
json (1.8.1)
|
62
|
+
listen (2.5.0)
|
50
63
|
celluloid (>= 0.15.2)
|
64
|
+
celluloid-io (>= 0.15.0)
|
51
65
|
rb-fsevent (>= 0.9.3)
|
52
66
|
rb-inotify (>= 0.9)
|
53
67
|
lumberjack (1.0.4)
|
54
68
|
method_source (0.8.2)
|
69
|
+
mini_portile (0.5.2)
|
55
70
|
multi_json (1.8.4)
|
56
71
|
multi_test (0.0.3)
|
72
|
+
nio4r (1.0.0)
|
73
|
+
nokogiri (1.6.1)
|
74
|
+
mini_portile (~> 0.5.0)
|
57
75
|
pry (0.9.12.6)
|
58
76
|
coderay (~> 1.0)
|
59
77
|
method_source (~> 0.8)
|
@@ -70,12 +88,15 @@ GEM
|
|
70
88
|
rspec-expectations (~> 2.14.0)
|
71
89
|
rspec-mocks (~> 2.14.0)
|
72
90
|
rspec-core (2.14.7)
|
73
|
-
rspec-expectations (2.14.
|
91
|
+
rspec-expectations (2.14.5)
|
74
92
|
diff-lcs (>= 1.1.3, < 2.0)
|
75
|
-
rspec-mocks (2.14.
|
93
|
+
rspec-mocks (2.14.5)
|
94
|
+
ruby-progressbar (1.4.1)
|
95
|
+
semantic (1.3.0)
|
76
96
|
slop (3.4.7)
|
77
97
|
thor (0.18.1)
|
78
98
|
timers (1.1.0)
|
99
|
+
uuidtools (2.1.4)
|
79
100
|
|
80
101
|
PLATFORMS
|
81
102
|
ruby
|
data/README.md
CHANGED
@@ -50,16 +50,7 @@ hobo my-project download-files
|
|
50
50
|
```
|
51
51
|
|
52
52
|
# Rake DSL enhancements
|
53
|
-
|
54
|
-
|
55
|
-
- long_desc - Long description provided by help
|
56
|
-
- option - Specify command line option
|
57
|
-
- hidden - Hide task
|
58
|
-
- replace - Replace a task with a new one
|
59
|
-
- before - Execute task before other task
|
60
|
-
- after - Execute task after other task
|
61
|
-
|
62
|
-
Please note that replace, before and after should be used sparingly to augment or modify the internal tasks provided by hobo on a per project level.
|
53
|
+
Please see https://github.com/inviqa/hobo-gem/wiki/Hobofile-DSL for comprehensive examples.
|
63
54
|
|
64
55
|
# Contributing
|
65
56
|
If you wish to contribute to hobo:
|
data/bin/hobo
CHANGED
@@ -8,6 +8,16 @@ require 'slop'
|
|
8
8
|
|
9
9
|
error_handler = Hobo::ErrorHandlers::Friendly.new
|
10
10
|
Hobo.ui = Hobo::Ui.new
|
11
|
+
Hobo.logger = Logger.new(STDOUT)
|
12
|
+
Hobo.logger.level = Logger::WARN
|
13
|
+
Hobo.logger.formatter = proc do |severity, datetime, progname, msg|
|
14
|
+
"#{datetime.strftime("%Y-%m-%d %H:%M:%S")}: #{severity}: #{msg}\n"
|
15
|
+
end
|
16
|
+
|
17
|
+
# win32console unfortunately has issues with Open3
|
18
|
+
# Simply disabling color for now; --ansi can be explicitly passed if required
|
19
|
+
# We also take the opportunity to disable ansi for pipes
|
20
|
+
Hobo.ui.use_color false if Gem.win_platform? || !STDOUT.tty?
|
11
21
|
|
12
22
|
# win32console unfortunately has issues with Open3
|
13
23
|
# Simply disabling color for now; --ansi can be explicitly passed if required
|
@@ -18,6 +28,16 @@ Hobo.ui.use_color false if Gem.win_platform? || !STDOUT.tty?
|
|
18
28
|
slop = Slop.parse! do
|
19
29
|
on '--debug', 'Enable debugging' do
|
20
30
|
error_handler = Hobo::ErrorHandlers::Debug.new
|
31
|
+
Hobo.logger.level = Logger::DEBUG
|
32
|
+
end
|
33
|
+
|
34
|
+
on '--ansi', 'Enable / disable ansi output', :invertable => true do
|
35
|
+
Hobo.ui.use_color self.to_hash[:ansi]
|
36
|
+
end
|
37
|
+
|
38
|
+
on '--log-level=', 'Set log level' do
|
39
|
+
level = self.to_hash[:'log-level'].upcase
|
40
|
+
Hobo.logger.level = Logger.const_get(level) if [ 'DEBUG', 'INFO' ].include? level
|
21
41
|
end
|
22
42
|
|
23
43
|
on '--ansi', 'Enable / disable ansi output' do |*args|
|
data/features/hobo/help.feature
CHANGED
@@ -9,4 +9,8 @@ Feature: Hobo help
|
|
9
9
|
When I run `hobo --help`
|
10
10
|
Then the output should contain "Usage:"
|
11
11
|
And the output should contain "Global options:"
|
12
|
-
And the output should contain "Commands:"
|
12
|
+
And the output should contain "Commands:"
|
13
|
+
|
14
|
+
Scenario: --ansi should show invertable help
|
15
|
+
When I run `hobo --help`
|
16
|
+
Then the output should contain "(Disable with --no-ansi)"
|
data/hobo.gemspec
CHANGED
@@ -23,6 +23,10 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency "rake", "~> 10.1.1"
|
24
24
|
spec.add_dependency "rake-hooks", "~> 1.2.3"
|
25
25
|
spec.add_dependency "bundler", "~> 1.5.2"
|
26
|
+
spec.add_dependency "deepstruct", "~> 0.0.5"
|
27
|
+
spec.add_dependency "semantic", "~> 1.3.0"
|
28
|
+
spec.add_dependency "aws-sdk", "~> 1.34.0"
|
29
|
+
spec.add_dependency "ruby-progressbar", "~> 1.4.1"
|
26
30
|
|
27
31
|
spec.add_development_dependency "aruba", "~> 0.5.4"
|
28
32
|
spec.add_development_dependency "rspec", "~> 2.14.1"
|
data/lib/hobo.rb
CHANGED
@@ -1,24 +1,19 @@
|
|
1
1
|
# External deps
|
2
2
|
require 'rake'
|
3
3
|
require 'rake/hooks'
|
4
|
-
require 'slop'
|
5
|
-
require 'highline'
|
6
|
-
require 'open3'
|
7
4
|
require 'tempfile'
|
8
5
|
require 'shellwords'
|
9
|
-
require '
|
6
|
+
require 'deepstruct'
|
10
7
|
|
11
8
|
# DSL enhancements
|
12
9
|
require 'hobo/metadata'
|
13
10
|
require 'hobo/patches/rake'
|
14
11
|
require 'hobo/patches/slop'
|
15
|
-
|
16
|
-
# Task helpers
|
17
|
-
require 'hobo/helper/shell'
|
18
|
-
require 'hobo/helper/file_locator'
|
12
|
+
require 'hobo/patches/deepstruct'
|
19
13
|
|
20
14
|
# Basics
|
21
15
|
require 'hobo/version'
|
16
|
+
require 'hobo/null'
|
22
17
|
require 'hobo/paths'
|
23
18
|
require 'hobo/errors'
|
24
19
|
require 'hobo/ui'
|
@@ -27,18 +22,26 @@ require 'hobo/help_formatter'
|
|
27
22
|
require 'hobo/error_handlers/debug'
|
28
23
|
require 'hobo/error_handlers/friendly'
|
29
24
|
require 'hobo/config/file'
|
25
|
+
require 'hobo/logging'
|
26
|
+
require 'hobo/config'
|
27
|
+
require 'hobo/asset_applicator'
|
28
|
+
|
29
|
+
# Task helpers
|
30
|
+
require 'hobo/helper/shell'
|
31
|
+
require 'hobo/helper/file_locator'
|
32
|
+
require 'hobo/helper/vm_command'
|
30
33
|
|
31
34
|
# Libs
|
32
35
|
require 'hobo/lib/seed/project'
|
33
36
|
require 'hobo/lib/seed/replacer'
|
34
37
|
require 'hobo/lib/seed/seed'
|
35
38
|
|
36
|
-
#
|
37
|
-
require 'hobo/
|
38
|
-
require 'hobo/
|
39
|
-
require 'hobo/
|
40
|
-
require 'hobo/
|
41
|
-
require 'hobo/
|
39
|
+
# Host checks
|
40
|
+
require 'hobo/lib/host_check/git'
|
41
|
+
require 'hobo/lib/host_check/vagrant'
|
42
|
+
require 'hobo/lib/host_check/ruby'
|
43
|
+
require 'hobo/lib/host_check/deps'
|
44
|
+
require 'hobo/lib/host_check'
|
42
45
|
|
43
46
|
# App
|
44
47
|
require 'hobo/cli'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Hobo
|
2
|
+
class << self
|
3
|
+
attr_accessor :asset_applicators
|
4
|
+
def asset_applicators
|
5
|
+
@asset_applicators ||= AssetApplicatorRegistry.new
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
class AssetApplicatorRegistry < Hash
|
12
|
+
def register pattern, &block
|
13
|
+
self[pattern] = block
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/hobo/cli.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
+
require 'slop'
|
2
|
+
require 'deepstruct'
|
3
|
+
|
1
4
|
module Hobo
|
2
5
|
|
3
6
|
class Halt < Error
|
4
7
|
end
|
5
8
|
|
6
9
|
class Cli
|
10
|
+
include Hobo::Logging
|
11
|
+
|
7
12
|
attr_accessor :slop, :help_formatter
|
8
13
|
|
9
14
|
def initialize opts = {}
|
@@ -13,11 +18,13 @@ module Hobo
|
|
13
18
|
@help_opts = {}
|
14
19
|
end
|
15
20
|
|
16
|
-
def start
|
17
|
-
|
21
|
+
def start args = ARGV
|
22
|
+
load_user_config
|
23
|
+
load_builtin_tasks
|
24
|
+
load_hobofiles
|
25
|
+
load_project_config
|
18
26
|
|
19
27
|
tasks = structure_tasks Hobo::Metadata.metadata.keys
|
20
|
-
args = fix_args_with_equals argv
|
21
28
|
define_global_opts @slop
|
22
29
|
|
23
30
|
begin
|
@@ -54,13 +61,38 @@ module Hobo
|
|
54
61
|
|
55
62
|
private
|
56
63
|
|
57
|
-
def
|
64
|
+
def load_builtin_tasks
|
65
|
+
require 'hobo/tasks/assets'
|
66
|
+
require 'hobo/tasks/console'
|
67
|
+
require 'hobo/tasks/debug'
|
68
|
+
require 'hobo/tasks/deps'
|
69
|
+
require 'hobo/tasks/host'
|
70
|
+
require 'hobo/tasks/seed'
|
71
|
+
require 'hobo/tasks/vm'
|
72
|
+
require 'hobo/tasks/tools'
|
73
|
+
end
|
74
|
+
|
75
|
+
def load_user_config
|
76
|
+
Hobo.user_config = Hobo::Config::File.load Hobo.user_config_file
|
77
|
+
end
|
78
|
+
|
79
|
+
def load_project_config
|
80
|
+
if Hobo.in_project?
|
81
|
+
Hobo.project_config = Hobo::Config::File.load Hobo.project_config_file
|
82
|
+
else
|
83
|
+
Hobo.project_config = DeepStruct.wrap({})
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def load_hobofiles
|
58
88
|
if Hobo.in_project? && File.exists?(Hobo.hobofile_path)
|
59
|
-
|
89
|
+
logger.debug("cli: Loading hobofile @ #{Hobo.hobofile_path}")
|
90
|
+
TOPLEVEL_BINDING.eval File.read(Hobo.hobofile_path)
|
60
91
|
end
|
61
92
|
|
62
93
|
if File.exists?(Hobo.user_hobofile_path)
|
63
|
-
|
94
|
+
logger.debug("cli: Loading hobofile @ #{Hobo.user_hobofile_path}")
|
95
|
+
TOPLEVEL_BINDING.eval File.read(Hobo.user_hobofile_path)
|
64
96
|
end
|
65
97
|
end
|
66
98
|
|
@@ -83,6 +115,7 @@ module Hobo
|
|
83
115
|
structured_list.each do |k, v|
|
84
116
|
name = (stack + [k]).join(':')
|
85
117
|
new_stack = stack + [k]
|
118
|
+
logger.debug("cli: Defined #{name}")
|
86
119
|
map[name] = if v.size == 0
|
87
120
|
define_command(name, scope, new_stack)
|
88
121
|
else
|
@@ -144,6 +177,7 @@ module Hobo
|
|
144
177
|
end
|
145
178
|
|
146
179
|
run do |opts, args|
|
180
|
+
Dir.chdir Hobo.project_path if Hobo.in_project?
|
147
181
|
raise ::Hobo::ProjectOnlyError.new if opts.project_only && !Hobo.in_project?
|
148
182
|
task.opts = opts.to_hash
|
149
183
|
raise ::Hobo::MissingArgumentsError.new(name, args, hobo) if args && task.arg_names.length > args.length
|
@@ -170,19 +204,5 @@ module Hobo
|
|
170
204
|
end
|
171
205
|
out
|
172
206
|
end
|
173
|
-
|
174
|
-
# Slop badly handles assignment args passed as --arg=val
|
175
|
-
# This hack fixes that by making them --arg val
|
176
|
-
def fix_args_with_equals args
|
177
|
-
items = []
|
178
|
-
args.each do |item|
|
179
|
-
if item.match /^-.*\=/
|
180
|
-
item.split('=').each { |i| items.push i }
|
181
|
-
else
|
182
|
-
items.push item
|
183
|
-
end
|
184
|
-
end
|
185
|
-
return items
|
186
|
-
end
|
187
207
|
end
|
188
208
|
end
|
data/lib/hobo/config.rb
ADDED
data/lib/hobo/config/file.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'deepstruct'
|
2
3
|
|
3
4
|
module Hobo
|
4
5
|
module Config
|
5
6
|
class File
|
6
7
|
def self.save(file, config)
|
8
|
+
config = config.unwrap if config.respond_to? :unwrap
|
7
9
|
dir = ::File.dirname file
|
8
10
|
FileUtils.mkdir_p dir unless ::File.exists? dir
|
9
11
|
::File.open(file, 'w+') do |f|
|
@@ -14,7 +16,7 @@ module Hobo
|
|
14
16
|
def self.load(file)
|
15
17
|
config = ::File.exists?(file) ? YAML.load_file(file) : {}
|
16
18
|
raise "Invalid hobo configuration (#{file})" unless config
|
17
|
-
return config
|
19
|
+
return DeepStruct.wrap(config)
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
data/lib/hobo/errors.rb
CHANGED
@@ -54,7 +54,14 @@ module Hobo
|
|
54
54
|
class NonInteractiveError < Error
|
55
55
|
def initialize question
|
56
56
|
@question = question
|
57
|
-
super("A task requested input from user but hobo is in non-interactive mode")
|
57
|
+
super("A task requested input from the user but hobo is in non-interactive mode")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class MissingDependency < Error
|
62
|
+
def initialize dep
|
63
|
+
@dependency = dep
|
64
|
+
super("A tool that hobo depends on could not be detected (#{dep})")
|
58
65
|
end
|
59
66
|
end
|
60
67
|
end
|
data/lib/hobo/help_formatter.rb
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
require 'slop'
|
2
|
+
require 'highline'
|
3
|
+
require 'hobo/ui'
|
4
|
+
require 'hobo/patches/slop'
|
5
|
+
|
1
6
|
module Hobo
|
2
7
|
class HelpFormatter
|
3
8
|
attr_accessor :command_map
|
@@ -60,8 +65,10 @@ module Hobo
|
|
60
65
|
(heads + tails).map do |opt|
|
61
66
|
next if source != @global && opt.short == 'h'
|
62
67
|
line = padded(opt.short ? "-#{opt.short}," : "", 4)
|
68
|
+
description = opt.description
|
63
69
|
|
64
70
|
if opt.long
|
71
|
+
description += ". (Disable with --no-#{opt.long})" if opt.config[:invertable]
|
65
72
|
value = opt.config[:argument] ? "#{opt.long.upcase}" : ""
|
66
73
|
value = "[#{value}]" if opt.accepts_optional_argument?
|
67
74
|
value = "=#{value}" unless value.empty?
|
@@ -69,7 +76,7 @@ module Hobo
|
|
69
76
|
line += "--#{opt.long}#{value}"
|
70
77
|
end
|
71
78
|
|
72
|
-
[Hobo.ui.color(line, :opt),
|
79
|
+
[Hobo.ui.color(line, :opt), description]
|
73
80
|
end.compact
|
74
81
|
end
|
75
82
|
|
@@ -22,16 +22,19 @@ module Hobo
|
|
22
22
|
args = [ 'git', 'ls-files', pattern ]
|
23
23
|
args.push '-o' if others
|
24
24
|
output = Hobo::Helper.shell *args, :capture => true
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
paths = output.split("\n")
|
26
|
+
found = false
|
27
|
+
paths.each do |path|
|
28
28
|
path.strip!
|
29
29
|
Dir.chdir File.dirname(path) do
|
30
|
-
|
30
|
+
Hobo::Logging.logger.debug "helper.locator: Found #{path} for #{pattern}"
|
31
|
+
yield File.basename(path), path
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
+
found = true
|
34
35
|
end
|
36
|
+
|
37
|
+
return found
|
35
38
|
end
|
36
39
|
end
|
37
40
|
end
|