conditional_capistrano 0.0.1 → 0.0.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 +4 -4
- data/README.md +8 -3
- data/lib/conditional_capistrano/capistrano/task_definition.rb +23 -0
- data/lib/conditional_capistrano/capistrano.rb +15 -26
- data/lib/conditional_capistrano/version.rb +1 -1
- data/spec/conditional_capistrano/capistrano/task_definition_spec.rb +23 -0
- data/spec/conditional_capistrano/capistrano_spec.rb +57 -30
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f45de9060a9828612ef331630eed9a86818c1d24
|
4
|
+
data.tar.gz: 628b71a9a4735e2777aa79fe794fb8fd2965fbe6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc86f11b5fe49a3e95393ddb388b3e9aad5aff58fdecf40b766753ff3cf3187a487ca6f1abe659e38e74e182e2518ebad6bf642ab5b307d78a49de6b37c17da2
|
7
|
+
data.tar.gz: 2f67842e3830cfd5c186f61a73456c97c1a5795c17231c9b8eeb94bd36fb4038fde8f4d76db2c6bdafacdbe5d7232622ef18af39ad987ee711467ce1e6e55f58
|
data/README.md
CHANGED
@@ -23,10 +23,15 @@ Simply require the capistrano module in your `config/deploy.rb` file:
|
|
23
23
|
|
24
24
|
require 'conditional_capistrano/capistrano'
|
25
25
|
|
26
|
-
Then add some options to the
|
26
|
+
Then add some options to the tasks:
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
task :compile, roles: :assets, when_changed: %w[app/assets Gemfile Gemfile.lock config/application.rb] do
|
29
|
+
...
|
30
|
+
end
|
31
|
+
|
32
|
+
task :check, roles: :app, when_changed: "config/key_vault.yml" do
|
33
|
+
...
|
34
|
+
end
|
30
35
|
|
31
36
|
You can either mention single files or whole folders, which will be checked for any
|
32
37
|
changes within.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ConditionalCapistrano
|
2
|
+
module Capistrano
|
3
|
+
module TaskDefinition
|
4
|
+
def self.included(base)
|
5
|
+
base.class_eval do
|
6
|
+
include InstanceMethods
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module InstanceMethods
|
11
|
+
def check_for_path_changes?
|
12
|
+
options.has_key? :when_changed
|
13
|
+
end
|
14
|
+
|
15
|
+
def paths_to_check
|
16
|
+
Array options[:when_changed]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Capistrano::TaskDefinition.send :include, ConditionalCapistrano::Capistrano::TaskDefinition
|
@@ -1,49 +1,38 @@
|
|
1
|
+
require 'conditional_capistrano/capistrano/task_definition'
|
2
|
+
|
1
3
|
module ConditionalCapistrano
|
2
4
|
module Capistrano
|
3
5
|
def self.included(base)
|
4
6
|
base.class_eval do
|
5
7
|
include InstanceMethods
|
6
8
|
|
7
|
-
alias_method :
|
8
|
-
alias_method :
|
9
|
+
alias_method :execute_task_without_paths_check, :execute_task
|
10
|
+
alias_method :execute_task, :execute_task_with_paths_check
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
12
14
|
module InstanceMethods
|
13
|
-
def
|
14
|
-
return
|
15
|
-
|
16
|
-
applies_to_without_file_check?(task)
|
17
|
-
end
|
15
|
+
def execute_task_with_paths_check(task)
|
16
|
+
return if task.check_for_path_changes? && !trigger?(task)
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
def check_for_changes?
|
22
|
-
options.has_key?(:when_changed)
|
18
|
+
execute_task_without_paths_check task
|
23
19
|
end
|
24
20
|
|
25
|
-
def
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def trigger?(*paths)
|
30
|
-
paths.find { |path| changed_files.find { |p| p[0, path.length] == path } }
|
21
|
+
def trigger?(task)
|
22
|
+
task.paths_to_check.find { |path| changed_files.find { |p| p[0, path.length] == path } }
|
31
23
|
rescue IndexError
|
32
24
|
false
|
33
25
|
end
|
34
26
|
|
35
|
-
|
36
|
-
@changed_files ||=
|
37
|
-
config.capture(
|
38
|
-
"cd #{fetch(:repository_cache)} && git diff --name-only #{fetch(:current_git_tag)} HEAD | cat"
|
39
|
-
).strip.split
|
40
|
-
end
|
27
|
+
private
|
41
28
|
|
42
|
-
def
|
43
|
-
|
29
|
+
def changed_files
|
30
|
+
capture(
|
31
|
+
"cd #{repository_cache} && git diff --name-only #{current_git_tag} HEAD | cat"
|
32
|
+
).strip.split
|
44
33
|
end
|
45
34
|
end
|
46
35
|
end
|
47
36
|
end
|
48
37
|
|
49
|
-
Capistrano::
|
38
|
+
Capistrano::Configuration.send :include, ConditionalCapistrano::Capistrano
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Capistrano; end
|
2
|
+
module Capistrano
|
3
|
+
class TaskDefinition
|
4
|
+
attr_reader :options
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'conditional_capistrano/capistrano/task_definition'
|
9
|
+
|
10
|
+
describe Capistrano::TaskDefinition do
|
11
|
+
|
12
|
+
describe "#check_for_path_changes?" do
|
13
|
+
it "returns true if no 'when_changed' options are present" do
|
14
|
+
subject.stub :options => {}
|
15
|
+
subject.check_for_path_changes?.should_not be
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns false if 'when_changed' options are present" do
|
19
|
+
subject.stub :options => { when_changed: "path" }
|
20
|
+
subject.check_for_path_changes?.should be
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,53 +1,80 @@
|
|
1
1
|
module Capistrano; end
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
module Capistrano
|
3
|
+
class Configuration
|
4
|
+
def execute_task(task)
|
5
|
+
"original"
|
6
|
+
end
|
7
7
|
end
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
module Capistrano
|
11
|
+
class TaskDefinition
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
14
15
|
require 'conditional_capistrano/capistrano'
|
15
16
|
|
16
|
-
describe Capistrano::
|
17
|
+
describe Capistrano::Configuration do
|
18
|
+
|
19
|
+
describe "#applies_to_with_paths_check?" do
|
20
|
+
let(:task) { Capistrano::TaskDefinition.new }
|
21
|
+
|
22
|
+
it "falls back to the original if this task doesn't require a path check" do
|
23
|
+
task.stub :check_for_path_changes? => false
|
24
|
+
subject.execute_task(task).should == "original"
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when path check is required" do
|
28
|
+
before do
|
29
|
+
task.stub :check_for_path_changes? => true
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns false if files have been specified, but haven't changed" do
|
33
|
+
subject.stub :trigger? => false
|
34
|
+
subject.execute_task(task).should_not be
|
35
|
+
end
|
17
36
|
|
18
|
-
|
19
|
-
|
20
|
-
|
37
|
+
it "falls back to the original if files have been specified, and have changed" do
|
38
|
+
subject.stub :trigger? => true
|
39
|
+
subject.execute_task(task).should == "original"
|
40
|
+
end
|
21
41
|
end
|
42
|
+
end
|
22
43
|
|
23
|
-
|
24
|
-
|
25
|
-
callback.stub :trigger? => false
|
44
|
+
describe "#trigger?" do
|
45
|
+
let(:task) { Capistrano::TaskDefinition.new }
|
26
46
|
|
27
|
-
|
47
|
+
it "returns false if the task doesn't have any paths to check" do
|
48
|
+
task.stub paths_to_check: []
|
49
|
+
subject.trigger?(task).should_not be
|
28
50
|
end
|
29
51
|
|
30
|
-
it "
|
31
|
-
|
32
|
-
|
52
|
+
it "returns false if no files have changed" do
|
53
|
+
task.stub paths_to_check: %w[path/to/file]
|
54
|
+
subject.stub changed_files: []
|
33
55
|
|
34
|
-
|
56
|
+
subject.trigger?(task).should_not be
|
35
57
|
end
|
36
58
|
|
37
|
-
|
38
|
-
|
39
|
-
|
59
|
+
it "returns true if we have matching files" do
|
60
|
+
task.stub paths_to_check: %w[path/to/file]
|
61
|
+
subject.stub changed_files: %w[path/to/file]
|
40
62
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
63
|
+
subject.trigger?(task).should be
|
64
|
+
end
|
44
65
|
|
45
|
-
|
46
|
-
|
66
|
+
it "returns false if we files that don't match" do
|
67
|
+
task.stub paths_to_check: %w[path/to/file1]
|
68
|
+
subject.stub changed_files: %w[path/to/file2]
|
47
69
|
|
48
|
-
|
49
|
-
|
50
|
-
|
70
|
+
subject.trigger?(task).should_not be
|
71
|
+
end
|
72
|
+
|
73
|
+
it "returns true if we have files that match a path" do
|
74
|
+
task.stub paths_to_check: %w[path/to]
|
75
|
+
subject.stub changed_files: %w[path/to/file]
|
76
|
+
|
77
|
+
subject.trigger?(task).should be
|
51
78
|
end
|
52
79
|
end
|
53
80
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conditional_capistrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- redbubble
|
@@ -68,7 +68,9 @@ files:
|
|
68
68
|
- conditional_capistrano.gemspec
|
69
69
|
- lib/conditional_capistrano.rb
|
70
70
|
- lib/conditional_capistrano/capistrano.rb
|
71
|
+
- lib/conditional_capistrano/capistrano/task_definition.rb
|
71
72
|
- lib/conditional_capistrano/version.rb
|
73
|
+
- spec/conditional_capistrano/capistrano/task_definition_spec.rb
|
72
74
|
- spec/conditional_capistrano/capistrano_spec.rb
|
73
75
|
homepage: ''
|
74
76
|
licenses:
|
@@ -96,4 +98,5 @@ specification_version: 4
|
|
96
98
|
summary: Execute capistrano task's only when certain path's have changed since the
|
97
99
|
last deploy
|
98
100
|
test_files:
|
101
|
+
- spec/conditional_capistrano/capistrano/task_definition_spec.rb
|
99
102
|
- spec/conditional_capistrano/capistrano_spec.rb
|