capistrano-withrsync 0.2.2 → 0.2.3
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/.rspec +2 -1
- data/Gemfile +4 -4
- data/Rakefile +9 -1
- data/lib/capistrano/tasks/withrsync.rake +8 -15
- data/lib/capistrano/withrsync/version.rb +1 -1
- data/spec/helper.rb +10 -0
- data/spec/task_spec.rb +156 -0
- data/wercker.yml +8 -17
- metadata +7 -21
- data/spec/feature_spec.rb +0 -17
- data/spec/spec_helper.rb +0 -18
- data/spec/tid/Capfile +0 -3
- data/spec/tid/Dockerfile +0 -9
- data/spec/tid/Gemfile +0 -3
- data/spec/tid/config/deploy/test.rb +0 -24
- data/spec/tid/config/deploy.rb +0 -8
- data/spec/tid/id_rsa +0 -27
- data/spec/tid/id_rsa.pub +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9024bc30f23503a0351a2d4d6ede53fc4e522a95
|
4
|
+
data.tar.gz: 3d65c63d21ded7fd3761b5a4b4f9d496eb319d68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b6021dcf6c61af1f934e4c6a59dcc4df584b65a54d4f240b4016e25ded50cd181740c4fa0ef786d950cf364c09abc151c4bec724c2557bec89d5776d1429463
|
7
|
+
data.tar.gz: 4ff0d05aff67bd0a99369854948d1460796744b1b09fd1c2f5468caa6694a99e42b5897e221102546c565195077017fef4b44b172cfeb0bd3502a810c327c15f
|
data/.rspec
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -85,21 +85,14 @@ namespace :rsync do
|
|
85
85
|
|
86
86
|
desc 'Sync to deployment hosts from local'
|
87
87
|
task sync: :'rsync:stage' do
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
unless rsync_to == last_rsync_to
|
98
|
-
execute :rsync, rsync_options, rsync_from, rsync_to
|
99
|
-
last_rsync_to = rsync_to
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
88
|
+
release_roles(:all).each do |server|
|
89
|
+
run_locally do
|
90
|
+
user = "#{server.user}@" if !server.user.nil?
|
91
|
+
rsync_options = "#{fetch(:rsync_options).join(' ')}"
|
92
|
+
rsync_from = "#{fetch(:rsync_src)}/"
|
93
|
+
rsync_to = Shellwords.escape("#{user}#{server.hostname}:#{fetch(:rsync_dest_fullpath) || release_path}")
|
94
|
+
execute :rsync, rsync_options, rsync_from, rsync_to
|
95
|
+
end unless server.roles.empty?
|
103
96
|
end
|
104
97
|
end
|
105
98
|
|
data/spec/helper.rb
ADDED
data/spec/task_spec.rb
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
describe 'task' do
|
2
|
+
let(:user) { 'deploy' }
|
3
|
+
let(:escaped_user) { 'deploy' }
|
4
|
+
let(:submodule) { false }
|
5
|
+
|
6
|
+
before do
|
7
|
+
Rake.application.rake_require 'capistrano/tasks/deploy'
|
8
|
+
Rake.application.rake_require 'capistrano/tasks/git'
|
9
|
+
Rake.application.rake_require 'capistrano/tasks/framework'
|
10
|
+
Rake.application.rake_require 'capistrano/tasks/withrsync'
|
11
|
+
|
12
|
+
# for capistrano v3.2
|
13
|
+
servers = Capistrano::Configuration.env.send(:servers)
|
14
|
+
servers.send(:servers).clear unless servers.to_a.length.zero?
|
15
|
+
|
16
|
+
server 'example1.com', user: user, roles: %w(web)
|
17
|
+
server 'example2.com', user: user, roles: %w(app web)
|
18
|
+
server 'example3.com', user: user, roles: %w(db), no_release: true
|
19
|
+
|
20
|
+
set :application, 'my_app_name'
|
21
|
+
set :repo_url, 'https://github.com/linyows/capistrano-withrsync.git'
|
22
|
+
set :branch, 'master'
|
23
|
+
set :deploy_to, Pathname.new('/var/www/app')
|
24
|
+
set :scm, :git
|
25
|
+
set :shared_path, deploy_to.join('shared')
|
26
|
+
set :current_path, deploy_to.join('current')
|
27
|
+
set :releases_path, deploy_to.join('releases')
|
28
|
+
set :release_path, releases_path.join(Time.now.utc.strftime "%Y%m%d%H%M%S")
|
29
|
+
set :rsync_with_submodules, submodule
|
30
|
+
set :format_options, log_file: nil
|
31
|
+
set :stage, 'test'
|
32
|
+
end
|
33
|
+
|
34
|
+
shared_context :create_src do
|
35
|
+
before do
|
36
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
37
|
+
with(:git, :clone, nil, fetch(:repo_url), fetch(:rsync_src))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
shared_context :check_dir do
|
42
|
+
before do
|
43
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
44
|
+
with(" if test ! -d tmp/deploy\n then echo \"Directory does not exist '#{fetch :rsync_src}'\" 1>&2\n false\n fi\n", {:verbosity=>0})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
shared_context :stage do
|
49
|
+
before do
|
50
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
51
|
+
with(:git, :fetch, nil, '--quiet --all --prune')
|
52
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
53
|
+
with(:git, :reset, '--hard origin/master')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
shared_context :stage_with_submodule do
|
58
|
+
before do
|
59
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
60
|
+
with(:git, :fetch, '--recurse-submodules=on-demand', '--quiet --all --prune')
|
61
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
62
|
+
with(:git, :submodule, :update, '--init')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
shared_context :sync do
|
67
|
+
before do
|
68
|
+
1.upto 2 do |i|
|
69
|
+
host = "example#{i}.com"
|
70
|
+
allow_any_instance_of(SSHKit::Backend::Local).to receive(:execute).
|
71
|
+
with(:rsync, '--recursive --delete --delete-excluded --exclude .git* --exclude .svn*',
|
72
|
+
'tmp/deploy/', "#{escaped_user}@#{host}:#{fetch(:deploy_to)}/shared/deploy")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe 'attributes' do
|
78
|
+
%i(
|
79
|
+
rsync_options
|
80
|
+
rsync_copy_options
|
81
|
+
rsync_src
|
82
|
+
rsync_dest
|
83
|
+
rsync_dest_fullpath
|
84
|
+
rsync_with_submodules
|
85
|
+
).each do |k|
|
86
|
+
it "contain #{k}" do
|
87
|
+
expect(env.keys).to include k
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'stage' do
|
93
|
+
include_context :create_src
|
94
|
+
include_context :check_dir
|
95
|
+
include_context :stage
|
96
|
+
|
97
|
+
it 'sets up repository on local' do
|
98
|
+
run_task :'rsync:stage'
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'uses git submodule' do
|
102
|
+
let(:submodule) { true }
|
103
|
+
include_context :stage_with_submodule
|
104
|
+
|
105
|
+
it 'supports submodule' do
|
106
|
+
run_task :'rsync:stage'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe 'sync' do
|
112
|
+
include_context :create_src
|
113
|
+
include_context :check_dir
|
114
|
+
include_context :stage
|
115
|
+
include_context :sync
|
116
|
+
|
117
|
+
it 'synchronizes to remote from local' do
|
118
|
+
run_task :'rsync:sync'
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'includes space in username' do
|
122
|
+
let(:user) { 'deploy user' }
|
123
|
+
let(:escaped_user) { "deploy\\ user" }
|
124
|
+
|
125
|
+
it 'escapes username' do
|
126
|
+
run_task :'rsync:sync'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'excludes no-role hosts' do
|
131
|
+
before do
|
132
|
+
server 'example4.com', user: user, roles: %w()
|
133
|
+
server 'example5.com', user: user
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'contains no-role hosts' do
|
137
|
+
run_task :'rsync:sync'
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe 'release' do
|
143
|
+
include_context :create_src
|
144
|
+
include_context :check_dir
|
145
|
+
include_context :stage
|
146
|
+
include_context :sync
|
147
|
+
|
148
|
+
it 'releases from temp directory on remote' do
|
149
|
+
allow_any_instance_of(SSHKit::Backend::Netssh).to receive(:execute).
|
150
|
+
with(:rsync, '--archive --acls --xattrs',
|
151
|
+
"#{fetch(:shared_path).join('deploy')}/", "#{fetch :release_path}/")
|
152
|
+
|
153
|
+
run_task :'rsync:release'
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
data/wercker.yml
CHANGED
@@ -1,23 +1,14 @@
|
|
1
|
-
box: wercker
|
1
|
+
box: wercker/rvm
|
2
2
|
build:
|
3
3
|
steps:
|
4
|
-
-
|
5
|
-
|
6
|
-
- script:
|
7
|
-
name: install latest docker
|
8
|
-
code: |
|
9
|
-
docker version
|
10
|
-
curl -s http://get.docker.io/ubuntu/ | sudo sh
|
11
|
-
docker version
|
12
|
-
- script:
|
13
|
-
name: chmod private key
|
14
|
-
code: chmod 600 ./spec/tid/id_rsa
|
15
|
-
- script:
|
16
|
-
name: create ssh config
|
17
|
-
code: |
|
18
|
-
echo "Host *" >> ~/.ssh/config
|
19
|
-
echo " StrictHostKeyChecking no" >> ~/.ssh/config
|
4
|
+
- rvm-use:
|
5
|
+
version: ruby-2.3.0
|
20
6
|
- bundle-install
|
21
7
|
- script:
|
22
8
|
name: rspec
|
23
9
|
code: bundle exec rspec
|
10
|
+
|
11
|
+
after-steps:
|
12
|
+
- linyows/slack_notification:
|
13
|
+
token: $SLACK_TOKEN
|
14
|
+
channel: C02FCHEQH
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-withrsync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- linyows
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02
|
11
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -71,15 +71,8 @@ files:
|
|
71
71
|
- lib/capistrano/withrsync.rb
|
72
72
|
- lib/capistrano/withrsync/rake/task.rb
|
73
73
|
- lib/capistrano/withrsync/version.rb
|
74
|
-
- spec/
|
75
|
-
- spec/
|
76
|
-
- spec/tid/Capfile
|
77
|
-
- spec/tid/Dockerfile
|
78
|
-
- spec/tid/Gemfile
|
79
|
-
- spec/tid/config/deploy.rb
|
80
|
-
- spec/tid/config/deploy/test.rb
|
81
|
-
- spec/tid/id_rsa
|
82
|
-
- spec/tid/id_rsa.pub
|
74
|
+
- spec/helper.rb
|
75
|
+
- spec/task_spec.rb
|
83
76
|
- wercker.yml
|
84
77
|
homepage: https://github.com/linyows/capistrano-withrsync
|
85
78
|
licenses:
|
@@ -101,17 +94,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
94
|
version: '0'
|
102
95
|
requirements: []
|
103
96
|
rubyforge_project:
|
104
|
-
rubygems_version: 2.5
|
97
|
+
rubygems_version: 2.4.5
|
105
98
|
signing_key:
|
106
99
|
specification_version: 4
|
107
100
|
summary: Capistrano with rsync
|
108
101
|
test_files:
|
109
|
-
- spec/
|
110
|
-
- spec/
|
111
|
-
- spec/tid/Capfile
|
112
|
-
- spec/tid/Dockerfile
|
113
|
-
- spec/tid/Gemfile
|
114
|
-
- spec/tid/config/deploy.rb
|
115
|
-
- spec/tid/config/deploy/test.rb
|
116
|
-
- spec/tid/id_rsa
|
117
|
-
- spec/tid/id_rsa.pub
|
102
|
+
- spec/helper.rb
|
103
|
+
- spec/task_spec.rb
|
data/spec/feature_spec.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
RSpec.describe 'Capistrano with Rsync' do
|
2
|
-
describe '# bundle exec cap test deploy' do
|
3
|
-
it 'successful' do
|
4
|
-
Dir.chdir ENV['TID_BASE_PATH'] do
|
5
|
-
_, _, ex = cmd 'bundle exec cap test deploy'
|
6
|
-
expect(ex.exitstatus).to eq 0
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'puts some string' do
|
11
|
-
Dir.chdir ENV['TID_BASE_PATH'] do
|
12
|
-
out, _, _ = cmd 'bundle exec cap test deploy'
|
13
|
-
expect(out).to include 'Running /usr/bin/env rsync -e \'ssh -p'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'tid'
|
2
|
-
|
3
|
-
RSpec.configure do |config|
|
4
|
-
config.expect_with :rspec do |expectations|
|
5
|
-
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
6
|
-
end
|
7
|
-
|
8
|
-
config.mock_with :rspec do |mocks|
|
9
|
-
mocks.verify_partial_doubles = true
|
10
|
-
end
|
11
|
-
|
12
|
-
config.include(Tid)
|
13
|
-
config.before(:all) {
|
14
|
-
Tid.bundle
|
15
|
-
Tid.prepare
|
16
|
-
}
|
17
|
-
config.after(:all) { Tid.clear }
|
18
|
-
end
|
data/spec/tid/Capfile
DELETED
data/spec/tid/Dockerfile
DELETED
data/spec/tid/Gemfile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
host = ENV['TID_HOSTNAME']
|
2
|
-
port = ENV['TID_PORT']
|
3
|
-
|
4
|
-
server host,
|
5
|
-
user: 'root',
|
6
|
-
roles: %w(app),
|
7
|
-
ssh_options: {
|
8
|
-
port: port,
|
9
|
-
user: 'root',
|
10
|
-
keys: %w(./id_rsa),
|
11
|
-
forward_agent: false,
|
12
|
-
auth_methods: %w(publickey)
|
13
|
-
}
|
14
|
-
|
15
|
-
namespace :rsync do
|
16
|
-
set :rsync_options, [
|
17
|
-
"-e 'ssh -p #{port} -i ./id_rsa'",
|
18
|
-
'--recursive',
|
19
|
-
'--delete',
|
20
|
-
'--delete-excluded',
|
21
|
-
'--exclude .git*',
|
22
|
-
'--exclude .svn*',
|
23
|
-
]
|
24
|
-
end
|
data/spec/tid/config/deploy.rb
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
Rake::Task['metrics:collect'].clear_actions
|
2
|
-
|
3
|
-
set :application, 'capistrano_with_rsync'
|
4
|
-
set :repo_url, 'https://github.com/linyows/capistrano-withrsync.git'
|
5
|
-
set :deploy_to, '/var/capistrano_with_rsync'
|
6
|
-
set :scm, :git
|
7
|
-
set :format, :pretty
|
8
|
-
set :log_level, :debug
|
data/spec/tid/id_rsa
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
MIIEpAIBAAKCAQEA54RVv3+XjUFcOJC5QD1wobIwkAAvicEz/Ihoq0lVhh3NTSv7
|
3
|
-
yyJl3XKq2KqnzYCln6TFXUiQES6IaeDf3usH55wKOnkgtuxmqn0Lq6aVV6Ly8gfT
|
4
|
-
4qOuKTAMfdQud2VT5vBRWIsxkxPog9Q60EWf99unCGB16wuMrGAPRwYwPQDVbBcW
|
5
|
-
lDR7VkksXsU1vww3ux599GbL6lT74HvzW862onwwmCqesefHr74Aii/5iRVTUBYY
|
6
|
-
be/pN1dm/F7tgT6nEkpdbzzRy6cy0zN/fzCR6FCds17p1q7ujbJz7hzzz3EJwFIu
|
7
|
-
bjtnnjAqOQDsRETkleM6RzwghJZHV/PsOq5HawIDAQABAoIBAQCeO5w/nfz+1kUp
|
8
|
-
hACZH2Tzns4CHZ5gEGRvnOus5hpF5+iBbiZR19i3Wb/bBghaNCr+yab68rVEiQFD
|
9
|
-
HCbmPMzSR5vWCyOI4lno/D4Vu20m0IArW549sJFAJU7kUTjQ8bg+htGSKtBfLaQl
|
10
|
-
NdBcuLl0tfObjhIJ64Lh7WWDrX8asUJbXFRzTd9CdamMSlvwTD2d2kXsjY4gYC3T
|
11
|
-
OOP/zrzKP/WJ/vXtCNqINzyzSOFVMnU2ZICbImCZfXY7WexCT/jyxU5HpBMjgd5K
|
12
|
-
PJMv6GM53AFuA4cmyy6LfmTdVoLzN+6NWboGacCrNv1wLUx0rHbe9vA4YcD+Hqkb
|
13
|
-
dxn6xAJBAoGBAPcEN+TVXYCrFubBbhCJN9fesnuIwtjd1zPKYqERDAUSGVNNV3fp
|
14
|
-
luoqGhLZtJ3hU31yurRMplL6dlkRFGL7v5DIX5gtYF0CAOr5VeNBN5uvOzl1s6uz
|
15
|
-
8lGPureBhPQR6MJHt1tQRYDEFBU2V5wlKuluge2RnvImji1o67mrp3MFAoGBAO/v
|
16
|
-
z+yRyjU8v59ytGr3sRaxcYUxgd7xV4Wtifxr2RJC57wtlRtIh1K/j4IXDRhFeluB
|
17
|
-
rHZ3gMClaWZ6lZ6def5Ezl7yqArZ5eqCD+t0FmOfvB9fEE43ez7Pts7f7qQxslVu
|
18
|
-
lwiFInDQX21xP5OBTtyXdVSrRPmDTCQGtw4ECruvAoGAfsU5ckVWQUyM6kxnEjF5
|
19
|
-
6V2vN9sONIJViYzaZVL8WjXZrXjJ5Q6Klw6YZwg3u7cCRCV3UETuLzO/PSKY1dvh
|
20
|
-
ioprFQxkohb/JZhkzcaQpWOe/3Q6i2pEeDtNVhQwiZoPXHW10jU2FkmLDP/gopAo
|
21
|
-
n7hJEgVkD15eJUvtflJsE4kCgYA3z0RB9rdeIr8/y2KD7xFWAfgxzw4yWVjOU0th
|
22
|
-
V4SqZr2YW9HvArPXX4915v64wpBvcH45IBrmtJMLrz/WITMbHc4S78Z+n6iHH7Gs
|
23
|
-
RtheW+1aLraQOv+D4LTY8eWEc7rTfGHNLYqRSyanQkxTdyRs0x4Lj7r/frbbOmSh
|
24
|
-
8fa9KQKBgQDmxFjHtl7gS58+vlMQZ+M76ChUO+Bvlz4A7No52jQkDvHV0M2Ev5t1
|
25
|
-
H74LIInwkghw8qAOiOSzaFEyEJANDGX9998qTLMKpQF/iZ5cz86uIKsqGBN9sM28
|
26
|
-
zgAhOfA4IkTKAtDOWU9mH3ONet27Kx2acsansL5LU3evm+LE4M1Emg==
|
27
|
-
-----END RSA PRIVATE KEY-----
|
data/spec/tid/id_rsa.pub
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnhFW/f5eNQVw4kLlAPXChsjCQAC+JwTP8iGirSVWGHc1NK/vLImXdcqrYqqfNgKWfpMVdSJARLohp4N/e6wfnnAo6eSC27GaqfQurppVXovLyB9Pio64pMAx91C53ZVPm8FFYizGTE+iD1DrQRZ/326cIYHXrC4ysYA9HBjA9ANVsFxaUNHtWSSxexTW/DDe7Hn30ZsvqVPvge/NbzraifDCYKp6x58evvgCKL/mJFVNQFhht7+k3V2b8Xu2BPqcSSl1vPNHLpzLTM39/MJHoUJ2zXunWru6NsnPuHPPPcQnAUi5uO2eeMCo5AOxEROSV4zpHPCCElkdX8+w6rkdr tomohisaoda@PMAC127S.local
|