capistrano-conditional 0.0.3 → 0.0.4
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 +7 -0
- data/CHANGELOG.md +6 -0
- data/README.md +37 -11
- data/capistrano-conditional.gemspec +2 -2
- data/lib/capistrano-conditional/deploy.rb +6 -4
- data/lib/capistrano-conditional/integration.rb +6 -1
- data/lib/capistrano-conditional/unit.rb +0 -2
- data/lib/capistrano-conditional/version.rb +1 -1
- metadata +24 -19
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b993e23a21fae3f4070e2e14427b7bb2699edd2a
|
4
|
+
data.tar.gz: d429a2ef57a187e3168998f550acf760782be43e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a199f14d69b1e6292d79fa3e0379b46e1f57cc35c5da6ff7ccd6bdb4fc9a73aacc3ea7a16d496e0da1637c70efbb78fa97bcffd459622fbaef4b591f792dc051
|
7
|
+
data.tar.gz: d44ab7a4b1eba8f5a1c1ca86b68c2b064616dd37f228ed53e9b0a87d7e44d0d4dac4f55f9491105fc0f1e2a125864683e665de80684c5c80a09aff09f519f9e2
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
This gem extends capistrano deployments to allow certain tasks to only be run under certain conditions -- i.e. conditionally.
|
4
4
|
|
5
|
+
It hasn't yet been extended to work with Capistrano 3; pull requests welcomed!
|
6
|
+
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add to your Gemfile:
|
@@ -47,27 +49,52 @@ If you need more custom control, <code>:if</code> and <code>:unless</code> expec
|
|
47
49
|
|
48
50
|
## Example Usage
|
49
51
|
|
52
|
+
These snippets go in <code>config/deploy.rb</code> or any other file that gets loaded via capistrano.
|
53
|
+
|
54
|
+
### A random collection of examples:
|
55
|
+
|
56
|
+
#### Using [whenever](https://github.com/javan/whenever)
|
57
|
+
|
58
|
+
Only run the rake task to update the crontab if the schedule has changed:
|
59
|
+
|
50
60
|
ConditionalDeploy.register :whenever, :watchlist => 'config/schedule.rb' do
|
51
61
|
after "deploy:symlink", "deploy:update_crontab"
|
52
62
|
end
|
53
63
|
|
54
|
-
|
64
|
+
#### Using [thinking-sphinx](https://github.com/pat/thinking-sphinx)
|
65
|
+
|
66
|
+
Only restart the sphinx daemon if our database or schema has changed. Otherwise, just copy the generated sphinx config from the previous release:
|
67
|
+
|
68
|
+
SPHINX_WATCHLIST = ['db/schema.rb', 'db/migrate', 'sphinx.yml', 'app/indices']
|
69
|
+
|
70
|
+
ConditionalDeploy.register :sphinx, :watchlist => SPHINX_WATCHLIST do
|
55
71
|
before "deploy:update_code", "thinking_sphinx:stop"
|
56
72
|
before "deploy:start", "thinking_sphinx:start"
|
57
73
|
before "deploy:restart", "thinking_sphinx:start"
|
58
74
|
end
|
75
|
+
|
76
|
+
ConditionalDeploy.register :no_sphinx, :none_match => SPHINX_WATCHLIST do
|
77
|
+
after "deploy:update_code", "sphinx:copy_config"
|
78
|
+
end
|
79
|
+
|
80
|
+
namespace :sphinx do
|
81
|
+
desc 'Copy the config file from previous release, if available, or else rerun configuration'
|
82
|
+
task :copy_config, :roles => :app do
|
83
|
+
run "([ -f #{current_path}/config/#{stage}.sphinx.conf ] && cp #{current_path}/config/#{stage}.sphinx.conf #{release_path}/config/#{stage}.sphinx.conf) || true"
|
84
|
+
run "[ -f #{release_path}/config/#{stage}.sphinx.conf ] || (cd #{release_path} && bundle exec rake ts:config RAILS_ENV=#{stage})"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
#### Using [jammit](https://github.com/documentcloud/jammit)
|
90
|
+
|
91
|
+
For pre-asset-pipeline versions of Rails, this snippet will reprocess your assets with [jammit](https://github.com/documentcloud/jammit) only if necessary:
|
59
92
|
|
60
93
|
ConditionalDeploy.register :jammit, :watchlist => ['public/images/embed', 'public/stylesheets', 'public/javascripts', 'public/assets', 'config/assets.yml'] do
|
61
94
|
after 'deploy:symlink', 'deploy:rebuild_assets'
|
62
95
|
end
|
63
96
|
|
64
|
-
|
65
|
-
ConditionalDeploy.register(:resque, :unless => lambda { |changed| changed.all?{|f| f['public/'] || f['app/controllers/'] || f['app/views/'] } }) do
|
66
|
-
before "deploy:restart", "resque:workers:restart"
|
67
|
-
end
|
68
|
-
|
69
|
-
# ... note that you still have to actually DEFINE the tasks laid out above (e.g. deploy:update_crontab)
|
70
|
-
|
97
|
+
#### Migrations
|
71
98
|
|
72
99
|
I've got <code>cap deploy</code> in muscle memory, and I used to find myself forgetting to run <code>cap deploy:migrations</code> until after I tested the new changes and found staging wasn't working right. I now add the following code to my apps, so I never have to worry about it again:
|
73
100
|
|
@@ -91,9 +118,8 @@ Since I use it on every project, I've wrapped that logic up in a single command:
|
|
91
118
|
|
92
119
|
By default <code>capistrano-conditional</code> will abort the deployment if you have uncommited changes in your working directory. You can skip this check on an individual run by setting the ALLOW_UNCOMMITED environment variable (e.g. <code>cap deploy ALLOW_UNCOMMITTED=1</code>).
|
93
120
|
|
94
|
-
If you need to force a particular conditional to run, you can also do that via the environment. Given the examples above, if you want to run the conditional named <code>whenever</code> even though config/schedule.rb hasn't been changed, just run <code>
|
121
|
+
If you need to force a particular conditional to run, you can also do that via the environment. Given the examples above, if you want to run the conditional named <code>whenever</code> even though config/schedule.rb hasn't been changed, just run <code>cap deploy RUN_WHENEVER=1</code>. Similarly, if you needed to skip the <code>whenever</code> conditional which would otherwise be run, you can use <code>cap deploy SKIP_WHENEVER=1</code>.
|
95
122
|
|
96
123
|
## License
|
97
124
|
|
98
|
-
Copyright ©
|
99
|
-
|
125
|
+
Copyright © 2013 [Deviantech, Inc.](http://www.deviantech.com) and released under the MIT license.
|
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Capistrano::Conditional::VERSION
|
8
8
|
s.authors = ["Kali Donovan"]
|
9
9
|
s.email = ["kali@deviantech.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/deviantech/capistrano-conditional"
|
11
11
|
s.summary = %q{Adds support for conditional deployment tasks in capistrano}
|
12
12
|
s.description = %q{Allows making tasks for git-based projects conditional based on the specific files to be deployed.}
|
13
13
|
|
@@ -21,5 +21,5 @@ Gem::Specification.new do |s|
|
|
21
21
|
# specify any dependencies here; for example:
|
22
22
|
# s.add_development_dependency "rspec"
|
23
23
|
s.add_runtime_dependency "git"
|
24
|
-
s.add_runtime_dependency "capistrano"
|
24
|
+
s.add_runtime_dependency "capistrano", '~> 2.5'
|
25
25
|
end
|
@@ -64,14 +64,14 @@ class ConditionalDeploy
|
|
64
64
|
end
|
65
65
|
|
66
66
|
log
|
67
|
-
log "Conditional Deployment Report:"
|
67
|
+
log "Conditional Deployment Report:"
|
68
68
|
log
|
69
|
-
log "\tLast deployed commit: #{@last_deployed.message}"
|
69
|
+
log "\tLast deployed commit: #{@last_deployed.message}"
|
70
70
|
log
|
71
|
-
log "\tFiles Modified:"
|
71
|
+
log "\tFiles Modified:"
|
72
72
|
@changed.each {|f| log "\t\t- #{f}"}
|
73
73
|
log
|
74
|
-
log "\tConditional Runlist:"
|
74
|
+
log "\tConditional Runlist:"
|
75
75
|
if @to_run.empty?
|
76
76
|
log "\t\t* No conditional tasks have been added"
|
77
77
|
else
|
@@ -86,7 +86,9 @@ class ConditionalDeploy
|
|
86
86
|
def screen_conditionals
|
87
87
|
@@conditionals.each do |job|
|
88
88
|
force = job.name && ENV["RUN_#{job.name.to_s.upcase}"]
|
89
|
+
skip = job.name && ENV["SKIP_#{job.name.to_s.upcase}"]
|
89
90
|
next unless force || job.applies?(@changed)
|
91
|
+
next if skip
|
90
92
|
@to_run << job
|
91
93
|
end
|
92
94
|
end
|
@@ -1,11 +1,16 @@
|
|
1
1
|
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
log_formatter([
|
3
|
+
{ :match => /^Conditional$/, :color => :cyan, :style => :dim, :priority => 10 }
|
4
|
+
])
|
5
|
+
|
6
|
+
|
2
7
|
abort "\ncapistrano-conditional is not compatible with Capistrano 1.x\n" unless respond_to?(:namespace)
|
3
8
|
abort "\nGit is not defined (are you in a git repository, with the Git gem installed?)\n" unless defined?(Git)
|
4
9
|
|
5
10
|
namespace :conditional do
|
6
11
|
desc "Initializes the conditional deployment functionality"
|
7
12
|
task :apply do
|
8
|
-
deployed_hash = capture("
|
13
|
+
deployed_hash = capture("cat #{current_path}/REVISION").strip
|
9
14
|
ConditionalDeploy.apply_conditions!( deployed_hash )
|
10
15
|
end
|
11
16
|
|
metadata
CHANGED
@@ -1,38 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-conditional
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Kali Donovan
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-12-21 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: git
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: capistrano
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
+
version: '2.5'
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.5'
|
36
41
|
description: Allows making tasks for git-based projects conditional based on the specific
|
37
42
|
files to be deployed.
|
38
43
|
email:
|
@@ -42,6 +47,7 @@ extensions: []
|
|
42
47
|
extra_rdoc_files: []
|
43
48
|
files:
|
44
49
|
- .gitignore
|
50
|
+
- CHANGELOG.md
|
45
51
|
- Gemfile
|
46
52
|
- README.md
|
47
53
|
- Rakefile
|
@@ -51,28 +57,27 @@ files:
|
|
51
57
|
- lib/capistrano-conditional/integration.rb
|
52
58
|
- lib/capistrano-conditional/unit.rb
|
53
59
|
- lib/capistrano-conditional/version.rb
|
54
|
-
homepage:
|
60
|
+
homepage: https://github.com/deviantech/capistrano-conditional
|
55
61
|
licenses: []
|
62
|
+
metadata: {}
|
56
63
|
post_install_message:
|
57
64
|
rdoc_options: []
|
58
65
|
require_paths:
|
59
66
|
- lib
|
60
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
68
|
requirements:
|
63
|
-
- -
|
69
|
+
- - '>='
|
64
70
|
- !ruby/object:Gem::Version
|
65
71
|
version: '0'
|
66
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
73
|
requirements:
|
69
|
-
- -
|
74
|
+
- - '>='
|
70
75
|
- !ruby/object:Gem::Version
|
71
76
|
version: '0'
|
72
77
|
requirements: []
|
73
78
|
rubyforge_project: capistrano-conditional
|
74
|
-
rubygems_version: 1.
|
79
|
+
rubygems_version: 2.1.11
|
75
80
|
signing_key:
|
76
|
-
specification_version:
|
81
|
+
specification_version: 4
|
77
82
|
summary: Adds support for conditional deployment tasks in capistrano
|
78
83
|
test_files: []
|