hobo-inviqa 0.0.7.pre.rc3 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +4 -19
- data/Guardfile +2 -2
- data/Hobofile +1 -5
- data/bin/hobo +18 -12
- data/hobo.gemspec +0 -3
- data/lib/hobo.rb +1 -8
- data/lib/hobo/cli.rb +3 -14
- data/lib/hobo/error_handlers/debug.rb +2 -5
- data/lib/hobo/error_handlers/friendly.rb +8 -8
- data/lib/hobo/errors.rb +1 -11
- data/lib/hobo/helper/shell.rb +2 -3
- data/lib/hobo/helper/vm_command.rb +14 -164
- data/lib/hobo/lib/host_check.rb +6 -20
- data/lib/hobo/lib/host_check/deps.rb +4 -22
- data/lib/hobo/lib/host_check/git.rb +17 -41
- data/lib/hobo/lib/host_check/ruby.rb +20 -30
- data/lib/hobo/lib/host_check/vagrant.rb +6 -37
- data/lib/hobo/lib/s3sync.rb +44 -22
- data/lib/hobo/lib/seed/project.rb +4 -8
- data/lib/hobo/patches/slop.rb +2 -21
- data/lib/hobo/tasks/assets.rb +15 -12
- data/lib/hobo/tasks/deps.rb +6 -40
- data/lib/hobo/tasks/host.rb +19 -0
- data/lib/hobo/tasks/tools.rb +6 -10
- data/lib/hobo/tasks/vm.rb +11 -64
- data/lib/hobo/ui.rb +10 -27
- data/lib/hobo/util.rb +2 -36
- data/lib/hobo/version.rb +2 -2
- data/spec/hobo/asset_applicator_spec.rb +2 -2
- data/spec/hobo/cli_spec.rb +24 -35
- data/spec/hobo/config/file_spec.rb +3 -1
- data/spec/hobo/error_handlers/debug_spec.rb +5 -39
- data/spec/hobo/error_handlers/friendly_spec.rb +21 -38
- data/spec/hobo/help_formatter_spec.rb +3 -3
- data/spec/hobo/helpers/file_locator_spec.rb +2 -2
- data/spec/hobo/helpers/shell_spec.rb +2 -2
- data/spec/hobo/helpers/vm_command_spec.rb +24 -36
- data/spec/hobo/lib/s3sync_spec.rb +3 -6
- data/spec/hobo/lib/seed/project_spec.rb +3 -2
- data/spec/hobo/lib/seed/replacer_spec.rb +2 -1
- data/spec/hobo/lib/seed/seed_spec.rb +3 -2
- data/spec/hobo/logging_spec.rb +2 -2
- data/spec/hobo/metadata_spec.rb +2 -2
- data/spec/hobo/null_spec.rb +2 -2
- data/spec/hobo/paths_spec.rb +2 -1
- data/spec/hobo/ui_spec.rb +20 -104
- data/spec/spec_helper.rb +0 -1
- metadata +48 -57
- checksums.yaml +0 -15
- data/.editorconfig +0 -10
- data/lib/hobo/error_handlers/exit_code_map.rb +0 -16
- data/lib/hobo/helper/http_download.rb +0 -41
- data/lib/hobo/tasks/config.rb +0 -15
- data/lib/hobo/tasks/system.rb +0 -15
- data/lib/hobo/tasks/system/completions.rb +0 -76
- data/spec/hobo/util_spec.rb +0 -75
data/lib/hobo/lib/host_check.rb
CHANGED
@@ -4,34 +4,20 @@ module Hobo
|
|
4
4
|
class << self
|
5
5
|
include Hobo::Lib::HostCheck
|
6
6
|
|
7
|
-
def check
|
8
|
-
opts = {
|
9
|
-
:filter => nil,
|
10
|
-
:raise => false
|
11
|
-
}.merge(opts)
|
12
|
-
|
13
|
-
results = {}
|
7
|
+
def check silent = true
|
14
8
|
methods = Hobo::Lib::HostCheck.public_instance_methods(false)
|
15
9
|
methods.each do |method|
|
16
|
-
next if opts[:filter] && !method.match(opts[:filter])
|
17
|
-
|
18
10
|
name = method.to_s.gsub('_', ' ')
|
19
11
|
name[0] = name[0].upcase
|
20
|
-
|
12
|
+
begin
|
21
13
|
self.send method
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
results[name] = :ok
|
26
|
-
rescue Hobo::Error => error
|
27
|
-
results[name] = error
|
28
|
-
end
|
14
|
+
Hobo.ui.success "#{name}: OK" unless silent
|
15
|
+
rescue
|
16
|
+
Hobo.ui.error "#{name}: FAILED" unless silent
|
29
17
|
end
|
30
18
|
end
|
31
|
-
|
32
|
-
return results
|
33
19
|
end
|
34
20
|
end
|
35
21
|
end
|
36
22
|
end
|
37
|
-
end
|
23
|
+
end
|
@@ -2,38 +2,20 @@ module Hobo
|
|
2
2
|
module Lib
|
3
3
|
module HostCheck
|
4
4
|
def ssh_present
|
5
|
-
advice = "The SSH command could not be located on your system.\n\n"
|
6
|
-
|
7
|
-
if OS.windows?
|
8
|
-
advice += "To make SSH available you must re-install git using the installer from http://git-scm.com/downloads ensuring you select the 'Use git and unix tools everywhere' option."
|
9
|
-
else
|
10
|
-
advice += "Please install openssh using your package manager."
|
11
|
-
end
|
12
|
-
|
13
5
|
begin
|
14
6
|
shell "ssh -V"
|
15
7
|
rescue Errno::ENOENT
|
16
|
-
raise Hobo::
|
8
|
+
raise Hobo::MissingDependency.new("ssh")
|
17
9
|
end
|
18
10
|
end
|
19
11
|
|
20
12
|
def php_present
|
21
|
-
advice = <<-EOF
|
22
|
-
The PHP command could not be located on your system.
|
23
|
-
|
24
|
-
This is an optional command that can speed up composer dependency installs.
|
25
|
-
|
26
|
-
Please install it from your package manager ensuring that the following command does not produce any errors:
|
27
|
-
|
28
|
-
php -r "readfile('https://getcomposer.org/installer');" | php
|
29
|
-
EOF
|
30
|
-
|
31
13
|
begin
|
32
|
-
shell "php
|
14
|
+
shell "php -v"
|
33
15
|
rescue Errno::ENOENT
|
34
|
-
raise Hobo::
|
16
|
+
raise Hobo::MissingDependency.new("php")
|
35
17
|
end
|
36
18
|
end
|
37
19
|
end
|
38
20
|
end
|
39
|
-
end
|
21
|
+
end
|
@@ -2,70 +2,46 @@ module Hobo
|
|
2
2
|
module Lib
|
3
3
|
module HostCheck
|
4
4
|
def git_present
|
5
|
-
advice = "The Git command could not be detected on your system.\n\n"
|
6
|
-
if OS.windows?
|
7
|
-
advice += "Please install it from http://git-scm.com/downloads ensuring you select the 'Use git and unix tools everywhere' option."
|
8
|
-
else
|
9
|
-
advice += "Please install it using your package manager."
|
10
|
-
end
|
11
|
-
|
12
5
|
begin
|
13
6
|
shell "git --version"
|
14
7
|
rescue Errno::ENOENT
|
15
|
-
raise Hobo::
|
8
|
+
raise Hobo::MissingDependency.new("ssh")
|
16
9
|
end
|
17
10
|
end
|
18
11
|
|
19
12
|
def git_config_name_set
|
20
|
-
advice = <<-EOF
|
21
|
-
You have not set your name in git config!
|
22
|
-
|
23
|
-
Please do so with the following command:
|
24
|
-
git config --global user.name <your name here>
|
25
|
-
EOF
|
26
13
|
begin
|
27
14
|
shell "git config user.name"
|
28
15
|
rescue Hobo::ExternalCommandError
|
29
|
-
|
16
|
+
Hobo.ui.error "You must provide git with your full name"
|
17
|
+
name = Hobo.ui.ask "Full name"
|
18
|
+
shell "git config --global user.name #{name.shellescape}"
|
30
19
|
end
|
31
20
|
end
|
32
21
|
|
33
22
|
def git_config_email_set
|
34
|
-
advice = <<-EOF
|
35
|
-
You have not set your email in git config!
|
36
|
-
|
37
|
-
Please do so with the following command:
|
38
|
-
git config --global user.email <your email here>
|
39
|
-
EOF
|
40
|
-
|
41
23
|
begin
|
42
24
|
shell "git config user.email"
|
43
25
|
rescue Hobo::ExternalCommandError
|
44
|
-
|
26
|
+
email = Hobo.ui.ask "Email address"
|
27
|
+
shell "git config --global user.email #{email.shellescape}"
|
45
28
|
end
|
46
29
|
end
|
47
30
|
|
48
31
|
def git_autocrlf_disabled
|
49
|
-
return
|
50
|
-
|
51
|
-
advice = <<-EOF
|
52
|
-
You're using git with the core.autocrlf option enabled.
|
53
|
-
|
54
|
-
This setting can often cause problems when you clone a repository on windows but need to execute the contents of that repository within a linux VM.
|
55
|
-
|
56
|
-
You can disable autocrlf globally with the following command:
|
57
|
-
git config --global core.autocrlf false
|
58
|
-
|
59
|
-
Disabling this setting will cause git to see all line endings as changed in a repository that was cloned with it enabled.
|
60
|
-
As such, you must either enable it just for those repositories or delete and re-clone them with the setting disabled.
|
61
|
-
|
62
|
-
You can enable the setting on a per-clone basis by ensuring that you are in the project directory and executing the following command:
|
63
|
-
git config core-autocrlf true
|
64
|
-
EOF
|
32
|
+
return true
|
65
33
|
begin
|
66
34
|
value = shell "git config core.autocrlf", :capture => true
|
67
35
|
if value != "false"
|
68
|
-
|
36
|
+
Hobo.ui.error "You're using git with autocrlf!"
|
37
|
+
Hobo.ui.error "This setting can cause problems executing scripts within VMs."
|
38
|
+
Hobo.ui.error "If you've had it enabled for a while, you'll need to check out all of your repositories again if you change it."
|
39
|
+
disable = Hobo.ui.ask "Would you like to disable this setting?", :default => true
|
40
|
+
if disable
|
41
|
+
shell "git config --global core.autocrlf false"
|
42
|
+
Hobo.ui.success "Disabled autocrlf\nYou can re-enable it by executing `git config --global core.autocrlf true"
|
43
|
+
end
|
44
|
+
|
69
45
|
end
|
70
46
|
rescue Hobo::ExternalCommandError
|
71
47
|
# NOP
|
@@ -73,4 +49,4 @@ EOF
|
|
73
49
|
end
|
74
50
|
end
|
75
51
|
end
|
76
|
-
end
|
52
|
+
end
|
@@ -2,51 +2,41 @@ module Hobo
|
|
2
2
|
module Lib
|
3
3
|
module HostCheck
|
4
4
|
def not_using_system_ruby
|
5
|
-
return if
|
6
|
-
advice = <<-EOF
|
7
|
-
You're using a system ruby install which can cause issues with installing Gems and running some older projects.
|
8
|
-
|
9
|
-
rbenv is HIGHLY recommended.
|
10
|
-
|
11
|
-
You can install it with the following command:
|
12
|
-
curl https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash
|
13
|
-
|
14
|
-
Once installed, run the following to set it as the default ruby and re-install hobo-inviqa:
|
15
|
-
rbenv install 1.9.3-p448 && rbenv global 1.9.3-448 && gem install hobo-inviqa
|
16
|
-
EOF
|
5
|
+
return if Gem.win_platform?
|
17
6
|
which = shell "which ruby", :capture => true
|
18
|
-
unless which =~ /\.
|
19
|
-
|
7
|
+
unless which =~ /\.rbenc|\.rvm/
|
8
|
+
Hobo.ui.error "You're using a system ruby install! rbenv is HIGHLY recommended"
|
9
|
+
Hobo.ui.error "You can install it with the following command:\n"
|
10
|
+
Hobo.ui.error " curl https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash\n"
|
11
|
+
Hobo.ui.error "Once installed, run the following:\n"
|
12
|
+
Hobo.ui.error " rbenv install 1.9.3-p448 && rbenv global 1.9.3-448 && gem install hobo-inviqa"
|
13
|
+
raise "System ruby in use"
|
20
14
|
end
|
21
15
|
end
|
22
16
|
|
23
17
|
def system_paths_for_ruby
|
24
|
-
return if
|
25
|
-
|
26
|
-
advice = <<-EOF
|
27
|
-
The ordering of your system paths may cause a problem with Gems.
|
28
|
-
|
29
|
-
Unfortunately we can't automatically fix this for you at this time.
|
30
|
-
|
31
|
-
Please seek assistance.
|
32
|
-
|
33
|
-
Your paths were detected as:
|
34
|
-
|
35
|
-
#{ENV['PATH'].split(':').join("\n")}
|
36
|
-
EOF
|
37
|
-
|
18
|
+
return if Gem.win_platform?
|
38
19
|
paths = ENV['PATH'].split(':')
|
39
20
|
system_path_found = false
|
40
21
|
ruby_path_found = false
|
41
22
|
paths.each do |path|
|
42
23
|
system_before_ruby = system_path_found && !ruby_path_found
|
43
24
|
ruby_after_system = path =~ /\.rbenv|\.rvm/ && system_path_found
|
44
|
-
raise
|
25
|
+
raise "Bad system paths" if system_before_ruby or ruby_after_system
|
45
26
|
|
46
27
|
ruby_path_found = true if path =~ /\.rbenv|\.rvm/
|
47
28
|
system_path_found = true if path =~ /\/usr\/bin|\/usr\/local\/bin/
|
48
29
|
end
|
49
30
|
end
|
31
|
+
|
32
|
+
def ruby_include_paths
|
33
|
+
paths = $:
|
34
|
+
bad_paths = paths.reject do |path|
|
35
|
+
path.match /\.rbenv|\.rvm/
|
36
|
+
end.compact.length > 0
|
37
|
+
|
38
|
+
raise "Bad gem paths" if bad_paths
|
39
|
+
end
|
50
40
|
end
|
51
41
|
end
|
52
|
-
end
|
42
|
+
end
|
@@ -4,43 +4,12 @@ module Hobo
|
|
4
4
|
module Lib
|
5
5
|
module HostCheck
|
6
6
|
def vagrant_version
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
advice = <<-EOF
|
14
|
-
The version of vagrant which you are using (#{version}) is less than the minimum required (#{minimum_version}).
|
15
|
-
|
16
|
-
Please go to http://www.vagrantup.com/downloads.html and download the latest version for your platform.
|
17
|
-
EOF
|
18
|
-
raise Hobo::HostCheckError.new("Vagrant is too old!", advice) if version < minimum_version
|
19
|
-
rescue Errno::ENOENT
|
20
|
-
advice = <<-EOF
|
21
|
-
Vagrant could not be detected on the path!
|
22
|
-
|
23
|
-
Please go to http://www.vagrantup.com/downloads.html and download the latest version for your platform.
|
24
|
-
EOF
|
25
|
-
raise Hobo::HostCheckError.new("Vagrant is not on the path", advice)
|
26
|
-
rescue Hobo::ExternalCommandError => error
|
27
|
-
advice = <<-EOF
|
28
|
-
Vagrant produced an error while checking its presence.
|
29
|
-
|
30
|
-
This is usually caused by using the vagrant gem which is no longer supported.
|
31
|
-
|
32
|
-
Uninstall any gem version of vagrant with the following command selecting "yes" to any prompt:
|
33
|
-
gem uninstall vagrant
|
34
|
-
|
35
|
-
You can then download and install the latest version from http://www.vagrantup.com/downloads.html
|
36
|
-
|
37
|
-
If you do not have any vagrant gems installed it may be possible that a gem such as vagrant-wrapper is installed and is failing.
|
38
|
-
|
39
|
-
Please seek assistance from #devops if this is the case.
|
40
|
-
EOF
|
41
|
-
raise Hobo::HostCheckError.new("Vagrant produced an error while checking presence", advice)
|
42
|
-
end
|
7
|
+
version = shell "vagrant --version", :capture => true
|
8
|
+
version.gsub!(/^Vagrant /, '')
|
9
|
+
version = ::Semantic::Version.new version
|
10
|
+
minimum_version = ::Semantic::Version.new "1.3.5"
|
11
|
+
raise "Vagrant too old" if version < minimum_version
|
43
12
|
end
|
44
13
|
end
|
45
14
|
end
|
46
|
-
end
|
15
|
+
end
|
data/lib/hobo/lib/s3sync.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'aws-sdk'
|
2
2
|
require 'fileutils'
|
3
|
+
require 'ruby-progressbar'
|
3
4
|
|
4
5
|
module Hobo
|
5
6
|
module Lib
|
@@ -10,8 +11,7 @@ module Hobo
|
|
10
11
|
opts = {
|
11
12
|
:access_key_id => key_id,
|
12
13
|
:secret_access_key => secret,
|
13
|
-
:verify_response_body_content_length => false
|
14
|
-
:max_retries => 15
|
14
|
+
:verify_response_body_content_length => false
|
15
15
|
}
|
16
16
|
|
17
17
|
logger.debug("s3sync: Options #{opts}")
|
@@ -19,8 +19,26 @@ module Hobo
|
|
19
19
|
@s3 = AWS::S3.new opts
|
20
20
|
end
|
21
21
|
|
22
|
+
def delta source, dest
|
23
|
+
to_add = (source.sort - dest.sort).map(&:first)
|
24
|
+
to_remove = (dest.sort - source.sort).map(&:first)
|
25
|
+
to_remove = to_remove - to_add
|
26
|
+
|
27
|
+
{
|
28
|
+
:add => to_add,
|
29
|
+
:remove => to_remove
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def io_handler uri
|
34
|
+
parsed = URI.parse(uri)
|
35
|
+
parsed.scheme == 's3' ?
|
36
|
+
Remote.new(@s3, parsed.host, parsed.path) :
|
37
|
+
Local.new(uri)
|
38
|
+
end
|
39
|
+
|
22
40
|
def sync source, dest, opts = {}
|
23
|
-
opts = { :progress =>
|
41
|
+
opts = { :progress => method(:progress) }.merge(opts)
|
24
42
|
|
25
43
|
source_io = io_handler(source)
|
26
44
|
destination_io = io_handler(dest)
|
@@ -44,17 +62,19 @@ module Hobo
|
|
44
62
|
|
45
63
|
source_file.buffer
|
46
64
|
|
65
|
+
written = 0
|
47
66
|
size = source_file.size
|
48
67
|
destination_file.write({ :size => source_file.size }) do |buffer, bytes|
|
49
68
|
chunk = source_file.read(bytes)
|
50
69
|
buffer.write(chunk)
|
51
|
-
|
70
|
+
written += chunk.length
|
71
|
+
opts[:progress].call(file, written, size, :update)
|
52
72
|
end
|
53
73
|
|
54
74
|
destination_file.close
|
55
75
|
source_file.close
|
56
76
|
|
57
|
-
opts[:progress].call(file,
|
77
|
+
opts[:progress].call(file, written, size, :finish)
|
58
78
|
end
|
59
79
|
|
60
80
|
delta[:remove].each do |file|
|
@@ -65,26 +85,28 @@ module Hobo
|
|
65
85
|
return delta
|
66
86
|
end
|
67
87
|
|
68
|
-
|
88
|
+
def progress file, written, total, type
|
89
|
+
opts = {
|
90
|
+
:title => file,
|
91
|
+
:total => total,
|
92
|
+
:format => "%t [%B] %p%% %e"
|
93
|
+
}
|
69
94
|
|
70
|
-
|
71
|
-
|
72
|
-
to_remove = (dest.sort - source.sort).map(&:first)
|
73
|
-
to_remove = to_remove - to_add
|
95
|
+
# Hack to stop newline spam on windows
|
96
|
+
opts[:length] = 79 if Gem::win_platform?
|
74
97
|
|
75
|
-
{
|
76
|
-
|
77
|
-
:remove => to_remove
|
78
|
-
}
|
79
|
-
end
|
98
|
+
@progress ||= {}
|
99
|
+
@progress[file] ||= ProgressBar.create(opts)
|
80
100
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
101
|
+
case type
|
102
|
+
when :update
|
103
|
+
@progress[file].progress = written
|
104
|
+
when :finished
|
105
|
+
@progress[file].finish
|
106
|
+
end
|
86
107
|
end
|
87
108
|
|
109
|
+
|
88
110
|
class Local
|
89
111
|
include Hobo::Logging
|
90
112
|
|
@@ -110,7 +132,7 @@ module Hobo
|
|
110
132
|
end
|
111
133
|
|
112
134
|
def rm file
|
113
|
-
File.unlink
|
135
|
+
File.unlink file
|
114
136
|
end
|
115
137
|
end
|
116
138
|
|
@@ -213,4 +235,4 @@ module Hobo
|
|
213
235
|
end
|
214
236
|
end
|
215
237
|
end
|
216
|
-
end
|
238
|
+
end
|
@@ -16,6 +16,9 @@ module Hobo
|
|
16
16
|
config[:seed][:version] = seed.version
|
17
17
|
config[:hostname] = "#{config[:name]}.development.local"
|
18
18
|
config[:asset_bucket] = "inviqa-assets-#{config[:name]}"
|
19
|
+
config[:mysql] = {
|
20
|
+
:password => "984C42CF342f7j6" # Packer default password
|
21
|
+
}
|
19
22
|
|
20
23
|
@opts[:replacer].replace(config[:project_path], config)
|
21
24
|
load_seed_init(config)
|
@@ -41,17 +44,10 @@ module Hobo
|
|
41
44
|
def initialize_git path, git_url
|
42
45
|
Dir.chdir path do
|
43
46
|
Hobo::Helper.shell 'git', 'init'
|
47
|
+
Hobo::Helper.shell 'git', 'remote', 'add', 'origin', git_url
|
44
48
|
Hobo::Helper.shell 'git', 'add', '--all'
|
45
49
|
Hobo::Helper.shell 'git', 'commit', '-m', "'Initial hobo project'"
|
46
50
|
Hobo::Helper.shell 'git', 'checkout', '-b', 'develop'
|
47
|
-
|
48
|
-
# Github for windows gets clever adding origin / upstream remotes in system level gitconfig
|
49
|
-
# :facepalm:
|
50
|
-
begin
|
51
|
-
Hobo::Helper.shell 'git', 'remote', 'add', 'origin', git_url
|
52
|
-
rescue Hobo::ExternalCommandError
|
53
|
-
Hobo::Helper.shell 'git', 'remote', 'set-url', 'origin', git_url
|
54
|
-
end
|
55
51
|
end
|
56
52
|
end
|
57
53
|
end
|