capistrano 3.0.0.pre13 → 3.0.0.pre14
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 +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +17 -0
- data/capistrano.gemspec +2 -0
- data/lib/capistrano.rb +1 -0
- data/lib/capistrano/application.rb +27 -1
- data/lib/capistrano/configuration.rb +2 -0
- data/lib/capistrano/configuration/server.rb +6 -0
- data/lib/capistrano/defaults.rb +11 -1
- data/lib/capistrano/dsl.rb +8 -0
- data/lib/capistrano/tasks/bundler.rake +1 -1
- data/lib/capistrano/tasks/deploy.rake +36 -12
- data/lib/capistrano/tasks/framework.rake +38 -14
- data/lib/capistrano/tasks/git.rake +4 -5
- data/lib/capistrano/templates/Capfile +1 -1
- data/lib/capistrano/templates/deploy.rb.erb +2 -2
- data/lib/capistrano/templates/stage.rb.erb +23 -1
- data/lib/capistrano/version.rb +1 -1
- data/lib/capistrano/version_validator.rb +37 -0
- data/spec/integration/deploy_finalize_spec.rb +2 -2
- data/spec/integration/deploy_finished_spec.rb +2 -2
- data/spec/integration/deploy_update_spec.rb +1 -1
- data/spec/integration/dsl_spec.rb +12 -0
- data/spec/integration/installation_spec.rb +1 -1
- data/spec/lib/capistrano/configuration/server_spec.rb +41 -0
- data/spec/lib/capistrano/dsl_spec.rb +12 -0
- data/spec/lib/capistrano/version_validator_spec.rb +103 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d396873548e6dd9e20c1853f741bc8808e7a529
|
4
|
+
data.tar.gz: 24aa535d127498013298938e5effb7e38bd26fbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 828006f69722330dcfbf09833922f0547a00fde78bd2d59948b4ebd59b139afa779f69c87e7d69e22e1fff7e9377d84484594dc5edaa544919a644c39d9d9338
|
7
|
+
data.tar.gz: 8cfb03d51c92cac8ab9c6bd8cd7ba4d3416731de893927db8ab1b0117e5478af71c4e9256aaea8350a7cf23f663432ae1f7b1b19b5cad80e10890a607bb4c245
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
Reverse Chronological Order:
|
4
4
|
|
5
|
+
## `3.0.0.pre14`
|
6
|
+
|
7
|
+
* Thanks to numerous contributors, in particular (@teohm) for a series of improvements.
|
8
|
+
|
9
|
+
## `3.0.0.pre13`
|
10
|
+
|
11
|
+
* Fixed typos in the Capfile. (@teohm)
|
12
|
+
* Allow setting SSH options globally. (@korin)
|
13
|
+
* Change the flow (and hooks) see http://www.capistranorb.com/documentation/getting-started/flow/ for more information. Requires min SSHKit 0.0.34 (@teohm)
|
14
|
+
* Fix sorting releases in lexicographical order (@teohm)
|
15
|
+
|
5
16
|
## `3.0.0.pre12`
|
6
17
|
|
7
18
|
* `capistrano/bundler` now runs bundle on all roles, this addresses the same
|
data/README.md
CHANGED
@@ -135,6 +135,22 @@ end
|
|
135
135
|
|
136
136
|
Perfect, who needs telephones.
|
137
137
|
|
138
|
+
|
139
|
+
## Running local tasks
|
140
|
+
|
141
|
+
Local tasks can be run by replacing `on` with `run_locally`
|
142
|
+
|
143
|
+
``` ruby
|
144
|
+
desc "Notify service of deployment"
|
145
|
+
task :notify do
|
146
|
+
run_locally do
|
147
|
+
with rails_env: :development do
|
148
|
+
rake 'service:notify'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
```
|
153
|
+
|
138
154
|
## Console
|
139
155
|
|
140
156
|
**Note:** Here be dragons. The console is very immature, but it's much more
|
@@ -196,6 +212,7 @@ The following variables are settable:
|
|
196
212
|
| `:repo_url` | The URL of your Git repository | file://, https://, or ssh:// are all supported |
|
197
213
|
| `:git_https_username` | The (optional) username for accessing your Git repostory over HTTPS | if this is an SSH connection, this setting will have no effect. |
|
198
214
|
| `:git_https_password` | The (optional) password for accessing your Git repostory over HTTPS | if this is an SSH connection, this setting will have no effect. |
|
215
|
+
| `:tmp_dir` | The (optional) temp directory that will be used (default: /tmp) | if you have a shared web host, this setting may need to be set (i.e. /home/user/tmp/capistrano). |
|
199
216
|
|
200
217
|
## SSHKit
|
201
218
|
|
data/capistrano.gemspec
CHANGED
@@ -17,6 +17,8 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
+
gem.post_install_message = "If you're updating Capistrano from 2.x.x, we recommend you to read the upgrade guide: http://www.capistranorb.com/documentation/upgrading/"
|
21
|
+
|
20
22
|
#gem.signing_key = '/Volumes/SD Card/leehambley-private_key.pem'
|
21
23
|
#gem.cert_chain = ['capistrano-public_cert.pem', 'leehambley-public_cert.pem']
|
22
24
|
|
data/lib/capistrano.rb
CHANGED
@@ -13,7 +13,7 @@ module Capistrano
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def sort_options(options)
|
16
|
-
options.push(version)
|
16
|
+
options.push(version,dry_run)
|
17
17
|
super
|
18
18
|
end
|
19
19
|
|
@@ -22,6 +22,14 @@ module Capistrano
|
|
22
22
|
super
|
23
23
|
end
|
24
24
|
|
25
|
+
def top_level_tasks
|
26
|
+
if tasks_without_stage_dependency.include?(@top_level_tasks.first)
|
27
|
+
@top_level_tasks
|
28
|
+
else
|
29
|
+
@top_level_tasks.unshift('deploy:ensure_stage')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
25
33
|
private
|
26
34
|
|
27
35
|
# allows the `cap install` task to load without a capfile
|
@@ -29,6 +37,15 @@ module Capistrano
|
|
29
37
|
File.expand_path(File.join(File.dirname(__FILE__),'..','Capfile'))
|
30
38
|
end
|
31
39
|
|
40
|
+
def tasks_without_stage_dependency
|
41
|
+
defined_stages = Dir['config/deploy/*.rb'].map { |f| File.basename(f, '.rb') }
|
42
|
+
defined_stages + default_tasks
|
43
|
+
end
|
44
|
+
|
45
|
+
def default_tasks
|
46
|
+
%w{install}
|
47
|
+
end
|
48
|
+
|
32
49
|
def version
|
33
50
|
['--version', '-V',
|
34
51
|
"Display the program version.",
|
@@ -38,6 +55,15 @@ module Capistrano
|
|
38
55
|
}
|
39
56
|
]
|
40
57
|
end
|
58
|
+
|
59
|
+
def dry_run
|
60
|
+
['--dry-run', '-n',
|
61
|
+
"Do a dry run without executing actions",
|
62
|
+
lambda { |value|
|
63
|
+
Configuration.env.set(:sshkit_backend, SSHKit::Backend::Printer)
|
64
|
+
}
|
65
|
+
]
|
66
|
+
end
|
41
67
|
end
|
42
68
|
|
43
69
|
end
|
@@ -56,9 +56,11 @@ module Capistrano
|
|
56
56
|
sshkit.format = fetch(:format)
|
57
57
|
sshkit.output_verbosity = fetch(:log_level)
|
58
58
|
sshkit.default_env = fetch(:default_env)
|
59
|
+
sshkit.backend = fetch(:sshkit_backend, SSHKit::Backend::Netssh)
|
59
60
|
sshkit.backend.configure do |backend|
|
60
61
|
backend.pty = fetch(:pty)
|
61
62
|
backend.connection_timeout = fetch(:connection_timeout)
|
63
|
+
backend.ssh_options = fetch(:ssh_options) if fetch(:ssh_options)
|
62
64
|
end
|
63
65
|
end
|
64
66
|
end
|
@@ -35,6 +35,12 @@ module Capistrano
|
|
35
35
|
@properties ||= Properties.new
|
36
36
|
end
|
37
37
|
|
38
|
+
def netssh_options_with_options
|
39
|
+
@netssh_options ||= netssh_options_without_options.merge( fetch(:ssh_options) || {} )
|
40
|
+
end
|
41
|
+
alias_method :netssh_options_without_options, :netssh_options
|
42
|
+
alias_method :netssh_options, :netssh_options_with_options
|
43
|
+
|
38
44
|
class Properties
|
39
45
|
|
40
46
|
def initialize
|
data/lib/capistrano/defaults.rb
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
set :scm, :git
|
2
2
|
set :branch, :master
|
3
3
|
set :deploy_to, "/var/www/#{fetch(:application)}"
|
4
|
+
set :tmp_dir, "/tmp"
|
4
5
|
|
5
|
-
set :
|
6
|
+
set :default_env, {}
|
6
7
|
set :keep_releases, 5
|
7
8
|
|
8
9
|
set :format, :pretty
|
9
10
|
set :log_level, :debug
|
10
11
|
|
11
12
|
set :pty, true
|
13
|
+
|
14
|
+
namespace :deploy do
|
15
|
+
task :ensure_stage do
|
16
|
+
unless stage_set?
|
17
|
+
puts t(:stage_not_set)
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/capistrano/dsl.rb
CHANGED
@@ -22,6 +22,10 @@ module Capistrano
|
|
22
22
|
fetch(:scm)
|
23
23
|
end
|
24
24
|
|
25
|
+
def sudo(*args)
|
26
|
+
execute :sudo, *args
|
27
|
+
end
|
28
|
+
|
25
29
|
def revision_log_message
|
26
30
|
fetch(:revision_log_message,
|
27
31
|
t(:revision_log_message, branch: fetch(:branch), user: local_user, release: release_timestamp))
|
@@ -35,6 +39,10 @@ module Capistrano
|
|
35
39
|
`whoami`
|
36
40
|
end
|
37
41
|
|
42
|
+
def lock(locked_version)
|
43
|
+
VersionValidator.new(locked_version).verify
|
44
|
+
end
|
45
|
+
|
38
46
|
end
|
39
47
|
end
|
40
48
|
self.extend Capistrano::DSL
|
@@ -1,16 +1,29 @@
|
|
1
1
|
namespace :deploy do
|
2
2
|
|
3
|
-
task :
|
3
|
+
task :starting do
|
4
4
|
invoke 'deploy:check'
|
5
5
|
end
|
6
6
|
|
7
|
-
task :
|
7
|
+
task :updating do
|
8
8
|
invoke "#{scm}:create_release"
|
9
9
|
invoke 'deploy:symlink:shared'
|
10
10
|
end
|
11
11
|
|
12
|
-
task :
|
12
|
+
task :reverting do
|
13
|
+
invoke 'deploy:revert_release'
|
14
|
+
end
|
15
|
+
|
16
|
+
task :publishing do
|
13
17
|
invoke 'deploy:symlink:release'
|
18
|
+
invoke 'deploy:restart'
|
19
|
+
end
|
20
|
+
|
21
|
+
task :finishing do
|
22
|
+
invoke 'deploy:cleanup'
|
23
|
+
end
|
24
|
+
|
25
|
+
task :finishing_rollback do
|
26
|
+
invoke 'deploy:cleanup_rollback'
|
14
27
|
end
|
15
28
|
|
16
29
|
task :finished do
|
@@ -81,7 +94,7 @@ namespace :deploy do
|
|
81
94
|
target = release_path.join(dir)
|
82
95
|
source = shared_path.join(dir)
|
83
96
|
unless test "[ -L #{target} ]"
|
84
|
-
if test "[ -
|
97
|
+
if test "[ -d #{target} ]"
|
85
98
|
execute :rm, '-rf', target
|
86
99
|
end
|
87
100
|
execute :ln, '-s', source, target
|
@@ -123,6 +136,22 @@ namespace :deploy do
|
|
123
136
|
end
|
124
137
|
end
|
125
138
|
|
139
|
+
desc 'Remove and archive rolled-back release.'
|
140
|
+
task :cleanup_rollback do
|
141
|
+
on roles(:all) do
|
142
|
+
last_release = capture(:ls, '-xr', releases_path).split.first
|
143
|
+
last_release_path = releases_path.join(last_release)
|
144
|
+
if test "[ `readlink #{current_path}` != #{last_release_path} ]"
|
145
|
+
execute :tar, '-czf',
|
146
|
+
deploy_path.join("rolled-back-release-#{last_release}.tar.gz"),
|
147
|
+
last_release_path
|
148
|
+
execute :rm, '-rf', last_release_path
|
149
|
+
else
|
150
|
+
debug 'Last release is the current release, skip cleanup_rollback.'
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
126
155
|
desc 'Log details of the deploy'
|
127
156
|
task :log_revision do
|
128
157
|
on roles(:all) do
|
@@ -132,19 +161,14 @@ namespace :deploy do
|
|
132
161
|
end
|
133
162
|
end
|
134
163
|
|
135
|
-
desc '
|
136
|
-
task :
|
164
|
+
desc 'Revert to previous release timestamp'
|
165
|
+
task :revert_release do
|
137
166
|
on roles(:all) do
|
138
167
|
last_release = capture(:ls, '-xr', releases_path).split[1]
|
139
168
|
set(:rollback_release_timestamp, last_release)
|
140
169
|
set(:branch, last_release)
|
141
170
|
set(:revision_log_message, rollback_log_message)
|
142
171
|
end
|
143
|
-
|
144
|
-
on roles :app do
|
145
|
-
%w{check finalize restart finishing finished}.each do |task|
|
146
|
-
invoke "deploy:#{task}"
|
147
|
-
end
|
148
|
-
end
|
149
172
|
end
|
173
|
+
|
150
174
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
namespace :deploy do
|
2
2
|
|
3
|
-
desc '
|
3
|
+
desc 'Start a deployment, make sure server(s) ready.'
|
4
4
|
task :starting do
|
5
5
|
end
|
6
6
|
|
@@ -8,37 +8,61 @@ namespace :deploy do
|
|
8
8
|
task :started do
|
9
9
|
end
|
10
10
|
|
11
|
-
desc 'Update'
|
12
|
-
task :
|
11
|
+
desc 'Update server(s) by setting up a new release.'
|
12
|
+
task :updating do
|
13
13
|
end
|
14
14
|
|
15
|
-
desc '
|
16
|
-
task :
|
15
|
+
desc 'Updated'
|
16
|
+
task :updated do
|
17
17
|
end
|
18
18
|
|
19
|
-
desc '
|
20
|
-
task :
|
19
|
+
desc 'Revert server(s) to previous release.'
|
20
|
+
task :reverting do
|
21
21
|
end
|
22
22
|
|
23
|
-
desc '
|
23
|
+
desc 'Reverted'
|
24
|
+
task :reverted do
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Publish the release.'
|
28
|
+
task :publishing do
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'Published'
|
32
|
+
task :published do
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'Finish the deployment, clean up server(s).'
|
24
36
|
task :finishing do
|
25
37
|
end
|
26
38
|
|
39
|
+
desc 'Finish the rollback, clean up server(s).'
|
40
|
+
task :finishing_rollback do
|
41
|
+
end
|
42
|
+
|
27
43
|
desc 'Finished'
|
28
44
|
task :finished do
|
29
45
|
end
|
30
46
|
|
31
|
-
before :starting, :ensure_stage
|
32
|
-
|
33
|
-
|
34
|
-
|
47
|
+
before :starting, :ensure_stage
|
48
|
+
|
49
|
+
desc 'Rollback to previous release.'
|
50
|
+
task :rollback do
|
51
|
+
%w{ starting started
|
52
|
+
reverting reverted
|
53
|
+
publishing published
|
54
|
+
finishing_rollback finished }.each do |task|
|
55
|
+
invoke "deploy:#{task}"
|
35
56
|
end
|
36
57
|
end
|
37
58
|
end
|
38
59
|
|
39
|
-
desc 'Deploy'
|
60
|
+
desc 'Deploy a new release.'
|
40
61
|
task :deploy do
|
41
|
-
%w{starting started
|
62
|
+
%w{ starting started
|
63
|
+
updating updated
|
64
|
+
publishing published
|
65
|
+
finishing finished }.each do |task|
|
42
66
|
invoke "deploy:#{task}"
|
43
67
|
end
|
44
68
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
namespace :git do
|
2
2
|
|
3
3
|
git_environmental_variables = {
|
4
|
-
git_askpass:
|
5
|
-
git_ssh:
|
4
|
+
git_askpass: "/bin/echo",
|
5
|
+
git_ssh: "#{fetch(:tmp_dir)}/git-ssh.sh"
|
6
6
|
}
|
7
7
|
|
8
8
|
desc 'Upload the git wrapper script, this script guarantees that we can script git without getting an interactive prompt'
|
9
9
|
task :wrapper do
|
10
10
|
on roles :all do
|
11
|
-
upload! StringIO.new("#!/bin/sh -e\nexec /usr/bin/ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no \"$@\"\n"),
|
12
|
-
execute :chmod, "+x",
|
11
|
+
upload! StringIO.new("#!/bin/sh -e\nexec /usr/bin/ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no \"$@\"\n"), "#{fetch(:tmp_dir)}/git-ssh.sh"
|
12
|
+
execute :chmod, "+x", "#{fetch(:tmp_dir)}/git-ssh.sh"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -56,7 +56,6 @@ namespace :git do
|
|
56
56
|
'--depth 1', \
|
57
57
|
'--recursive', \
|
58
58
|
'--no-hardlinks', \
|
59
|
-
'--', \
|
60
59
|
repo_path, release_path
|
61
60
|
end
|
62
61
|
end
|
@@ -36,7 +36,7 @@ namespace :deploy do
|
|
36
36
|
after :restart, :clear_cache do
|
37
37
|
on roles(:web), in: :groups, limit: 3, wait: 10 do
|
38
38
|
# Here we can do anything such as:
|
39
|
-
# within
|
39
|
+
# within latest_release_path do
|
40
40
|
# execute :rake, 'cache:clear'
|
41
41
|
# end
|
42
42
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
set :application, 'my app name'
|
2
2
|
set :repo_url, 'git@example.com:me/my_repo.git'
|
3
3
|
|
4
|
-
ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
|
4
|
+
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
|
5
5
|
|
6
6
|
# set :deploy_to, '/var/www/my_app'
|
7
7
|
# set :scm, :git
|
@@ -13,5 +13,5 @@ ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
|
|
13
13
|
# set :linked_files, %w{config/database.yml}
|
14
14
|
# set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
|
15
15
|
|
16
|
-
# set :
|
16
|
+
# set :default_env, { path: "/opt/ruby/bin:$PATH" }
|
17
17
|
# set :keep_releases, 5
|
@@ -17,4 +17,26 @@ role :db, %w{deploy@example.com}
|
|
17
17
|
# extended properties on the server.
|
18
18
|
server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
|
19
19
|
|
20
|
-
# set
|
20
|
+
# you can set custom ssh options
|
21
|
+
# it's possible to pass any option but you need to keep in mind that net/ssh understand limited list of options
|
22
|
+
# you can see them in [net/ssh documentation](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start)
|
23
|
+
# set it globally
|
24
|
+
# set :ssh_options, {
|
25
|
+
# keys: %w(/home/rlisowski/.ssh/id_rsa),
|
26
|
+
# forward_agent: false,
|
27
|
+
# auth_methods: %w(password)
|
28
|
+
# }
|
29
|
+
# and/or per server
|
30
|
+
# server 'example.com',
|
31
|
+
# user: 'user_name',
|
32
|
+
# roles: %w{web app},
|
33
|
+
# ssh_options: {
|
34
|
+
# user: 'user_name', # overrides user setting above
|
35
|
+
# keys: %w(/home/user_name/.ssh/id_rsa),
|
36
|
+
# forward_agent: false,
|
37
|
+
# auth_methods: %w(publickey password)
|
38
|
+
# # password: 'please use keys'
|
39
|
+
# }
|
40
|
+
# setting per server overrides global ssh_options
|
41
|
+
|
42
|
+
# fetch(:default_env).merge!(:rails_env, :<%= stage %>)
|
data/lib/capistrano/version.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Capistrano
|
2
|
+
class VersionValidator
|
3
|
+
|
4
|
+
def initialize(version)
|
5
|
+
@version = version
|
6
|
+
end
|
7
|
+
|
8
|
+
def verify
|
9
|
+
if match?
|
10
|
+
self
|
11
|
+
else
|
12
|
+
fail "Capfile locked at #{version}, but #{current_version} is loaded"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
attr_reader :version
|
18
|
+
|
19
|
+
|
20
|
+
def match?
|
21
|
+
available =~ requested
|
22
|
+
end
|
23
|
+
|
24
|
+
def current_version
|
25
|
+
VERSION
|
26
|
+
end
|
27
|
+
|
28
|
+
def available
|
29
|
+
Gem::Dependency.new('cap', version)
|
30
|
+
end
|
31
|
+
|
32
|
+
def requested
|
33
|
+
Gem::Dependency.new('cap', current_version)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -234,6 +234,11 @@ describe Capistrano::DSL do
|
|
234
234
|
dsl.set(:default_env, default_env)
|
235
235
|
dsl.set(:pty, true)
|
236
236
|
dsl.set(:connection_timeout, 10)
|
237
|
+
dsl.set(:ssh_options, {
|
238
|
+
keys: %w(/home/user/.ssh/id_rsa),
|
239
|
+
forward_agent: false,
|
240
|
+
auth_methods: %w(publickey password)
|
241
|
+
})
|
237
242
|
dsl.configure_backend
|
238
243
|
end
|
239
244
|
|
@@ -256,6 +261,13 @@ describe Capistrano::DSL do
|
|
256
261
|
it 'sets the backend connection timeout' do
|
257
262
|
expect(backend.connection_timeout).to eq 10
|
258
263
|
end
|
264
|
+
|
265
|
+
it 'sets the backend ssh_options' do
|
266
|
+
expect(backend.ssh_options[:keys]).to eq %w(/home/user/.ssh/id_rsa)
|
267
|
+
expect(backend.ssh_options[:forward_agent]).to eq false
|
268
|
+
expect(backend.ssh_options[:auth_methods]).to eq %w(publickey password)
|
269
|
+
end
|
270
|
+
|
259
271
|
end
|
260
272
|
|
261
273
|
end
|
@@ -134,6 +134,47 @@ module Capistrano
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
+
describe 'assign ssh_options' do
|
138
|
+
let(:server) { Server.new('user_name@hostname') }
|
139
|
+
|
140
|
+
context 'defaults' do
|
141
|
+
it 'forward agent' do
|
142
|
+
expect(server.netssh_options[:forward_agent]).to eq true
|
143
|
+
end
|
144
|
+
it 'contains user' do
|
145
|
+
expect(server.netssh_options[:user]).to eq 'user_name'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context 'custom' do
|
150
|
+
let(:properties) do
|
151
|
+
{ ssh_options: {
|
152
|
+
user: 'another_user',
|
153
|
+
keys: %w(/home/another_user/.ssh/id_rsa),
|
154
|
+
forward_agent: false,
|
155
|
+
auth_methods: %w(publickey password) } }
|
156
|
+
end
|
157
|
+
|
158
|
+
before do
|
159
|
+
server.with(properties)
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'not forward agent' do
|
163
|
+
expect(server.netssh_options[:forward_agent]).to eq false
|
164
|
+
end
|
165
|
+
it 'contains correct user' do
|
166
|
+
expect(server.netssh_options[:user]).to eq 'another_user'
|
167
|
+
end
|
168
|
+
it 'contains keys' do
|
169
|
+
expect(server.netssh_options[:keys]).to eq %w(/home/another_user/.ssh/id_rsa)
|
170
|
+
end
|
171
|
+
it 'contains auth_methods' do
|
172
|
+
expect(server.netssh_options[:auth_methods]).to eq %w(publickey password)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
|
137
178
|
end
|
138
179
|
end
|
139
180
|
end
|
@@ -6,6 +6,7 @@ module Capistrano
|
|
6
6
|
include DSL
|
7
7
|
end
|
8
8
|
|
9
|
+
# see also - spec/integration/dsl_spec.rb
|
9
10
|
describe DSL do
|
10
11
|
let(:dsl) { DummyDSL.new }
|
11
12
|
|
@@ -47,5 +48,16 @@ module Capistrano
|
|
47
48
|
it { should be_false }
|
48
49
|
end
|
49
50
|
end
|
51
|
+
|
52
|
+
describe '#sudo' do
|
53
|
+
|
54
|
+
before do
|
55
|
+
dsl.expects(:execute).with(:sudo, :my, :command)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'prepends sudo, delegates to execute' do
|
59
|
+
dsl.sudo(:my, :command)
|
60
|
+
end
|
61
|
+
end
|
50
62
|
end
|
51
63
|
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Capistrano
|
4
|
+
|
5
|
+
describe VersionValidator do
|
6
|
+
let(:validator) { VersionValidator.new(version) }
|
7
|
+
let(:version) { stub }
|
8
|
+
|
9
|
+
describe '#new' do
|
10
|
+
it 'takes a version' do
|
11
|
+
expect(validator)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#verify' do
|
16
|
+
let(:current_version) { '3.0.1' }
|
17
|
+
|
18
|
+
subject { validator.verify }
|
19
|
+
|
20
|
+
before do
|
21
|
+
validator.stubs(:current_version).returns(current_version)
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with exact version' do
|
25
|
+
context 'valid' do
|
26
|
+
let(:version) { '3.0.1' }
|
27
|
+
it { should be_true }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'invalid - lower' do
|
31
|
+
let(:version) { '3.0.0' }
|
32
|
+
|
33
|
+
it 'fails' do
|
34
|
+
expect { subject }.to raise_error
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'invalid - higher' do
|
39
|
+
let(:version) { '3.0.2' }
|
40
|
+
|
41
|
+
it 'fails' do
|
42
|
+
expect { subject }.to raise_error
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'with optimistic versioning' do
|
49
|
+
context 'valid' do
|
50
|
+
let(:version) { '>= 3.0.0' }
|
51
|
+
it { should be_true }
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'invalid - lower' do
|
55
|
+
let(:version) { '<= 2.0.0' }
|
56
|
+
|
57
|
+
it 'fails' do
|
58
|
+
expect { subject }.to raise_error
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
context 'with pessimistic versioning' do
|
66
|
+
context '2 decimal places' do
|
67
|
+
context 'valid' do
|
68
|
+
let(:version) { '~> 3.0.0' }
|
69
|
+
it { should be_true }
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'invalid' do
|
73
|
+
let(:version) { '~> 3.1.0' }
|
74
|
+
|
75
|
+
it 'fails' do
|
76
|
+
expect { subject }.to raise_error
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context '1 decimal place' do
|
82
|
+
let(:current_version) { '3.5.0' }
|
83
|
+
|
84
|
+
context 'valid' do
|
85
|
+
let(:version) { '~> 3.1' }
|
86
|
+
it { should be_true }
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'invalid' do
|
90
|
+
let(:version) { '~> 3.6' }
|
91
|
+
it 'fails' do
|
92
|
+
expect { subject }.to raise_error
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
4
|
+
version: 3.0.0.pre14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Clements
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sshkit
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- lib/capistrano/templates/deploy.rb.erb
|
134
134
|
- lib/capistrano/templates/stage.rb.erb
|
135
135
|
- lib/capistrano/version.rb
|
136
|
+
- lib/capistrano/version_validator.rb
|
136
137
|
- spec/integration/deploy_finalize_spec.rb
|
137
138
|
- spec/integration/deploy_finished_spec.rb
|
138
139
|
- spec/integration/deploy_started_spec.rb
|
@@ -148,6 +149,7 @@ files:
|
|
148
149
|
- spec/lib/capistrano/dsl/env_spec.rb
|
149
150
|
- spec/lib/capistrano/dsl/paths_spec.rb
|
150
151
|
- spec/lib/capistrano/dsl_spec.rb
|
152
|
+
- spec/lib/capistrano/version_validator_spec.rb
|
151
153
|
- spec/lib/capistrano_spec.rb
|
152
154
|
- spec/spec_helper.rb
|
153
155
|
- spec/support/matchers.rb
|
@@ -155,7 +157,8 @@ files:
|
|
155
157
|
homepage: ''
|
156
158
|
licenses: []
|
157
159
|
metadata: {}
|
158
|
-
post_install_message:
|
160
|
+
post_install_message: 'If you''re updating Capistrano from 2.x.x, we recommend you
|
161
|
+
to read the upgrade guide: http://www.capistranorb.com/documentation/upgrading/'
|
159
162
|
rdoc_options: []
|
160
163
|
require_paths:
|
161
164
|
- lib
|
@@ -191,8 +194,8 @@ test_files:
|
|
191
194
|
- spec/lib/capistrano/dsl/env_spec.rb
|
192
195
|
- spec/lib/capistrano/dsl/paths_spec.rb
|
193
196
|
- spec/lib/capistrano/dsl_spec.rb
|
197
|
+
- spec/lib/capistrano/version_validator_spec.rb
|
194
198
|
- spec/lib/capistrano_spec.rb
|
195
199
|
- spec/spec_helper.rb
|
196
200
|
- spec/support/matchers.rb
|
197
201
|
- spec/support/test_app.rb
|
198
|
-
has_rdoc:
|