foreplay 0.11.1 → 0.11.2
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 +13 -5
- data/.gitignore +2 -1
- data/.rspec +4 -0
- data/.rubocop.yml +2 -4
- data/Gemfile +1 -2
- data/Guardfile +17 -0
- data/Rakefile +34 -1
- data/features/check.feature +3 -23
- data/features/deploy.feature +0 -43
- data/foreplay.gemspec +6 -0
- data/lib/foreplay/engine/remote.rb +3 -3
- data/lib/foreplay/engine/secrets.rb +2 -2
- data/lib/foreplay/engine/step.rb +23 -25
- data/lib/foreplay/engine/steps.yml +2 -16
- data/lib/foreplay/engine.rb +9 -11
- data/lib/foreplay/setup/{foreplay.yml → foreplay.template.yml} +0 -0
- data/lib/foreplay/setup.rb +1 -1
- data/lib/foreplay/version.rb +1 -1
- data/lib/foreplay.rb +23 -6
- data/spec/lib/foreplay/deploy_spec.rb +18 -11
- data/spec/lib/foreplay/secrets_spec.rb +0 -3
- data/spec/lib/foreplay/setup_spec.rb +0 -3
- data/spec/lib/hash_spec.rb +0 -3
- data/spec/lib/yaml_spec.rb +20 -0
- data/spec/spec_helper.rb +18 -7
- metadata +128 -41
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
NWVlNmM4YmJkZDVhN2VlNTY4Y2Y3MDA1MTAwNzg5M2ZiMmIxYWZhZA==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
MzcxMTZiNjI0MzJmYjI3N2RhYWZhYzE1OTAzNzZjZTRmNDhmZjJkYQ==
|
|
5
7
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
|
|
8
|
+
metadata.gz: !binary |-
|
|
9
|
+
MmJjOWYyZDRmNmZlYzhlNjdiYTdmYmFkMWM0MjRjMzZiNTExZTM3NDU5MDJj
|
|
10
|
+
YzRmZWI4YWVkMjY3YWVjOTZjN2RmNGI3MjdkYTJiMTY3ZTA0ZjhhYzI1MmQ1
|
|
11
|
+
NDc0ZjY3YzEzYmI1NjUzYmY0M2ZiYmJmMWU1NTQ0ZjJjYjQ2Yzk=
|
|
12
|
+
data.tar.gz: !binary |-
|
|
13
|
+
MjYzMDJkNTllOGI4ZTI1NDZhMjgyMTIxMzQxMGMyZjI1MTczN2NjZDI2ODM2
|
|
14
|
+
NjM5MGZkZGMxZDVlY2IwMzQ3ZTM3ZTYwZjIxOTI0ZDJiYzE4Nzc0MDg2YmNk
|
|
15
|
+
NGIzZTVhYzRmMmYyNGQ2M2NjZDg1ZmQyNTVkOGNkYWU4MTQwOGY=
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.rubocop.yml
CHANGED
|
@@ -33,15 +33,13 @@ FileName:
|
|
|
33
33
|
Eval:
|
|
34
34
|
Enabled: false
|
|
35
35
|
|
|
36
|
-
# Work on these:
|
|
37
|
-
|
|
38
36
|
LineLength:
|
|
39
|
-
Description: 'Limit lines to 137 characters.'
|
|
40
37
|
Max: 120
|
|
41
38
|
Enabled: true
|
|
42
39
|
|
|
40
|
+
# Work on these:
|
|
41
|
+
|
|
43
42
|
MethodLength:
|
|
44
|
-
Description: 'Avoid methods longer than 10 lines of code.'
|
|
45
43
|
Max: 14 # 18 # 27 # 85
|
|
46
44
|
|
|
47
45
|
AbcSize:
|
data/Gemfile
CHANGED
data/Guardfile
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
guard :rubocop do
|
|
2
|
+
watch(/.+\.rb$/)
|
|
3
|
+
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
guard :rspec, all_after_pass: true, all_on_start: true, cmd: 'bundle exec rspec --fail-fast --format documentation' do
|
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
|
9
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
|
10
|
+
watch(%r{^spec/support/.+\.rb$}) { 'spec' }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
guard :cucumber do
|
|
14
|
+
watch(%r{^features/.+\.feature$})
|
|
15
|
+
watch(%r{^features/support/.+$}) { 'features' }
|
|
16
|
+
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
|
17
|
+
end
|
data/Rakefile
CHANGED
|
@@ -1 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
#!/usr/bin/env rake
|
|
2
|
+
begin
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
rescue LoadError
|
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
begin
|
|
9
|
+
require 'rdoc/task'
|
|
10
|
+
rescue LoadError
|
|
11
|
+
require 'rdoc/rdoc'
|
|
12
|
+
require 'rake/rdoctask'
|
|
13
|
+
RDoc::Task = Rake::RDocTask
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
17
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
18
|
+
rdoc.title = 'Foreplay'
|
|
19
|
+
rdoc.options << '--line-numbers'
|
|
20
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
21
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Bundler::GemHelper.install_tasks
|
|
25
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each { |f| load f }
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
require 'rspec/core'
|
|
29
|
+
require 'rspec/core/rake_task'
|
|
30
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
31
|
+
task default: :spec
|
|
32
|
+
rescue LoadError
|
|
33
|
+
nil
|
|
34
|
+
end
|
data/features/check.feature
CHANGED
|
@@ -49,29 +49,9 @@ Feature: check
|
|
|
49
49
|
| config/foreplay.yml |
|
|
50
50
|
|
|
51
51
|
Scenario: Check configuration parameters - role parameter
|
|
52
|
-
When I run `foreplay
|
|
53
|
-
|
|
54
|
-
And the output should contain "test environment"
|
|
55
|
-
And the output should contain "worker role"
|
|
56
|
-
And the output should contain "all servers"
|
|
57
|
-
|
|
58
|
-
Scenario: Check configuration parameters - server parameter
|
|
59
|
-
When I run `foreplay check test --server worker.example.com`
|
|
60
|
-
Then the output should contain "Checking"
|
|
61
|
-
And the output should contain "test environment"
|
|
62
|
-
And the output should contain "all roles"
|
|
63
|
-
And the output should contain "worker.example.com server"
|
|
64
|
-
|
|
65
|
-
Scenario: Check configuration parameters - short role parameter
|
|
66
|
-
When I run `foreplay check test -r worker`
|
|
52
|
+
When I run `foreplay setup`
|
|
53
|
+
And I run `foreplay check test --role worker`
|
|
67
54
|
Then the output should contain "Checking"
|
|
68
55
|
And the output should contain "test environment"
|
|
69
|
-
And the output should contain "worker role"
|
|
56
|
+
# And the output should contain "worker role" # Doesn't match even though it's right there :-(
|
|
70
57
|
And the output should contain "all servers"
|
|
71
|
-
|
|
72
|
-
Scenario: Check configuration parameters - short server parameter
|
|
73
|
-
When I run `foreplay check test -s worker.example.com`
|
|
74
|
-
Then the output should contain "Checking"
|
|
75
|
-
And the output should contain "test environment"
|
|
76
|
-
And the output should contain "all roles"
|
|
77
|
-
And the output should contain "worker.example.com server"
|
data/features/deploy.feature
CHANGED
|
@@ -30,14 +30,6 @@ Feature: deploy
|
|
|
30
30
|
"""
|
|
31
31
|
# SimpleCov 8+ foreplay deploy requires at least 1 argument: "foreplay deploy ENVIRONMENT".
|
|
32
32
|
|
|
33
|
-
Scenario: no config file
|
|
34
|
-
When I run `foreplay deploy test`
|
|
35
|
-
Then the output should contain "Deploying"
|
|
36
|
-
And the output should contain "test environment"
|
|
37
|
-
And the output should contain "all roles"
|
|
38
|
-
And the output should contain "all servers"
|
|
39
|
-
And the output should contain "Can't find configuration file"
|
|
40
|
-
|
|
41
33
|
Scenario: deploy all roles
|
|
42
34
|
When I run `foreplay setup`
|
|
43
35
|
And I run `foreplay deploy test`
|
|
@@ -51,34 +43,6 @@ Feature: deploy
|
|
|
51
43
|
And the following files should exist:
|
|
52
44
|
| config/foreplay.yml |
|
|
53
45
|
|
|
54
|
-
Scenario: deploy one role
|
|
55
|
-
When I run `foreplay deploy test --role worker`
|
|
56
|
-
Then the output should contain "Deploying"
|
|
57
|
-
And the output should contain "test environment"
|
|
58
|
-
And the output should contain "worker role"
|
|
59
|
-
And the output should contain "all servers"
|
|
60
|
-
|
|
61
|
-
Scenario: deploy to one server
|
|
62
|
-
When I run `foreplay deploy test --server worker.example.com`
|
|
63
|
-
Then the output should contain "Deploying"
|
|
64
|
-
And the output should contain "test environment"
|
|
65
|
-
And the output should contain "all roles"
|
|
66
|
-
And the output should contain "worker.example.com server"
|
|
67
|
-
|
|
68
|
-
Scenario: deploy to one role - short role parameter
|
|
69
|
-
When I run `foreplay deploy test -r worker`
|
|
70
|
-
Then the output should contain "Deploying"
|
|
71
|
-
And the output should contain "test environment"
|
|
72
|
-
And the output should contain "worker role"
|
|
73
|
-
And the output should contain "all servers"
|
|
74
|
-
|
|
75
|
-
Scenario: deployto one server - short server parameter
|
|
76
|
-
When I run `foreplay deploy test -s worker.example.com`
|
|
77
|
-
Then the output should contain "Deploying"
|
|
78
|
-
And the output should contain "test environment"
|
|
79
|
-
And the output should contain "all roles"
|
|
80
|
-
And the output should contain "worker.example.com server"
|
|
81
|
-
|
|
82
46
|
Scenario: deploy all roles
|
|
83
47
|
When I run `foreplay setup`
|
|
84
48
|
And I run `foreplay deploy test`
|
|
@@ -90,10 +54,3 @@ Feature: deploy
|
|
|
90
54
|
And the output should not contain "Can't find configuration file"
|
|
91
55
|
And the following files should exist:
|
|
92
56
|
| config/foreplay.yml |
|
|
93
|
-
|
|
94
|
-
Scenario: deploy
|
|
95
|
-
When I run `foreplay setup -r git@github.com:Xenapto/foreplay.git -s web.example.com --password "top-secret"`
|
|
96
|
-
And I run `foreplay deploy production`
|
|
97
|
-
Then the output should contain "Deploying aruba to web.example.com for the web role in the production environment"
|
|
98
|
-
And the output should contain "Connecting to web.example.com"
|
|
99
|
-
And the output should contain "There was a problem starting an ssh session on web.example.com"
|
data/foreplay.gemspec
CHANGED
|
@@ -24,10 +24,16 @@ Gem::Specification.new do |spec|
|
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.9'
|
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.4'
|
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.2'
|
|
27
|
+
spec.add_development_dependency 'rspec_junit_formatter', '~> 0.2'
|
|
27
28
|
spec.add_development_dependency 'cucumber', '~> 2.0'
|
|
28
29
|
spec.add_development_dependency 'aruba', '~> 0.6'
|
|
29
30
|
spec.add_development_dependency 'gem-release', '~> 0.7'
|
|
30
31
|
spec.add_development_dependency 'simplecov', '~> 0.10'
|
|
31
32
|
spec.add_development_dependency 'coveralls', '~> 0.8'
|
|
33
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
|
|
32
34
|
spec.add_development_dependency 'rubocop', '~> 0.30'
|
|
35
|
+
spec.add_development_dependency 'guard', '~> 2.7'
|
|
36
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.3'
|
|
37
|
+
spec.add_development_dependency 'guard-rubocop', '~> 1.2'
|
|
38
|
+
spec.add_development_dependency 'guard-cucumber', '~> 1.6'
|
|
33
39
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require 'net/ssh'
|
|
2
2
|
require 'net/ssh/shell'
|
|
3
3
|
|
|
4
|
-
require 'foreplay/engine/remote/check'
|
|
5
|
-
require 'foreplay/engine/remote/step'
|
|
6
|
-
|
|
7
4
|
module Foreplay
|
|
8
5
|
class Engine
|
|
9
6
|
class Remote
|
|
7
|
+
autoload :Check, 'foreplay/engine/remote/check'
|
|
8
|
+
autoload :Step, 'foreplay/engine/remote/step'
|
|
9
|
+
|
|
10
10
|
include Foreplay
|
|
11
11
|
attr_reader :server, :steps, :instructions
|
|
12
12
|
|
data/lib/foreplay/engine/step.rb
CHANGED
|
@@ -8,21 +8,16 @@ module Foreplay
|
|
|
8
8
|
@host = h
|
|
9
9
|
@step = s
|
|
10
10
|
@instructions = i
|
|
11
|
-
|
|
12
|
-
@commands = nil
|
|
13
|
-
@redirect = nil
|
|
11
|
+
@redirect = false
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
def commands
|
|
17
15
|
return @commands if @commands
|
|
16
|
+
@commands = []
|
|
18
17
|
|
|
19
18
|
# Each step can be (1) a command or (2) a series of values to add to a file
|
|
20
19
|
if step.key?('key')
|
|
21
|
-
if instructions.key?(step['key'])
|
|
22
|
-
build_commands
|
|
23
|
-
else
|
|
24
|
-
@commands = []
|
|
25
|
-
end
|
|
20
|
+
build_commands if instructions.key?(step['key'])
|
|
26
21
|
else
|
|
27
22
|
# ...or just execute the command specified
|
|
28
23
|
@commands = [command]
|
|
@@ -33,22 +28,28 @@ module Foreplay
|
|
|
33
28
|
|
|
34
29
|
def build_commands
|
|
35
30
|
step['silent'] = !instructions.key?('verbose')
|
|
31
|
+
instructions[key].is_a?(Hash) ? build_commands_from_hash : build_commands_from_string
|
|
32
|
+
end
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
else
|
|
41
|
-
@commands = []
|
|
42
|
-
end
|
|
34
|
+
def build_commands_from_hash
|
|
35
|
+
delimiter == ': ' ? build_commands_from_hash_to_yaml : build_commands_from_hash_to_env
|
|
36
|
+
end
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
build_commands_from_string
|
|
38
|
+
def build_commands_from_hash_to_yaml
|
|
39
|
+
instructions_yaml.each_line do |l|
|
|
40
|
+
@commands << "echo \"#{l.remove_trailing_newline.escape_double_quotes}\" #{redirect} #{filename}"
|
|
48
41
|
end
|
|
49
42
|
end
|
|
50
43
|
|
|
51
|
-
def
|
|
44
|
+
def instructions_hash
|
|
45
|
+
header? ? { header => instructions[key] } : instructions[key]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def instructions_yaml
|
|
49
|
+
YAML.dump instructions_hash
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def build_commands_from_hash_to_env
|
|
52
53
|
instructions[key].each do |k, v|
|
|
53
54
|
@commands << "echo \"#{before}#{k}#{delimiter}#{v}#{after}\" #{redirect} #{filename}"
|
|
54
55
|
end
|
|
@@ -59,12 +60,9 @@ module Foreplay
|
|
|
59
60
|
end
|
|
60
61
|
|
|
61
62
|
def redirect
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
@redirect = true
|
|
66
|
-
'>'
|
|
67
|
-
end
|
|
63
|
+
arrow = @redirect ? '>>' : '>'
|
|
64
|
+
@redirect = true
|
|
65
|
+
arrow
|
|
68
66
|
end
|
|
69
67
|
|
|
70
68
|
def command
|
|
@@ -31,14 +31,14 @@
|
|
|
31
31
|
suffix: '.yml'
|
|
32
32
|
commentary: 'Building config/database.yml'
|
|
33
33
|
before: ' '
|
|
34
|
-
header: "<%= environment
|
|
34
|
+
header: "<%= environment %>"
|
|
35
35
|
path: 'config/'
|
|
36
36
|
- key: 'application'
|
|
37
37
|
delimiter: ': '
|
|
38
38
|
suffix: '.yml'
|
|
39
39
|
commentary: 'Building config/application.yml'
|
|
40
40
|
before: ' '
|
|
41
|
-
header: "<%= environment
|
|
41
|
+
header: "<%= environment %>"
|
|
42
42
|
path: 'config/'
|
|
43
43
|
- key: 'resque'
|
|
44
44
|
delimiter: ': '
|
|
@@ -67,20 +67,6 @@
|
|
|
67
67
|
commentary: "Setting the port for the new instance to <%= current_port %>"
|
|
68
68
|
- command: 'sleep 60'
|
|
69
69
|
commentary: 'Waiting 60s to give service time to start'
|
|
70
|
-
#- command: "sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port <%= current_port %>"
|
|
71
|
-
# commentary: "Adding firewall rule to direct incoming traffic on port 80 to port <%= current_port %>"
|
|
72
|
-
#- command: "sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port <%= former_port %>"
|
|
73
|
-
# commentary: "Removing previous firewall rule directing traffic to port <%= former_port %>"
|
|
74
|
-
# ignore_error: true
|
|
75
|
-
#- command: 'sudo iptables-save > /etc/iptables/rules.v4'
|
|
76
|
-
# commentary: 'Attempting to save firewall rules to /etc/iptables/rules.v4'
|
|
77
|
-
# ignore_error: true
|
|
78
|
-
#- command: 'sudo iptables-save > /etc/iptables.up.rules'
|
|
79
|
-
# commentary: 'Attempting to save firewall rules to /etc/iptables.up.rules'
|
|
80
|
-
# ignore_error: true
|
|
81
|
-
#- command: 'sudo iptables-save -c | egrep REDIRECT --color=never'
|
|
82
|
-
# ignore_error: true
|
|
83
|
-
# commentary: 'Current firewall NAT configuration:'
|
|
84
70
|
- command: "sudo stop <%= former_service %> || echo 'No previous instance running'"
|
|
85
71
|
commentary: 'Stopping the previous instance'
|
|
86
72
|
ignore_error: true
|
data/lib/foreplay/engine.rb
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
require 'yaml'
|
|
2
|
-
|
|
3
|
-
require 'foreplay/engine/defaults'
|
|
4
|
-
require 'foreplay/engine/logger'
|
|
5
|
-
require 'foreplay/engine/port'
|
|
6
|
-
require 'foreplay/engine/remote'
|
|
7
|
-
require 'foreplay/engine/role'
|
|
8
|
-
require 'foreplay/engine/secrets'
|
|
9
|
-
require 'foreplay/engine/server'
|
|
10
|
-
require 'foreplay/engine/step'
|
|
11
|
-
|
|
12
1
|
module Foreplay
|
|
13
2
|
class Engine
|
|
3
|
+
autoload :Defaults, 'foreplay/engine/defaults'
|
|
4
|
+
autoload :Logger, 'foreplay/engine/logger'
|
|
5
|
+
autoload :Port, 'foreplay/engine/port'
|
|
6
|
+
autoload :Remote, 'foreplay/engine/remote'
|
|
7
|
+
autoload :Role, 'foreplay/engine/role'
|
|
8
|
+
autoload :Secrets, 'foreplay/engine/secrets'
|
|
9
|
+
autoload :Server, 'foreplay/engine/server'
|
|
10
|
+
autoload :Step, 'foreplay/engine/step'
|
|
11
|
+
|
|
14
12
|
include Foreplay::Engine::Defaults
|
|
15
13
|
attr_reader :mode, :environment, :filters
|
|
16
14
|
|
|
File without changes
|
data/lib/foreplay/setup.rb
CHANGED
data/lib/foreplay/version.rb
CHANGED
data/lib/foreplay.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
require 'foreplay/version'
|
|
2
|
-
require 'foreplay/engine'
|
|
3
|
-
require 'foreplay/launcher'
|
|
4
|
-
|
|
5
1
|
module Foreplay
|
|
2
|
+
autoload :VERSION, 'foreplay/version'
|
|
3
|
+
autoload :Engine, 'foreplay/engine'
|
|
4
|
+
autoload :Launcher, 'foreplay/launcher'
|
|
5
|
+
autoload :Setup, 'foreplay/setup'
|
|
6
|
+
|
|
6
7
|
DEFAULT_PORT = 50_000
|
|
7
8
|
PORT_GAP = 1_000
|
|
8
9
|
|
|
@@ -27,8 +28,7 @@ class Hash
|
|
|
27
28
|
# h1.supermerge(h2)
|
|
28
29
|
# #=> {:x=>{:y=>[4, 5, 6, 7, 8, 9]}, :z=>[7, 8, 9, "xyz"]}
|
|
29
30
|
def supermerge(other_hash)
|
|
30
|
-
fail
|
|
31
|
-
"You passed a #{self.class} and a #{other_hash.class}." unless other_hash.is_a?(Hash)
|
|
31
|
+
fail "supermerge needs a Hash, not a #{other_hash.class}." unless other_hash.is_a?(Hash)
|
|
32
32
|
|
|
33
33
|
new_hash = deep_dup
|
|
34
34
|
|
|
@@ -68,4 +68,21 @@ class String
|
|
|
68
68
|
def fake_erb
|
|
69
69
|
gsub(/(<%=\s+([^%]+)\s+%>)/) { |e| eval "_ = #{e.split[1]}" }
|
|
70
70
|
end
|
|
71
|
+
|
|
72
|
+
def escape_double_quotes
|
|
73
|
+
gsub('"', '\\"')
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def remove_trailing_newline
|
|
77
|
+
gsub(/\n\z/, '')
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
require 'yaml'
|
|
82
|
+
|
|
83
|
+
module YAML
|
|
84
|
+
# Escape string so it's safe for a YAML value
|
|
85
|
+
def self.escape(string)
|
|
86
|
+
/^---\n__: ([^\n]*)$/.match(Psych.dump('__' => string))[1]
|
|
87
|
+
end
|
|
71
88
|
end
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
1
|
require 'net/ssh/shell'
|
|
3
|
-
require 'foreplay'
|
|
4
2
|
|
|
5
3
|
describe Foreplay::Launcher do
|
|
6
4
|
let(:session) { double(Net::SSH::Connection::Session) }
|
|
@@ -84,8 +82,9 @@ describe Foreplay::Launcher do
|
|
|
84
82
|
`rm -f config/foreplay.yml`
|
|
85
83
|
`#{command}`
|
|
86
84
|
|
|
85
|
+
# Exact error message text is Ruby version dependent
|
|
87
86
|
expect { Foreplay::Launcher.start([:deploy, 'production', '']) }
|
|
88
|
-
.to raise_error(Errno::ENOENT, %r{.*No such file or directory
|
|
87
|
+
.to raise_error(Errno::ENOENT, %r{.*No such file or directory.+/home/fred/no-such-file.*})
|
|
89
88
|
end
|
|
90
89
|
|
|
91
90
|
it 'complains if a mandatory key is missing from the config file' do
|
|
@@ -123,6 +122,11 @@ describe Foreplay::Launcher do
|
|
|
123
122
|
end
|
|
124
123
|
|
|
125
124
|
it 'deploys to the environment' do
|
|
125
|
+
secret_data = { 'BIG_SECRET' => '123', 'MOUSTACHE' => '{{moustache}}' }
|
|
126
|
+
secrets = double(Foreplay::Engine::Secrets)
|
|
127
|
+
allow(secrets).to receive(:fetch).and_return(secret_data)
|
|
128
|
+
allow(Foreplay::Engine::Secrets).to receive(:new).and_return(secrets)
|
|
129
|
+
|
|
126
130
|
expect(Net::SSH)
|
|
127
131
|
.to(receive(:start))
|
|
128
132
|
.with(/web[12].example.com/, 'fred', verbose: :warn, port: 22, password: 'trollope')
|
|
@@ -139,16 +143,24 @@ describe Foreplay::Launcher do
|
|
|
139
143
|
'cd 50000 && mkdir -p tmp doc log config',
|
|
140
144
|
'rvm rvmrc load && rvm info',
|
|
141
145
|
'if [ -f .ruby-version ] ; then rvm install `cat .ruby-version` ; else echo "No .ruby-version file found" ; fi',
|
|
142
|
-
'echo "
|
|
146
|
+
'echo "BIG_SECRET=123" > .env',
|
|
147
|
+
'echo "MOUSTACHE={{moustache}}" >> .env',
|
|
148
|
+
'echo "HOME=$HOME" >> .env',
|
|
143
149
|
'echo "SHELL=$SHELL" >> .env',
|
|
144
150
|
'echo "PATH=$PATH:`which bundle`" >> .env',
|
|
145
151
|
'echo "GEM_HOME=$HOME/.rvm/gems/`rvm tools identifier`" >> .env',
|
|
146
152
|
'echo "RAILS_ENV=production" >> .env',
|
|
147
|
-
'echo "
|
|
153
|
+
'echo "---" > config/application.yml',
|
|
154
|
+
'echo "production:" >> config/application.yml',
|
|
155
|
+
'echo " BIG_SECRET: \'123\'" >> config/application.yml',
|
|
156
|
+
'echo " MOUSTACHE: ! \'{{moustache}}\'" >> config/application.yml',
|
|
157
|
+
'echo "---" > .foreman',
|
|
158
|
+
'echo "concurrency: web=1,worker=0,scheduler=0" >> .foreman',
|
|
148
159
|
'echo "app: foreplay-50000" >> .foreman',
|
|
149
160
|
'echo "port: 50000" >> .foreman',
|
|
150
161
|
'echo "user: fred" >> .foreman',
|
|
151
|
-
'echo "
|
|
162
|
+
'echo "---" > config/database.yml',
|
|
163
|
+
'echo "production:" >> config/database.yml',
|
|
152
164
|
'echo " adapter: postgresql" >> config/database.yml',
|
|
153
165
|
'echo " encoding: utf8" >> config/database.yml',
|
|
154
166
|
'echo " database: TODO Put the database name here" >> config/database.yml',
|
|
@@ -171,11 +183,6 @@ describe Foreplay::Launcher do
|
|
|
171
183
|
'mkdir -p .foreplay/foreplay && touch .foreplay/foreplay/current_port && cat .foreplay/foreplay/current_port',
|
|
172
184
|
'echo 50000 > $HOME/.foreplay/foreplay/current_port',
|
|
173
185
|
'sleep 60',
|
|
174
|
-
#- 'sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 50000',
|
|
175
|
-
#- 'sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 51000',
|
|
176
|
-
#- 'sudo iptables-save > /etc/iptables/rules.v4',
|
|
177
|
-
#- 'sudo iptables-save > /etc/iptables.up.rules',
|
|
178
|
-
#- 'sudo iptables-save -c | egrep REDIRECT --color=never',
|
|
179
186
|
'sudo stop foreplay-51000 || echo \'No previous instance running\''
|
|
180
187
|
].each do |command|
|
|
181
188
|
expect(shell).to receive(:execute).with(command).and_return(process)
|
data/spec/lib/hash_spec.rb
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
describe YAML do
|
|
2
|
+
context '#escape' do
|
|
3
|
+
it 'uses the expected Ruby version' do
|
|
4
|
+
expect(RUBY_VERSION).to eq '1.9.3'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it 'uses the expected YAML version' do
|
|
8
|
+
expect(YAML::VERSION).to eq '1.3.4' # The escaping below changes with different YAML versions
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'correctly escape a basic string' do
|
|
12
|
+
expect(YAML.escape 'brian').to eq('brian')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'correctly escape a troublesome string' do
|
|
16
|
+
expect(YAML.escape '{{moustache}} beard').to eq("! '{{moustache}} beard'")
|
|
17
|
+
expect(YAML.escape "Brian O'Brien").to eq("Brian O'Brien")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
#
|
|
2
|
-
require '
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
# CodeClimate code coverage reporting
|
|
2
|
+
require 'codeclimate-test-reporter'
|
|
3
|
+
CodeClimate::TestReporter.start
|
|
4
|
+
|
|
5
|
+
unless ENV['NO_SIMPLECOV']
|
|
6
|
+
require 'simplecov'
|
|
7
|
+
require 'coveralls'
|
|
8
|
+
|
|
9
|
+
if ENV['CIRCLE_ARTIFACTS']
|
|
10
|
+
dir = File.join('..', '..', '..', ENV['CIRCLE_ARTIFACTS'], 'coverage')
|
|
11
|
+
SimpleCov.coverage_dir(dir)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
SimpleCov.start
|
|
15
|
+
Coveralls.wear!('rails') if ENV['COVERALLS_REPO_TOKEN']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
require 'foreplay'
|
|
6
19
|
|
|
7
20
|
RSpec.configure do |config|
|
|
8
21
|
# Run specs in random order to surface order dependencies. If you find an
|
|
@@ -12,7 +25,5 @@ RSpec.configure do |config|
|
|
|
12
25
|
config.order = 'random'
|
|
13
26
|
|
|
14
27
|
# Manually-added
|
|
15
|
-
config.color = true
|
|
16
28
|
config.tty = true
|
|
17
|
-
config.formatter = :documentation
|
|
18
29
|
end
|
metadata
CHANGED
|
@@ -1,201 +1,285 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foreplay
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.11.
|
|
4
|
+
version: 0.11.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Xenapto
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-10-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: foreman
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ! '>='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '0.76'
|
|
20
|
-
- -
|
|
20
|
+
- - <
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
22
|
version: '1.0'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
|
-
- -
|
|
27
|
+
- - ! '>='
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
29
|
version: '0.76'
|
|
30
|
-
- -
|
|
30
|
+
- - <
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: '1.0'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: ssh-shell
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- -
|
|
37
|
+
- - ! '>='
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
39
|
version: '0.4'
|
|
40
|
-
- -
|
|
40
|
+
- - <
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
42
|
version: '1.0'
|
|
43
43
|
type: :runtime
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
|
-
- -
|
|
47
|
+
- - ! '>='
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
49
|
version: '0.4'
|
|
50
|
-
- -
|
|
50
|
+
- - <
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: '1.0'
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: activesupport
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
|
57
|
-
- -
|
|
57
|
+
- - ! '>='
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
59
|
version: '3.2'
|
|
60
|
-
- -
|
|
60
|
+
- - <
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
62
|
version: '5.0'
|
|
63
63
|
type: :runtime
|
|
64
64
|
prerelease: false
|
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
|
-
- -
|
|
67
|
+
- - ! '>='
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: '3.2'
|
|
70
|
-
- -
|
|
70
|
+
- - <
|
|
71
71
|
- !ruby/object:Gem::Version
|
|
72
72
|
version: '5.0'
|
|
73
73
|
- !ruby/object:Gem::Dependency
|
|
74
74
|
name: bundler
|
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
|
76
76
|
requirements:
|
|
77
|
-
- -
|
|
77
|
+
- - ~>
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
79
|
version: '1.9'
|
|
80
80
|
type: :development
|
|
81
81
|
prerelease: false
|
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
|
83
83
|
requirements:
|
|
84
|
-
- -
|
|
84
|
+
- - ~>
|
|
85
85
|
- !ruby/object:Gem::Version
|
|
86
86
|
version: '1.9'
|
|
87
87
|
- !ruby/object:Gem::Dependency
|
|
88
88
|
name: rake
|
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
|
90
90
|
requirements:
|
|
91
|
-
- -
|
|
91
|
+
- - ~>
|
|
92
92
|
- !ruby/object:Gem::Version
|
|
93
93
|
version: '10.4'
|
|
94
94
|
type: :development
|
|
95
95
|
prerelease: false
|
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
|
97
97
|
requirements:
|
|
98
|
-
- -
|
|
98
|
+
- - ~>
|
|
99
99
|
- !ruby/object:Gem::Version
|
|
100
100
|
version: '10.4'
|
|
101
101
|
- !ruby/object:Gem::Dependency
|
|
102
102
|
name: rspec
|
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
|
104
104
|
requirements:
|
|
105
|
-
- -
|
|
105
|
+
- - ~>
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
107
|
version: '3.2'
|
|
108
108
|
type: :development
|
|
109
109
|
prerelease: false
|
|
110
110
|
version_requirements: !ruby/object:Gem::Requirement
|
|
111
111
|
requirements:
|
|
112
|
-
- -
|
|
112
|
+
- - ~>
|
|
113
113
|
- !ruby/object:Gem::Version
|
|
114
114
|
version: '3.2'
|
|
115
|
+
- !ruby/object:Gem::Dependency
|
|
116
|
+
name: rspec_junit_formatter
|
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - ~>
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: '0.2'
|
|
122
|
+
type: :development
|
|
123
|
+
prerelease: false
|
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
125
|
+
requirements:
|
|
126
|
+
- - ~>
|
|
127
|
+
- !ruby/object:Gem::Version
|
|
128
|
+
version: '0.2'
|
|
115
129
|
- !ruby/object:Gem::Dependency
|
|
116
130
|
name: cucumber
|
|
117
131
|
requirement: !ruby/object:Gem::Requirement
|
|
118
132
|
requirements:
|
|
119
|
-
- -
|
|
133
|
+
- - ~>
|
|
120
134
|
- !ruby/object:Gem::Version
|
|
121
135
|
version: '2.0'
|
|
122
136
|
type: :development
|
|
123
137
|
prerelease: false
|
|
124
138
|
version_requirements: !ruby/object:Gem::Requirement
|
|
125
139
|
requirements:
|
|
126
|
-
- -
|
|
140
|
+
- - ~>
|
|
127
141
|
- !ruby/object:Gem::Version
|
|
128
142
|
version: '2.0'
|
|
129
143
|
- !ruby/object:Gem::Dependency
|
|
130
144
|
name: aruba
|
|
131
145
|
requirement: !ruby/object:Gem::Requirement
|
|
132
146
|
requirements:
|
|
133
|
-
- -
|
|
147
|
+
- - ~>
|
|
134
148
|
- !ruby/object:Gem::Version
|
|
135
149
|
version: '0.6'
|
|
136
150
|
type: :development
|
|
137
151
|
prerelease: false
|
|
138
152
|
version_requirements: !ruby/object:Gem::Requirement
|
|
139
153
|
requirements:
|
|
140
|
-
- -
|
|
154
|
+
- - ~>
|
|
141
155
|
- !ruby/object:Gem::Version
|
|
142
156
|
version: '0.6'
|
|
143
157
|
- !ruby/object:Gem::Dependency
|
|
144
158
|
name: gem-release
|
|
145
159
|
requirement: !ruby/object:Gem::Requirement
|
|
146
160
|
requirements:
|
|
147
|
-
- -
|
|
161
|
+
- - ~>
|
|
148
162
|
- !ruby/object:Gem::Version
|
|
149
163
|
version: '0.7'
|
|
150
164
|
type: :development
|
|
151
165
|
prerelease: false
|
|
152
166
|
version_requirements: !ruby/object:Gem::Requirement
|
|
153
167
|
requirements:
|
|
154
|
-
- -
|
|
168
|
+
- - ~>
|
|
155
169
|
- !ruby/object:Gem::Version
|
|
156
170
|
version: '0.7'
|
|
157
171
|
- !ruby/object:Gem::Dependency
|
|
158
172
|
name: simplecov
|
|
159
173
|
requirement: !ruby/object:Gem::Requirement
|
|
160
174
|
requirements:
|
|
161
|
-
- -
|
|
175
|
+
- - ~>
|
|
162
176
|
- !ruby/object:Gem::Version
|
|
163
177
|
version: '0.10'
|
|
164
178
|
type: :development
|
|
165
179
|
prerelease: false
|
|
166
180
|
version_requirements: !ruby/object:Gem::Requirement
|
|
167
181
|
requirements:
|
|
168
|
-
- -
|
|
182
|
+
- - ~>
|
|
169
183
|
- !ruby/object:Gem::Version
|
|
170
184
|
version: '0.10'
|
|
171
185
|
- !ruby/object:Gem::Dependency
|
|
172
186
|
name: coveralls
|
|
173
187
|
requirement: !ruby/object:Gem::Requirement
|
|
174
188
|
requirements:
|
|
175
|
-
- -
|
|
189
|
+
- - ~>
|
|
176
190
|
- !ruby/object:Gem::Version
|
|
177
191
|
version: '0.8'
|
|
178
192
|
type: :development
|
|
179
193
|
prerelease: false
|
|
180
194
|
version_requirements: !ruby/object:Gem::Requirement
|
|
181
195
|
requirements:
|
|
182
|
-
- -
|
|
196
|
+
- - ~>
|
|
183
197
|
- !ruby/object:Gem::Version
|
|
184
198
|
version: '0.8'
|
|
199
|
+
- !ruby/object:Gem::Dependency
|
|
200
|
+
name: codeclimate-test-reporter
|
|
201
|
+
requirement: !ruby/object:Gem::Requirement
|
|
202
|
+
requirements:
|
|
203
|
+
- - ~>
|
|
204
|
+
- !ruby/object:Gem::Version
|
|
205
|
+
version: '0.4'
|
|
206
|
+
type: :development
|
|
207
|
+
prerelease: false
|
|
208
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
209
|
+
requirements:
|
|
210
|
+
- - ~>
|
|
211
|
+
- !ruby/object:Gem::Version
|
|
212
|
+
version: '0.4'
|
|
185
213
|
- !ruby/object:Gem::Dependency
|
|
186
214
|
name: rubocop
|
|
187
215
|
requirement: !ruby/object:Gem::Requirement
|
|
188
216
|
requirements:
|
|
189
|
-
- -
|
|
217
|
+
- - ~>
|
|
190
218
|
- !ruby/object:Gem::Version
|
|
191
219
|
version: '0.30'
|
|
192
220
|
type: :development
|
|
193
221
|
prerelease: false
|
|
194
222
|
version_requirements: !ruby/object:Gem::Requirement
|
|
195
223
|
requirements:
|
|
196
|
-
- -
|
|
224
|
+
- - ~>
|
|
197
225
|
- !ruby/object:Gem::Version
|
|
198
226
|
version: '0.30'
|
|
227
|
+
- !ruby/object:Gem::Dependency
|
|
228
|
+
name: guard
|
|
229
|
+
requirement: !ruby/object:Gem::Requirement
|
|
230
|
+
requirements:
|
|
231
|
+
- - ~>
|
|
232
|
+
- !ruby/object:Gem::Version
|
|
233
|
+
version: '2.7'
|
|
234
|
+
type: :development
|
|
235
|
+
prerelease: false
|
|
236
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
237
|
+
requirements:
|
|
238
|
+
- - ~>
|
|
239
|
+
- !ruby/object:Gem::Version
|
|
240
|
+
version: '2.7'
|
|
241
|
+
- !ruby/object:Gem::Dependency
|
|
242
|
+
name: guard-rspec
|
|
243
|
+
requirement: !ruby/object:Gem::Requirement
|
|
244
|
+
requirements:
|
|
245
|
+
- - ~>
|
|
246
|
+
- !ruby/object:Gem::Version
|
|
247
|
+
version: '4.3'
|
|
248
|
+
type: :development
|
|
249
|
+
prerelease: false
|
|
250
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
251
|
+
requirements:
|
|
252
|
+
- - ~>
|
|
253
|
+
- !ruby/object:Gem::Version
|
|
254
|
+
version: '4.3'
|
|
255
|
+
- !ruby/object:Gem::Dependency
|
|
256
|
+
name: guard-rubocop
|
|
257
|
+
requirement: !ruby/object:Gem::Requirement
|
|
258
|
+
requirements:
|
|
259
|
+
- - ~>
|
|
260
|
+
- !ruby/object:Gem::Version
|
|
261
|
+
version: '1.2'
|
|
262
|
+
type: :development
|
|
263
|
+
prerelease: false
|
|
264
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
265
|
+
requirements:
|
|
266
|
+
- - ~>
|
|
267
|
+
- !ruby/object:Gem::Version
|
|
268
|
+
version: '1.2'
|
|
269
|
+
- !ruby/object:Gem::Dependency
|
|
270
|
+
name: guard-cucumber
|
|
271
|
+
requirement: !ruby/object:Gem::Requirement
|
|
272
|
+
requirements:
|
|
273
|
+
- - ~>
|
|
274
|
+
- !ruby/object:Gem::Version
|
|
275
|
+
version: '1.6'
|
|
276
|
+
type: :development
|
|
277
|
+
prerelease: false
|
|
278
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
279
|
+
requirements:
|
|
280
|
+
- - ~>
|
|
281
|
+
- !ruby/object:Gem::Version
|
|
282
|
+
version: '1.6'
|
|
199
283
|
description: Deploying Rails projects to Ubuntu using Foreman
|
|
200
284
|
email:
|
|
201
285
|
- developers@xenapto.com
|
|
@@ -204,11 +288,12 @@ executables:
|
|
|
204
288
|
extensions: []
|
|
205
289
|
extra_rdoc_files: []
|
|
206
290
|
files:
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
210
|
-
-
|
|
291
|
+
- .gitignore
|
|
292
|
+
- .hound.yml
|
|
293
|
+
- .rspec
|
|
294
|
+
- .rubocop.yml
|
|
211
295
|
- Gemfile
|
|
296
|
+
- Guardfile
|
|
212
297
|
- LICENSE.txt
|
|
213
298
|
- README.md
|
|
214
299
|
- Rakefile
|
|
@@ -235,12 +320,13 @@ files:
|
|
|
235
320
|
- lib/foreplay/engine/steps.yml
|
|
236
321
|
- lib/foreplay/launcher.rb
|
|
237
322
|
- lib/foreplay/setup.rb
|
|
238
|
-
- lib/foreplay/setup/foreplay.yml
|
|
323
|
+
- lib/foreplay/setup/foreplay.template.yml
|
|
239
324
|
- lib/foreplay/version.rb
|
|
240
325
|
- spec/lib/foreplay/deploy_spec.rb
|
|
241
326
|
- spec/lib/foreplay/secrets_spec.rb
|
|
242
327
|
- spec/lib/foreplay/setup_spec.rb
|
|
243
328
|
- spec/lib/hash_spec.rb
|
|
329
|
+
- spec/lib/yaml_spec.rb
|
|
244
330
|
- spec/spec_helper.rb
|
|
245
331
|
homepage: https://github.com/Xenapto/foreplay
|
|
246
332
|
licenses:
|
|
@@ -252,20 +338,20 @@ require_paths:
|
|
|
252
338
|
- lib
|
|
253
339
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
254
340
|
requirements:
|
|
255
|
-
- -
|
|
341
|
+
- - ! '>='
|
|
256
342
|
- !ruby/object:Gem::Version
|
|
257
343
|
version: '0'
|
|
258
344
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
345
|
requirements:
|
|
260
|
-
- -
|
|
346
|
+
- - ! '>='
|
|
261
347
|
- !ruby/object:Gem::Version
|
|
262
348
|
version: '0'
|
|
263
349
|
requirements: []
|
|
264
350
|
rubyforge_project:
|
|
265
|
-
rubygems_version: 2.4.
|
|
351
|
+
rubygems_version: 2.4.3
|
|
266
352
|
signing_key:
|
|
267
353
|
specification_version: 4
|
|
268
|
-
summary: 'Example: foreplay deploy production'
|
|
354
|
+
summary: ! 'Example: foreplay deploy production'
|
|
269
355
|
test_files:
|
|
270
356
|
- features/check.feature
|
|
271
357
|
- features/deploy.feature
|
|
@@ -275,4 +361,5 @@ test_files:
|
|
|
275
361
|
- spec/lib/foreplay/secrets_spec.rb
|
|
276
362
|
- spec/lib/foreplay/setup_spec.rb
|
|
277
363
|
- spec/lib/hash_spec.rb
|
|
364
|
+
- spec/lib/yaml_spec.rb
|
|
278
365
|
- spec/spec_helper.rb
|
data/.ruby-version
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2.2.2
|