hem 1.0.1.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +10 -0
- data/.gitignore +3 -0
- data/.rspec +2 -0
- data/CHANGELOG.md +125 -0
- data/DoD.md +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +71 -0
- data/Guardfile +14 -0
- data/Hemfile +43 -0
- data/LICENSE +21 -0
- data/README.md +42 -0
- data/Rakefile +23 -0
- data/bin/hem +64 -0
- data/features/deps.feature +43 -0
- data/features/hem/basic.feature +43 -0
- data/features/hem/help.feature +16 -0
- data/features/hem/subcommands.feature +15 -0
- data/features/seed/plant.feature +64 -0
- data/features/step_definitions/env.rb +6 -0
- data/features/step_definitions/seed.rb +11 -0
- data/features/support/env.rb +6 -0
- data/hem.gemspec +47 -0
- data/lib/hem/asset_applicator.rb +33 -0
- data/lib/hem/asset_applicators/files.rb +5 -0
- data/lib/hem/asset_applicators/sqldump.rb +38 -0
- data/lib/hem/cli.rb +252 -0
- data/lib/hem/config/file.rb +22 -0
- data/lib/hem/config.rb +5 -0
- data/lib/hem/error_handlers/debug.rb +12 -0
- data/lib/hem/error_handlers/exit_code_map.rb +17 -0
- data/lib/hem/error_handlers/friendly.rb +58 -0
- data/lib/hem/errors.rb +89 -0
- data/lib/hem/help_formatter.rb +118 -0
- data/lib/hem/helper/file_locator.rb +44 -0
- data/lib/hem/helper/github.rb +10 -0
- data/lib/hem/helper/http_download.rb +41 -0
- data/lib/hem/helper/shell.rb +101 -0
- data/lib/hem/helper/vm_command.rb +30 -0
- data/lib/hem/lib/github/api.rb +48 -0
- data/lib/hem/lib/github/client.rb +52 -0
- data/lib/hem/lib/host_check/deps.rb +39 -0
- data/lib/hem/lib/host_check/git.rb +76 -0
- data/lib/hem/lib/host_check/ruby.rb +53 -0
- data/lib/hem/lib/host_check/vagrant.rb +45 -0
- data/lib/hem/lib/host_check.rb +34 -0
- data/lib/hem/lib/s3/local/file.rb +40 -0
- data/lib/hem/lib/s3/local/iohandler.rb +36 -0
- data/lib/hem/lib/s3/remote/file.rb +57 -0
- data/lib/hem/lib/s3/remote/iohandler.rb +38 -0
- data/lib/hem/lib/s3/sync.rb +134 -0
- data/lib/hem/lib/seed/project.rb +71 -0
- data/lib/hem/lib/seed/replacer.rb +56 -0
- data/lib/hem/lib/seed/seed.rb +111 -0
- data/lib/hem/lib/self_signed_cert_generator.rb +38 -0
- data/lib/hem/lib/vm/command.rb +131 -0
- data/lib/hem/lib/vm/inspector.rb +73 -0
- data/lib/hem/logging.rb +20 -0
- data/lib/hem/metadata.rb +42 -0
- data/lib/hem/null.rb +31 -0
- data/lib/hem/patches/deepstruct.rb +21 -0
- data/lib/hem/patches/rake.rb +101 -0
- data/lib/hem/patches/rubygems.rb +6 -0
- data/lib/hem/patches/slop.rb +69 -0
- data/lib/hem/paths.rb +96 -0
- data/lib/hem/tasks/assets.rb +92 -0
- data/lib/hem/tasks/config.rb +15 -0
- data/lib/hem/tasks/deps.rb +103 -0
- data/lib/hem/tasks/exec.rb +3 -0
- data/lib/hem/tasks/magento.rb +281 -0
- data/lib/hem/tasks/ops.rb +6 -0
- data/lib/hem/tasks/pr.rb +45 -0
- data/lib/hem/tasks/seed.rb +61 -0
- data/lib/hem/tasks/self.rb +45 -0
- data/lib/hem/tasks/shell_init.rb +25 -0
- data/lib/hem/tasks/system/completions.rb +76 -0
- data/lib/hem/tasks/system.rb +18 -0
- data/lib/hem/tasks/tools.rb +17 -0
- data/lib/hem/tasks/vm.rb +140 -0
- data/lib/hem/ui.rb +182 -0
- data/lib/hem/util.rb +76 -0
- data/lib/hem/version.rb +3 -0
- data/lib/hem.rb +72 -0
- data/lib/hobo/tasks/magento.rb +3 -0
- data/spec/hem/asset_applicator_spec.rb +30 -0
- data/spec/hem/cli_spec.rb +166 -0
- data/spec/hem/config/file_spec.rb +55 -0
- data/spec/hem/error_handlers/debug_spec.rb +43 -0
- data/spec/hem/error_handlers/friendly_spec.rb +97 -0
- data/spec/hem/error_spec.rb +0 -0
- data/spec/hem/help_formatter_spec.rb +162 -0
- data/spec/hem/helpers/file_locator_spec.rb +11 -0
- data/spec/hem/helpers/github_spec.rb +31 -0
- data/spec/hem/helpers/shell_spec.rb +22 -0
- data/spec/hem/helpers/vm_command_spec.rb +96 -0
- data/spec/hem/lib/github/api_spec.rb +92 -0
- data/spec/hem/lib/s3/sync_spec.rb +16 -0
- data/spec/hem/lib/seed/project_spec.rb +80 -0
- data/spec/hem/lib/seed/replacer_spec.rb +45 -0
- data/spec/hem/lib/seed/seed_spec.rb +127 -0
- data/spec/hem/logging_spec.rb +27 -0
- data/spec/hem/metadata_spec.rb +55 -0
- data/spec/hem/null_spec.rb +30 -0
- data/spec/hem/patches/rake_spec.rb +230 -0
- data/spec/hem/paths_spec.rb +75 -0
- data/spec/hem/ui_spec.rb +189 -0
- data/spec/hem/util_spec.rb +74 -0
- data/spec/spec_helper.rb +12 -0
- data/ssl/ca-bundle-s3.crt +3554 -0
- data/test_files/vagrant_fail/vagrant +2 -0
- metadata +339 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: de1021c2b7f5bfe996e119f41ee6c7b2eac65839
|
4
|
+
data.tar.gz: b79fb7a3564ca815336a89c0a5fc2f7d66d078a3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e4bc3b8bf466cb07c699f9f81f04d4419b03a81c4b04d4e3d1b3a8a4f272fa2b8cf07d66f5a5d5f2d3c116d2ec5ae9d735a4821b12711821bd0858f776ba90b3
|
7
|
+
data.tar.gz: 1b2a337cd6ba8eb3c7a68cfc6b86e43d2595c24690bb9a552c95442276e556ad7129f7d97eb7473fab9763780b263972e3d4d591d7820e22e176b88187a8dcb7
|
data/.editorconfig
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
## 0.0.16 (unreleased)
|
2
|
+
|
3
|
+
FEATURES:
|
4
|
+
* core: Project renamed to "Hem" to avoid confusion with other hobo projects
|
5
|
+
|
6
|
+
IMPROVEMENTS:
|
7
|
+
|
8
|
+
* tasks/magento: Set magento secure url to use https
|
9
|
+
* tasks/seed: Change the project seed prompt to list available seeds as choices.
|
10
|
+
* tasks/seed: Add support for specifying full git repository urls in seed names
|
11
|
+
* core/ui: Ability to use noecho with Hobo.ui.ask for password input
|
12
|
+
|
13
|
+
BUG FIXES:
|
14
|
+
* tasks/magento & tasks/assets: Ensure absolute project path is used for magento patches & asset tasks
|
15
|
+
* core/cli: Fixes Hobofile eval such that `Hobofile` appears in backtrace instead of `main`
|
16
|
+
|
17
|
+
## 0.0.15 (5 September 2014)
|
18
|
+
|
19
|
+
FEATURES:
|
20
|
+
|
21
|
+
* tasks/magento: **New hobo task: `hobo magento patches apply`** - Applies official and critical magento patches
|
22
|
+
* tasks/seed: custom key-value data can be supplied to project configuration for `hobo seed plant` via `--data` or `-d`
|
23
|
+
* core/ui: new Hobo.ui.ask_choice method to give a numbered list of options to choose
|
24
|
+
|
25
|
+
BUG FIXES:
|
26
|
+
|
27
|
+
* core/gem_isolation: fix for bundler 1.6.5+ compatibility issue
|
28
|
+
|
29
|
+
## 0.0.14 (20 August 2014)
|
30
|
+
|
31
|
+
BUG FIXES:
|
32
|
+
|
33
|
+
* tasks/seed: fix typo with home path detection
|
34
|
+
* tasks/deps: fix inverted check for disable_host_run in deps:composer
|
35
|
+
|
36
|
+
## 0.0.13 (31 July 2014)
|
37
|
+
|
38
|
+
BUG FIXES:
|
39
|
+
|
40
|
+
* tasks/deps: fixes spacing bug on new vagrant plugin psuedo syntax
|
41
|
+
|
42
|
+
## 0.0.12 (yanked)
|
43
|
+
|
44
|
+
FEATURES:
|
45
|
+
|
46
|
+
* tasks/ops: new ops task to generate self signed certs
|
47
|
+
* tasks/seed: integrate self signed certs in to seed plant
|
48
|
+
* tasks/deps: implemented new psuedo syntax for vagrant plugins to avoid require_plugin warnings
|
49
|
+
|
50
|
+
IMPROVEMENTS:
|
51
|
+
|
52
|
+
* tasks/vm: changed vm:stop to use halt instead of suspend
|
53
|
+
* tasks/seed: better detection of local paths for seed argument
|
54
|
+
|
55
|
+
BUG FIXES:
|
56
|
+
|
57
|
+
* core: minor fixes and enhancements
|
58
|
+
|
59
|
+
## 0.0.11 (16 June 2014)
|
60
|
+
|
61
|
+
FEATURES:
|
62
|
+
|
63
|
+
* tasks/assets: dry run / confirmation of destructive sync
|
64
|
+
* tasks/deps: deps:composer now has option to disable host run of composer at the project level
|
65
|
+
|
66
|
+
IMPROVEMENTS:
|
67
|
+
|
68
|
+
* tasks/assets: rewritten mysql asset applicator to better handle error cases
|
69
|
+
* core/gem_isolation: refactored in to own module
|
70
|
+
|
71
|
+
BUG FIXES:
|
72
|
+
|
73
|
+
* tasks/assets: raise error when we encounter AWS error as VM will not start cleanly
|
74
|
+
|
75
|
+
## 0.0.10 (23 May 2014)
|
76
|
+
|
77
|
+
FEATURES:
|
78
|
+
|
79
|
+
* core/gem_isolation: Initial implementation
|
80
|
+
* tasks/self: repl task to debug adhoc issues in the context of hobo
|
81
|
+
|
82
|
+
## 0.0.9 (3 April 2014)
|
83
|
+
|
84
|
+
FEATURES:
|
85
|
+
|
86
|
+
* tasks/assets: new asset applicator feature to automatically load assets where possible
|
87
|
+
* core/host_checks: latest hobo version check and auto-upgrade prompt
|
88
|
+
* tasks/magento: magento specific tasks implemented
|
89
|
+
|
90
|
+
IMPROVEMENTS:
|
91
|
+
|
92
|
+
* tasks/assets: restructured asset sync code to multiple files
|
93
|
+
* core/util: centralized aws credential retrieval and windows host detection
|
94
|
+
|
95
|
+
## 0.0.8 (7 March 2014)
|
96
|
+
|
97
|
+
FEATURES:
|
98
|
+
|
99
|
+
* core/debug: implemented debug tee (writes debug to stdout and /tmp/hobo_debug.log)
|
100
|
+
* core/cli: implemented argv passthrough
|
101
|
+
* tasks/config: new feature to set configuration in ~/.hobo/config.yaml
|
102
|
+
* helpers/http_download: new feature to download files from http w/ progressbar support
|
103
|
+
|
104
|
+
IMPROVEMENTS:
|
105
|
+
|
106
|
+
* tasks/assets: improved asset sync handler
|
107
|
+
* core/host_checks: much improved host check feedback
|
108
|
+
* helpers/vm_shell: rewritten to support project mount detection and pull config from vagrant
|
109
|
+
* core/errors: refactored error handler support to create consistent error return codes without duplication
|
110
|
+
|
111
|
+
## 0.0.7 (18 February 2014)
|
112
|
+
|
113
|
+
FEATURES:
|
114
|
+
|
115
|
+
* tasks/seed: introduced submodule support for seeds (specifically magento)
|
116
|
+
|
117
|
+
IMPROVEMENTS:
|
118
|
+
|
119
|
+
* tasks/assets: error handling improvements
|
120
|
+
* core/errors: friendly formatter now appends backtrace information to error log
|
121
|
+
|
122
|
+
BUG FIXES:
|
123
|
+
|
124
|
+
* helpers/shell: fix carridge return handling
|
125
|
+
* core/config: fix deepstruct unwrap issue
|
data/DoD.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
hem (1.0.0.beta1)
|
5
|
+
aws-sdk (~> 2.0.24)
|
6
|
+
deepstruct (~> 0.0.5)
|
7
|
+
highline (~> 1.6.20)
|
8
|
+
net-ssh-simple (~> 1.6.3)
|
9
|
+
octokit (~> 3.0)
|
10
|
+
pry (~> 0.9.12)
|
11
|
+
rake (~> 10.1.1)
|
12
|
+
ruby-progressbar (~> 1.4.1)
|
13
|
+
semantic (~> 1.3.0)
|
14
|
+
slop (~> 3.4.7)
|
15
|
+
teerb (~> 0.0.1)
|
16
|
+
|
17
|
+
GEM
|
18
|
+
remote: https://rubygems.org/
|
19
|
+
specs:
|
20
|
+
addressable (2.3.8)
|
21
|
+
aws-sdk (2.0.48)
|
22
|
+
aws-sdk-resources (= 2.0.48)
|
23
|
+
aws-sdk-core (2.0.48)
|
24
|
+
builder (~> 3.0)
|
25
|
+
jmespath (~> 1.0)
|
26
|
+
multi_json (~> 1.0)
|
27
|
+
aws-sdk-resources (2.0.48)
|
28
|
+
aws-sdk-core (= 2.0.48)
|
29
|
+
blockenspiel (0.4.5)
|
30
|
+
builder (3.2.2)
|
31
|
+
coderay (1.1.0)
|
32
|
+
deepstruct (0.0.7)
|
33
|
+
faraday (0.9.2)
|
34
|
+
multipart-post (>= 1.2, < 3)
|
35
|
+
hashie (3.4.3)
|
36
|
+
highline (1.6.21)
|
37
|
+
jmespath (1.1.3)
|
38
|
+
method_source (0.8.2)
|
39
|
+
multi_json (1.11.2)
|
40
|
+
multipart-post (2.0.0)
|
41
|
+
net-scp (1.2.1)
|
42
|
+
net-ssh (>= 2.6.5)
|
43
|
+
net-ssh (3.0.1)
|
44
|
+
net-ssh-simple (1.6.12)
|
45
|
+
blockenspiel (= 0.4.5)
|
46
|
+
hashie (= 3.4.3)
|
47
|
+
net-scp (= 1.2.1)
|
48
|
+
net-ssh (= 3.0.1)
|
49
|
+
octokit (3.8.0)
|
50
|
+
sawyer (~> 0.6.0, >= 0.5.3)
|
51
|
+
pry (0.9.12.6)
|
52
|
+
coderay (~> 1.0)
|
53
|
+
method_source (~> 0.8)
|
54
|
+
slop (~> 3.4)
|
55
|
+
rake (10.1.1)
|
56
|
+
ruby-progressbar (1.4.2)
|
57
|
+
sawyer (0.6.0)
|
58
|
+
addressable (~> 2.3.5)
|
59
|
+
faraday (~> 0.8, < 0.10)
|
60
|
+
semantic (1.3.1)
|
61
|
+
slop (3.4.7)
|
62
|
+
teerb (0.0.1)
|
63
|
+
|
64
|
+
PLATFORMS
|
65
|
+
ruby
|
66
|
+
|
67
|
+
DEPENDENCIES
|
68
|
+
hem!
|
69
|
+
|
70
|
+
BUNDLED WITH
|
71
|
+
1.10.6
|
data/Guardfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
end
|
9
|
+
|
10
|
+
guard 'cucumber' do
|
11
|
+
watch(%r{^features/.+\.feature$})
|
12
|
+
watch(%r{^features/support/.+$}) { 'features' }
|
13
|
+
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
14
|
+
end
|
data/Hemfile
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
desc "lala"
|
4
|
+
task "top-level" do
|
5
|
+
Hem.ui.info "top level"
|
6
|
+
end
|
7
|
+
|
8
|
+
namespace :test do
|
9
|
+
desc "Does non-interactive things"
|
10
|
+
task 'non-interactive' do
|
11
|
+
Hem.ui.info Hem.ui.ask "A question", default: "Used defaults"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Performs interactive requests without echo'
|
15
|
+
task 'no-echo' do
|
16
|
+
Hem.ui.info Hem.ui.ask 'A question', echo: false
|
17
|
+
end
|
18
|
+
|
19
|
+
task "subcommand" do
|
20
|
+
Hem.ui.info "Subcommand test"
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "description"
|
24
|
+
long_desc "long description"
|
25
|
+
option "-o", "--option", "Option description"
|
26
|
+
hidden true
|
27
|
+
task "metadata", [ :arg ] do
|
28
|
+
Hem.ui.info "metadata"
|
29
|
+
end
|
30
|
+
|
31
|
+
option "--testing=", "description"
|
32
|
+
task 'option-test' do |task|
|
33
|
+
Hem.ui.info task.opts[:testing]
|
34
|
+
end
|
35
|
+
|
36
|
+
task 'argument-test', [ :test ] do |task, args|
|
37
|
+
Hem.ui.info args[:test]
|
38
|
+
end
|
39
|
+
|
40
|
+
task 'unparsed' do |task|
|
41
|
+
Hem.ui.info task.opts[:_unparsed]
|
42
|
+
end
|
43
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 The Inviqa Group Ltd
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Hem (gem)
|
2
|
+
Hem is small rake based tool designed to assist with day to day tasks for developers.
|
3
|
+
Some highlights of functionality include:
|
4
|
+
|
5
|
+
- Fetch common tools
|
6
|
+
- Start most project VMs including setting up dependencies
|
7
|
+
- Utilize project seeds to kickstart a new project
|
8
|
+
|
9
|
+
Many more features are planned including assisting with host machine configuration, automatically pulling assets for the VM and providing commonly rewritten tasks as general utility libraries for use in Hemfiles.
|
10
|
+
|
11
|
+
# Installing & using
|
12
|
+
|
13
|
+
Full instructions for installing and using hem are available in the [User guide](https://github.com/inviqa/hem/wiki/User-guide). For information on the task DSL, see the [DSL guide](https://github.com/inviqa/hem/wiki/Hemfile-DSL).
|
14
|
+
|
15
|
+
Please ensure that you run the following command after installing and that it does not raise any issues:
|
16
|
+
|
17
|
+
```
|
18
|
+
hem system check
|
19
|
+
```
|
20
|
+
|
21
|
+
# Getting help
|
22
|
+
|
23
|
+
If you need any help with hem or you encounter any issues, please join the #hem slack channel.
|
24
|
+
|
25
|
+
# Contributing
|
26
|
+
If you wish to contribute to hem:
|
27
|
+
- Clone this repository
|
28
|
+
- Execute bundle install
|
29
|
+
- Create a feature branch with descriptive name (i.e. feature/magento-tasks)
|
30
|
+
- Make changes
|
31
|
+
- Build and install the gem: rake build && rake install
|
32
|
+
- Push feature branch back to this repo
|
33
|
+
- Submit a PR with details of changes
|
34
|
+
|
35
|
+
You can run tests using Guard by executing "guard" in a terminal in the project folder. Guard will re-run tests where it knows how but otherwise run cucumber tests with "cucumber" (in the guard terminal) and rspec tests with "rspec" (in the guard terminal).
|
36
|
+
|
37
|
+
# Available seeds
|
38
|
+
Currently available seeds are `default`, `magento` and `symfony`.
|
39
|
+
```
|
40
|
+
hem seed plant <my-symfony-project-name> --seed=symfony
|
41
|
+
```
|
42
|
+
The easiest way is to look for more custom seeds is just to search gihub. https://github.com/inviqa?query=hem-seed
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
ENV['HEM_BUILD'] = '1'
|
5
|
+
|
6
|
+
desc "Build and install"
|
7
|
+
task :build_install => [:build, :install]
|
8
|
+
|
9
|
+
desc "Install dev deps"
|
10
|
+
task :install_dev_deps do
|
11
|
+
sh 'rm -rf .bundle/config'
|
12
|
+
sh 'HEM_ENV=dev bundle install'
|
13
|
+
end
|
14
|
+
|
15
|
+
namespace :test do
|
16
|
+
task :specs => [ 'install_dev_deps' ] do
|
17
|
+
sh 'HEM_ENV=dev bundle exec rspec'
|
18
|
+
end
|
19
|
+
|
20
|
+
task :acceptance => [ 'install_dev_deps' ] do
|
21
|
+
sh 'HEM_ENV=dev bundle exec cucumber'
|
22
|
+
end
|
23
|
+
end
|
data/bin/hem
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Hack to allow testing with Aruba (for now)
|
4
|
+
$:.push File.expand_path(File.join("..", "..", "lib"), __FILE__)
|
5
|
+
|
6
|
+
def init_hem
|
7
|
+
require 'hem'
|
8
|
+
|
9
|
+
# Default main classes
|
10
|
+
error_handler = Hem::ErrorHandlers::Friendly.new
|
11
|
+
Hem.ui = Hem::Ui.new
|
12
|
+
Hem.logger = Logger.new(STDOUT)
|
13
|
+
Hem.logger.level = Logger::WARN
|
14
|
+
|
15
|
+
# Low level / early arg parsing
|
16
|
+
# Anything that can alter ui / logger / cli should be here
|
17
|
+
# Early termination args should also go here
|
18
|
+
slop = Slop.parse! do
|
19
|
+
on '--debug', 'Enable debugging' do
|
20
|
+
require 'teerb'
|
21
|
+
require 'tmpdir'
|
22
|
+
error_handler = Hem::ErrorHandlers::Debug.new
|
23
|
+
debug_log = File.open(File.join(Dir.tmpdir, 'hem_debug.log'), 'w+')
|
24
|
+
Hem.logger = Logger.new(TeeRb::IODelegate.new(STDOUT, debug_log))
|
25
|
+
Hem.logger.level = Logger::DEBUG
|
26
|
+
end
|
27
|
+
|
28
|
+
on '--ansi', 'Enable / disable ansi output', :invertable => true do
|
29
|
+
Hem.ui.use_color self.to_hash[:ansi]
|
30
|
+
end
|
31
|
+
|
32
|
+
on '--log-level=', 'Set log level' do
|
33
|
+
level = self.to_hash[:'log-level'].upcase
|
34
|
+
Hem.logger.level = Logger.const_get(level) if [ 'DEBUG', 'INFO' ].include? level
|
35
|
+
end
|
36
|
+
|
37
|
+
on '--non-interactive', 'Run non-interactively. Defaults will be automatically used where possible.'
|
38
|
+
on '--skip-host-checks', 'Skip host checks'
|
39
|
+
end
|
40
|
+
|
41
|
+
Hem.logger.formatter = proc do |severity, datetime, progname, msg|
|
42
|
+
"#{datetime.strftime("%Y-%m-%d %H:%M:%S")}: #{severity}: #{msg}\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
opts = slop.to_hash
|
46
|
+
Hem.ui.interactive = !(opts[:'non-interactive'] == true)
|
47
|
+
|
48
|
+
begin
|
49
|
+
Hem.cli = Hem::Cli.new(slop: slop)
|
50
|
+
Hem.cli.start
|
51
|
+
rescue Exception => error
|
52
|
+
exit error_handler.handle(error)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Gem.configuration.verbose = false
|
57
|
+
|
58
|
+
require 'hem/patches/rubygems'
|
59
|
+
|
60
|
+
# Suppress Net/SSH/Simple warning on windows
|
61
|
+
$SUPPRESS_32BIT_WARNING=1
|
62
|
+
$HEM_ARGV = ARGV
|
63
|
+
|
64
|
+
init_hem
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: Dependencies
|
2
|
+
|
3
|
+
Scenario: deps:gems should install Gemfile dependencies
|
4
|
+
Given a file named "Gemfile" with:
|
5
|
+
"""
|
6
|
+
source 'https://rubygems.org'
|
7
|
+
gem 'bundler'
|
8
|
+
"""
|
9
|
+
And an empty file named "Hemfile"
|
10
|
+
When I run `hem deps gems`
|
11
|
+
Then the output should contain "Using bundler"
|
12
|
+
And a file named "Gemfile.lock" should exist
|
13
|
+
|
14
|
+
Scenario: deps:composer should install composer dependencies
|
15
|
+
Given a file named "composer.json" with:
|
16
|
+
"""
|
17
|
+
{
|
18
|
+
"require": {
|
19
|
+
"whatthejeff/fab": "*"
|
20
|
+
}
|
21
|
+
}
|
22
|
+
"""
|
23
|
+
And an empty file named "Hemfile"
|
24
|
+
When I run `hem deps composer`
|
25
|
+
Then the output should contain "Installing whatthejeff/fab"
|
26
|
+
And a file named "composer.lock" should exist
|
27
|
+
|
28
|
+
Scenario: deps:chef should install chef dependencies
|
29
|
+
Given a file named "Cheffile" with:
|
30
|
+
"""
|
31
|
+
site 'http://community.opscode.com/api/v1'
|
32
|
+
cookbook 'apache2'
|
33
|
+
"""
|
34
|
+
And an empty file named "Hemfile"
|
35
|
+
And a file named "Gemfile" with:
|
36
|
+
"""
|
37
|
+
source 'https://rubygems.org'
|
38
|
+
gem 'librarian-chef'
|
39
|
+
"""
|
40
|
+
When I run `bundle install`
|
41
|
+
And I run `hem deps chef`
|
42
|
+
Then the output should contain "apache2"
|
43
|
+
And a file named "Cheffile.lock" should exist
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: Basics
|
2
|
+
Scenario: No arguments should show help
|
3
|
+
When I run `hem`
|
4
|
+
Then the output should contain "Usage:"
|
5
|
+
|
6
|
+
Scenario: -v should show version
|
7
|
+
When I run `hem -v`
|
8
|
+
Then the output should contain "Hem version"
|
9
|
+
|
10
|
+
Scenario: --version should show version
|
11
|
+
When I run `hem --version`
|
12
|
+
Then the output should contain "Hem version"
|
13
|
+
|
14
|
+
Scenario: An invalid command should fail gracefully
|
15
|
+
When I run `hem jibberjabber`
|
16
|
+
Then the output should contain "Invalid command or option"
|
17
|
+
And the exit status should be 4
|
18
|
+
|
19
|
+
Scenario: An invalid option should fail gracefully
|
20
|
+
When I run `hem --jibberjabber`
|
21
|
+
Then the output should contain "Invalid command or option"
|
22
|
+
And the exit status should be 4
|
23
|
+
|
24
|
+
Scenario: --debug should display backtraces
|
25
|
+
When I run `hem jibberjabber --debug`
|
26
|
+
Then the output should contain "Hem::InvalidCommandOrOpt"
|
27
|
+
|
28
|
+
Scenario: --no-ansi should disable ansi output
|
29
|
+
When I run `hem --no-ansi`
|
30
|
+
Then the output should not contain "33m"
|
31
|
+
|
32
|
+
Scenario: --non-interactive should cause default options to be used
|
33
|
+
When I run `hem test non-interactive --non-interactive`
|
34
|
+
Then the output should contain "Used defaults"
|
35
|
+
|
36
|
+
Scenario: --all should list all tasks
|
37
|
+
When I run `hem --all`
|
38
|
+
Then the output should contain "hem-debug"
|
39
|
+
|
40
|
+
Scenario: --skip-host-checks should skip host checks
|
41
|
+
Given "test_files/vagrant_fail/" is appended to the PATH environment variable
|
42
|
+
When I run `hem --skip-host-checks`
|
43
|
+
Then the output should not contain "Hem has detected a problem"
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Hem help
|
2
|
+
Scenario: --help should show help
|
3
|
+
When I run `hem --help`
|
4
|
+
Then the output should contain "Usage:"
|
5
|
+
And the output should contain "Global options:"
|
6
|
+
And the output should contain "Commands:"
|
7
|
+
|
8
|
+
Scenario: --h should show help
|
9
|
+
When I run `hem --help`
|
10
|
+
Then the output should contain "Usage:"
|
11
|
+
And the output should contain "Global options:"
|
12
|
+
And the output should contain "Commands:"
|
13
|
+
|
14
|
+
Scenario: --ansi should show invertable help
|
15
|
+
When I run `hem --help`
|
16
|
+
Then the output should contain "(Disable with --no-ansi)"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: Subcommands
|
2
|
+
|
3
|
+
Scenario: Subcommand with --help should show command help
|
4
|
+
When I run `hem test non-interactive --help`
|
5
|
+
Then the output should contain "hem test non-interactive [options]"
|
6
|
+
|
7
|
+
Scenario: Namespace should show subcommands
|
8
|
+
When I run `hem test`
|
9
|
+
Then the output should contain "non-interactive"
|
10
|
+
And the output should contain "Does non-interactive things"
|
11
|
+
|
12
|
+
Scenario: Subcommand should execute
|
13
|
+
When I run `hem test non-interactive` interactively
|
14
|
+
And I type "Testing"
|
15
|
+
Then the output should contain "Testing"
|
@@ -0,0 +1,64 @@
|
|
1
|
+
Feature: Plant
|
2
|
+
|
3
|
+
Scenario: Plant without name should fail gracefully
|
4
|
+
When I run `hem seed plant`
|
5
|
+
Then the output should contain "Not enough arguments for seed:plant"
|
6
|
+
|
7
|
+
Scenario: Plant with name should prompt for repository and seed
|
8
|
+
Given there is a seed called "testing" with:
|
9
|
+
"""
|
10
|
+
test
|
11
|
+
"""
|
12
|
+
And I run `hem seed plant seed_plant_0` interactively
|
13
|
+
And I type "git://test_repo"
|
14
|
+
And I type "./testing"
|
15
|
+
And I run `sleep 0.5`
|
16
|
+
And I run `git --git-dir=seed_plant_0/.git remote show origin -n`
|
17
|
+
Then the output should contain "git://test_repo"
|
18
|
+
And the file "seed_plant_0/test" should contain "test"
|
19
|
+
|
20
|
+
Scenario: Plant with name and --git-url should prompt for seed
|
21
|
+
Given there is a seed called "testing" with:
|
22
|
+
"""
|
23
|
+
test
|
24
|
+
"""
|
25
|
+
When I run `hem seed plant seed_plant_0 --git-url=git://test_repo` interactively
|
26
|
+
And I type "./testing"
|
27
|
+
And I run `sleep 0.5`
|
28
|
+
And I run `git --git-dir=seed_plant_0/.git remote show origin -n`
|
29
|
+
Then the output should contain "git://test_repo"
|
30
|
+
And the file "seed_plant_0/test" should contain "test"
|
31
|
+
|
32
|
+
Scenario: Plant with name, --git-url and --seed should not prompt
|
33
|
+
Given there is a seed called "testing" with:
|
34
|
+
"""
|
35
|
+
test
|
36
|
+
"""
|
37
|
+
When I run `hem seed plant seed_plant_0 --git-url=git://test_repo --seed=./testing`
|
38
|
+
And I run `sleep 0.5`
|
39
|
+
And I run `git --git-dir=seed_plant_0/.git remote show origin -n`
|
40
|
+
Then the output should contain "git://test_repo"
|
41
|
+
And the file "seed_plant_0/test" should contain "test"
|
42
|
+
|
43
|
+
Scenario: Plant should replace placeholders
|
44
|
+
Given there is a seed called "testing" with:
|
45
|
+
"""
|
46
|
+
NAME:{{name}}
|
47
|
+
SEED:{{seed.name}}
|
48
|
+
"""
|
49
|
+
When I run `hem seed plant seed_plant_0 --git-url=git://test_repo --seed=./testing`
|
50
|
+
Then the file "seed_plant_0/test" should contain "NAME:seed_plant_0"
|
51
|
+
And the file "seed_plant_0/test" should contain "SEED:testing"
|
52
|
+
|
53
|
+
Scenario: Plant should fail gracefully with invalid seed
|
54
|
+
When I run `hem seed plant seed_plant_0 --git-url=git://test_repo --seed=./not-exist`
|
55
|
+
Then the output should contain "The following external command appears to have failed"
|
56
|
+
|
57
|
+
Scenario: Plant should fail gracefully if target directory exists
|
58
|
+
Given there is a seed called "testing" with:
|
59
|
+
"""
|
60
|
+
test
|
61
|
+
"""
|
62
|
+
And an empty file named "seed_plant_0"
|
63
|
+
When I run `hem seed plant seed_plant_0 --git-url=git://test_repo --seed=./not-exist`
|
64
|
+
Then the output should contain "seed_plant_0 already exists"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
Given(/^there is a seed called "(.*?)" with:$/) do |seed, contents|
|
4
|
+
create_dir(seed)
|
5
|
+
cd(seed)
|
6
|
+
write_file("test", contents)
|
7
|
+
run_simple(unescape("git init"))
|
8
|
+
run_simple(unescape("git add *"))
|
9
|
+
run_simple(unescape("git commit -m 'init'"))
|
10
|
+
cd('..')
|
11
|
+
end
|