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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 693a6cc6b88a2957765b798ac1f1de80a1e99579
4
- data.tar.gz: c8a26ffe9a1e24c087e59c1555defe29afca81e7
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NWVlNmM4YmJkZDVhN2VlNTY4Y2Y3MDA1MTAwNzg5M2ZiMmIxYWZhZA==
5
+ data.tar.gz: !binary |-
6
+ MzcxMTZiNjI0MzJmYjI3N2RhYWZhYzE1OTAzNzZjZTRmNDhmZjJkYQ==
5
7
  SHA512:
6
- metadata.gz: 781a7928b8f5e0023692b1a40db8233433b2f85dbe636a344f7b95173d68a76c69da78cbabcadeb0fa21e274fcc16b12ce603e3e657a6b96ded6a60a41bee604
7
- data.tar.gz: f2ca0483339c263fe652ddde1def30fde44be01f3e34acfcb38cde390fd5cc830076016e613a55c30a84e776bf2660f1cb8cd69fc67a2296b31efe3d1501dfdb
8
+ metadata.gz: !binary |-
9
+ MmJjOWYyZDRmNmZlYzhlNjdiYTdmYmFkMWM0MjRjMzZiNTExZTM3NDU5MDJj
10
+ YzRmZWI4YWVkMjY3YWVjOTZjN2RmNGI3MjdkYTJiMTY3ZTA0ZjhhYzI1MmQ1
11
+ NDc0ZjY3YzEzYmI1NjUzYmY0M2ZiYmJmMWU1NTQ0ZjJjYjQ2Yzk=
12
+ data.tar.gz: !binary |-
13
+ MjYzMDJkNTllOGI4ZTI1NDZhMjgyMTIxMzQxMGMyZjI1MTczN2NjZDI2ODM2
14
+ NjM5MGZkZGMxZDVlY2IwMzQ3ZTM3ZTYwZjIxOTI0ZDJiYzE4Nzc0MDg2YmNk
15
+ NGIzZTVhYzRmMmYyNGQ2M2NjZDg1ZmQyNTVkOGNkYWU4MTQwOGY=
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
+ Gemfile.lock
2
+ .ruby-version
1
3
  .ruby-gemset
2
4
  ._*
3
5
  .DS_Store
@@ -7,7 +9,6 @@
7
9
  *.sassc
8
10
  .sass-cache
9
11
  capybara-*.html
10
- .rspec
11
12
  .env
12
13
  /.bundle
13
14
  /vendor/bundle
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --profile
3
+ --require spec_helper
4
+ --format progress
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
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in foreplay.gemspec
2
+ ruby "1.9.3"
4
3
  gemspec
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
- require 'bundler/gem_tasks'
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
@@ -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 check test --role worker`
53
- Then the output should contain "Checking"
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"
@@ -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
 
@@ -1,8 +1,8 @@
1
- require 'foreplay/engine/secrets/location'
2
-
3
1
  module Foreplay
4
2
  class Engine
5
3
  class Secrets
4
+ autoload :Location, 'foreplay/engine/secrets/location'
5
+
6
6
  attr_reader :environment, :secret_locations
7
7
 
8
8
  def initialize(e, sl)
@@ -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
- if header?
38
- @commands = ["echo \"#{header}\" > #{filename}"]
39
- redirect
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
- if instructions[key].is_a? Hash
45
- build_commands_from_hash
46
- else
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 build_commands_from_hash
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
- if @redirect
63
- '>>'
64
- else
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
@@ -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
 
@@ -27,7 +27,7 @@ module Foreplay
27
27
  end
28
28
 
29
29
  def config
30
- template('setup/foreplay.yml', 'config/foreplay.yml')
30
+ template('setup/foreplay.template.yml', 'config/foreplay.yml')
31
31
  end
32
32
  end
33
33
  end
@@ -1,3 +1,3 @@
1
1
  module Foreplay
2
- VERSION = '0.11.1'
2
+ VERSION = '0.11.2'
3
3
  end
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 'supermerge only works if you pass a hash. '\
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 @ rb_sysopen - /home/fred/no-such-file.*})
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 "HOME=$HOME" > .env',
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 "concurrency: web=1,worker=0,scheduler=0" > .foreman',
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 "production:" > config/database.yml',
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)
@@ -1,6 +1,3 @@
1
- require 'spec_helper'
2
- require 'foreplay'
3
-
4
1
  describe Foreplay::Engine::Secrets do
5
2
  context '#fetch' do
6
3
  it 'returns nil if there is no secret location' do
@@ -1,6 +1,3 @@
1
- require 'spec_helper'
2
- require 'foreplay/setup'
3
-
4
1
  describe Foreplay::Setup do
5
2
  before :each do
6
3
  `rm -f config/foreplay.yml`
@@ -1,6 +1,3 @@
1
- require 'spec_helper'
2
- require 'foreplay'
3
-
4
1
  describe Hash do
5
2
  context '#supermerge' do
6
3
  it 'should complain unless two hashes are passed to it' do
@@ -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
- # Initialize simplecov for coverage report.
2
- require 'simplecov'
3
- require 'coveralls'
4
- SimpleCov.start
5
- Coveralls.wear!('rails') if ENV['COVERALLS_REPO_TOKEN']
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.1
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-06-04 00:00:00.000000000 Z
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
- - ".gitignore"
208
- - ".hound.yml"
209
- - ".rubocop.yml"
210
- - ".ruby-version"
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.6
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