shanty 0.1.0 → 0.2.0

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.
@@ -8,15 +8,22 @@ module Shanty
8
8
  attr_reader :mutators
9
9
  end
10
10
 
11
+ attr_reader :env, :graph
12
+
13
+ def initialize(env, graph)
14
+ @env = env
15
+ @graph = graph
16
+ end
17
+
11
18
  def self.inherited(mutator)
12
19
  Util.logger.debug("Detected mutator #{mutator}")
13
20
  @mutators ||= []
14
21
  @mutators << mutator
15
22
  end
16
23
 
17
- def apply_mutations(graph)
18
- self.class.mutators.reduce(graph) do |acc, mutator|
19
- mutator.new.mutate(acc)
24
+ def apply_mutations
25
+ self.class.mutators.each do |mutator|
26
+ mutator.new(@env, @graph).mutate
20
27
  end
21
28
  end
22
29
  end
@@ -0,0 +1,13 @@
1
+ require 'shanty/mutator'
2
+ require 'shanty/plugins/bundler'
3
+
4
+ module Shanty
5
+ # Bundler mutator
6
+ class BundlerMutator < Mutator
7
+ def mutate
8
+ graph.each do |project|
9
+ BundlerPlugin.add_to_project(project) if File.exist?(File.join(project.path, 'Gemfile'))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,78 @@
1
+ require 'find'
2
+ require 'fileutils'
3
+ require 'set'
4
+ require 'shanty/mutator'
5
+
6
+ module Shanty
7
+ # Mutates the graph to mark projects which have changed since the last time they were built.
8
+ class ChangedMutator < Mutator
9
+ UNIT_SEPARATOR = "\u001F"
10
+
11
+ def mutate
12
+ FileUtils.mkdir(shanty_dir) unless File.directory?(shanty_dir)
13
+
14
+ self.cached_index = all_index_files.each_with_object({}) do |path, acc|
15
+ # Check if the file has changed between
16
+ next if unchanged_in_index?(path)
17
+ # Otherwise, it was modified, deleted or added, so update the index if the file still exists.
18
+ acc[path] = current_index[path] if current_index.include?(path)
19
+ mark_project_as_changed(path)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def shanty_dir
26
+ File.join(env.root, '.shanty')
27
+ end
28
+
29
+ def index_file
30
+ File.join(shanty_dir, 'index')
31
+ end
32
+
33
+ def all_index_files
34
+ Set.new(cached_index.keys + current_index.keys).to_a
35
+ end
36
+
37
+ def cached_index
38
+ return @cached_index unless @cached_index.nil?
39
+ return (@cached_index = {}) unless File.exist?(index_file)
40
+
41
+ @cached_index = File.open(index_file).each_line.each_with_object({}) do |line, acc|
42
+ path, *attrs = line.split(UNIT_SEPARATOR)
43
+ acc[path] = attrs
44
+ end
45
+ end
46
+
47
+ def cached_index=(new_index)
48
+ File.open(index_file, 'w+') do |f|
49
+ new_index.each do |path, attrs|
50
+ f.puts(attrs.unshift(path).join(UNIT_SEPARATOR))
51
+ end
52
+ end
53
+ end
54
+
55
+ def unchanged_in_index?(path)
56
+ cached = cached_index[path]
57
+ current = current_index[path]
58
+ !cached.nil? && !current.nil? && current == cached
59
+ end
60
+
61
+ def current_index
62
+ @current_index ||= Find.find(env.root).each_with_object({}) do |path, acc|
63
+ # FIXME: Pass in list of excludes and match as follows:
64
+ # next Find.prune if path =~ /(build|.git|.gradle)/
65
+ next unless File.exist?(path)
66
+ s = File.stat(path)
67
+ next if s.directory?
68
+
69
+ acc[path] = [s.mtime.to_i, s.size]
70
+ end
71
+ end
72
+
73
+ def mark_project_as_changed(path)
74
+ project = graph.owner_of_file(File.join(env.root, path))
75
+ project.changed = true unless project.nil?
76
+ end
77
+ end
78
+ end
@@ -4,23 +4,16 @@ require 'shanty/project_template'
4
4
  module Shanty
5
5
  # Some basic functionality for every plugin.
6
6
  module Plugin
7
- def self.extended(mod)
8
- mod.module_eval do
9
- def self.included(cls)
10
- copy_subscribes_to_class(cls)
11
- end
12
- end
13
- end
14
-
15
- def copy_subscribes_to_class(cls)
16
- @subscriptions.each do |args|
17
- cls.subscribe(*args)
7
+ def add_to_project(project)
8
+ project.singleton_class.include(self)
9
+ @callbacks.each do |callback|
10
+ project.subscribe(*callback)
18
11
  end
19
12
  end
20
13
 
21
14
  def subscribe(*args)
22
- @subscriptions ||= []
23
- @subscriptions.push(args)
15
+ @callbacks ||= []
16
+ @callbacks.push(args)
24
17
  end
25
18
  end
26
19
  end
@@ -7,7 +7,7 @@ module Shanty
7
7
  include Mixins::ActsAsLinkGraphNode
8
8
  include Mixins::Callbacks
9
9
 
10
- attr_accessor :name, :path, :options, :parents_by_name, :changed
10
+ attr_accessor :name, :path, :options, :parents_by_path, :changed
11
11
  attr_reader :changed
12
12
  alias_method :changed?, :changed
13
13
 
@@ -19,11 +19,11 @@ module Shanty
19
19
  @name = project_template.name
20
20
  @path = project_template.path
21
21
  @options = project_template.options
22
- @parents_by_name = project_template.parents
22
+ @parents_by_path = project_template.parents
23
23
  @changed = false
24
24
 
25
25
  project_template.plugins.each do |plugin|
26
- self.class.include plugin
26
+ plugin.add_to_project(self)
27
27
  end
28
28
 
29
29
  instance_eval(&project_template.after_create) unless project_template.after_create.nil?
@@ -52,7 +52,7 @@ module Shanty
52
52
  #
53
53
  # Returns a simple String representation of this instance.
54
54
  def to_s
55
- "Name: #{name}"
55
+ "Name: #{name}, Type: #{self.class}"
56
56
  end
57
57
 
58
58
  # Public: Overriden String conversion method to return a more detailed
@@ -67,5 +67,13 @@ module Shanty
67
67
  options: options
68
68
  }.inspect
69
69
  end
70
+
71
+ private
72
+
73
+ def within_project_dir
74
+ Dir.chdir(path) do
75
+ yield
76
+ end
77
+ end
70
78
  end
71
79
  end
@@ -6,18 +6,21 @@ module Shanty
6
6
  class ProjectTemplate
7
7
  extend Mixins::AttrCombinedAccessor
8
8
 
9
- attr_combined_accessor :name, :type, :plugins, :parents, :options
10
- attr_reader :path
9
+ attr_combined_accessor :name, :type, :priority, :plugins, :parents, :options
10
+ attr_writer :name, :type, :priority, :plugins, :parents, :options
11
+ attr_reader :root, :path
11
12
 
12
- def initialize(path, args = {})
13
+ def initialize(root, path)
13
14
  fail 'Path to project must be a directory.' unless File.directory?(path)
14
15
 
16
+ @root = root
15
17
  @path = path
16
18
  @name = File.basename(path)
17
- @type = args[:type] || StaticProject
18
- @plugins = args[:plugins] || []
19
- @parents = args[:parents] || []
20
- @options = args[:options] || {}
19
+ @type = StaticProject
20
+ @priority = 0
21
+ @plugins = []
22
+ @parents = []
23
+ @options = []
21
24
 
22
25
  execute_shantyfile
23
26
  end
@@ -27,7 +30,7 @@ module Shanty
27
30
 
28
31
  return unless File.exist?(shantyfile_path)
29
32
 
30
- eval(File.read(shantyfile_path))
33
+ instance_eval(File.read(shantyfile_path), shantyfile_path)
31
34
  end
32
35
 
33
36
  def plugin(plugin)
@@ -35,7 +38,8 @@ module Shanty
35
38
  end
36
39
 
37
40
  def parent(parent)
38
- @parents << parent
41
+ # Will make the parent path relative to the root if (and only if) it is relative.
42
+ @parents << File.expand_path(parent, @root)
39
43
  end
40
44
 
41
45
  def option(key, value)
@@ -2,7 +2,7 @@ require 'shanty/project'
2
2
 
3
3
  module Shanty
4
4
  # Public: Represents a projects created with the Ruby language.
5
- class RubyProject < Project
5
+ class RubygemProject < Project
6
6
  subscribe :build, :on_build
7
7
 
8
8
  def on_build
@@ -0,0 +1,24 @@
1
+ require 'delegate'
2
+
3
+ module Shanty
4
+ #
5
+ class TaskEnv < SimpleDelegator
6
+ alias_method :env, :__getobj__
7
+
8
+ def graph
9
+ @graph ||= construct_project_graph
10
+ end
11
+
12
+ private
13
+
14
+ def construct_project_graph
15
+ project_templates = Dir.chdir(root) do
16
+ Discoverer.new(env).discover_all.sort_by(&:priority).reverse.uniq(&:path)
17
+ end
18
+
19
+ Graph.new(project_templates).tap do |graph|
20
+ Mutator.new(env, graph).apply_mutations
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,45 @@
1
+ module Shanty
2
+ # Public: Discover shanty tasks
3
+ class TaskSet
4
+ class << self
5
+ attr_reader :task_sets, :tasks, :partial_task
6
+ end
7
+
8
+ # This method is auto-triggered by Ruby whenever a class inherits from
9
+ # Shanty::TaskSet. This means we can build up a list of all the tasks
10
+ # without requiring them to register with us - neat!
11
+ def self.inherited(task_set)
12
+ @task_sets ||= []
13
+ @task_sets << task_set
14
+ end
15
+
16
+ def self.desc(syntax, desc)
17
+ partial_task[:syntax] = syntax
18
+ partial_task[:desc] = desc
19
+ end
20
+
21
+ def self.param(name, options = {})
22
+ partial_task[:params][name] = options
23
+ end
24
+
25
+ def self.option(name, options = {})
26
+ partial_task[:options][name] = options
27
+ end
28
+
29
+ def self.method_added(name)
30
+ @tasks ||= {}
31
+ @tasks[name] = partial_task.merge(klass: self)
32
+
33
+ # Now reset the task definition.
34
+ @partial_task = {}
35
+ end
36
+
37
+ def self.partial_task
38
+ @partial_task ||= {}
39
+ @partial_task[:params] ||= {}
40
+ @partial_task[:options] ||= {}
41
+
42
+ @partial_task
43
+ end
44
+ end
45
+ end
@@ -1,38 +1,43 @@
1
1
  require 'i18n'
2
- require 'shanty/task'
2
+ require 'shanty/task_set'
3
3
  require 'shanty/util'
4
4
 
5
5
  module Shanty
6
6
  # Public: A set of basic tasks that can be applied to all projects and that
7
7
  # ship with the core of Shanty.
8
- class BasicTasks < Shanty::Task
9
- desc 'tasks.projects.desc'
8
+ class BasicTasks < TaskSet
9
+ desc 'init', 'tasks.init.desc'
10
+ def init(_options, _task_env)
11
+ # FIXME
12
+ end
13
+
14
+ desc 'projects [--changed] [--types TYPE,TYPE,...]', 'tasks.projects.desc'
10
15
  option :changed, type: :boolean, desc: 'tasks.common.options.changed'
11
16
  option :types, type: :array, desc: 'tasks.common.options.types'
12
- def projects(options, graph)
13
- graph.projects.each do |project|
17
+ def projects(options, task_env)
18
+ task_env.graph.each do |project|
14
19
  next if options.changed? && !project.changed?
15
20
  puts project
16
21
  end
17
22
  end
18
23
 
19
- desc 'tasks.build.desc'
24
+ desc 'build [--changed] [--watch] [--types TYPE,TYPE,...]', 'tasks.build.desc'
20
25
  option :changed, type: :boolean, desc: 'tasks.common.options.changed'
21
26
  option :watch, type: :boolean, desc: 'tasks.common.options.watch'
22
27
  option :types, type: :array, desc: 'tasks.common.options.types'
23
- def build(options, graph)
24
- graph.projects.each do |project|
28
+ def build(options, task_env)
29
+ task_env.graph.each do |project|
25
30
  next if options.changed? && !project.changed?
26
31
  fail I18n.t('tasks.build.failed', project: project) unless project.publish(:build)
27
32
  end
28
33
  end
29
34
 
30
- desc 'tasks.test.desc'
35
+ desc 'test [--changed] [--watch] [--types TYPE,TYPE,...]', 'tasks.test.desc'
31
36
  option :changed, type: :boolean, desc: 'tasks.common.options.changed'
32
37
  option :watch, type: :boolean, desc: 'tasks.common.options.watch'
33
38
  option :types, type: :array, desc: 'tasks.common.options.types'
34
- def test(options, graph)
35
- graph.projects.each do |project|
39
+ def test(options, task_env)
40
+ task_env.graph.each do |project|
36
41
  next if options.changed? && !project.changed?
37
42
  fail I18n.t('tasks.test.failed', project: project) unless project.publish(:test)
38
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shanty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Jansen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-31 00:00:00.000000000 Z
12
+ date: 2015-01-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: algorithms
@@ -18,9 +18,6 @@ dependencies:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0.6'
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 0.6.1
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
@@ -28,9 +25,6 @@ dependencies:
28
25
  - - "~>"
29
26
  - !ruby/object:Gem::Version
30
27
  version: '0.6'
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 0.6.1
34
28
  - !ruby/object:Gem::Dependency
35
29
  name: commander
36
30
  requirement: !ruby/object:Gem::Requirement
@@ -38,9 +32,6 @@ dependencies:
38
32
  - - "~>"
39
33
  - !ruby/object:Gem::Version
40
34
  version: '4.2'
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 4.2.1
44
35
  type: :runtime
45
36
  prerelease: false
46
37
  version_requirements: !ruby/object:Gem::Requirement
@@ -48,9 +39,6 @@ dependencies:
48
39
  - - "~>"
49
40
  - !ruby/object:Gem::Version
50
41
  version: '4.2'
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: 4.2.1
54
42
  - !ruby/object:Gem::Dependency
55
43
  name: deep_merge
56
44
  requirement: !ruby/object:Gem::Requirement
@@ -58,9 +46,6 @@ dependencies:
58
46
  - - "~>"
59
47
  - !ruby/object:Gem::Version
60
48
  version: '1.0'
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- version: 1.0.1
64
49
  type: :runtime
65
50
  prerelease: false
66
51
  version_requirements: !ruby/object:Gem::Requirement
@@ -68,169 +53,90 @@ dependencies:
68
53
  - - "~>"
69
54
  - !ruby/object:Gem::Version
70
55
  version: '1.0'
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: 1.0.1
74
- - !ruby/object:Gem::Dependency
75
- name: graph
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '2.6'
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: 2.6.0
84
- type: :runtime
85
- prerelease: false
86
- version_requirements: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: '2.6'
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- version: 2.6.0
94
- - !ruby/object:Gem::Dependency
95
- name: hooks
96
- requirement: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - "~>"
99
- - !ruby/object:Gem::Version
100
- version: '0.4'
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: 0.4.0
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0.4'
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- version: 0.4.0
114
56
  - !ruby/object:Gem::Dependency
115
57
  name: i18n
116
58
  requirement: !ruby/object:Gem::Requirement
117
59
  requirements:
118
60
  - - "~>"
119
61
  - !ruby/object:Gem::Version
120
- version: '0.6'
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: 0.6.11
62
+ version: '0.7'
124
63
  type: :runtime
125
64
  prerelease: false
126
65
  version_requirements: !ruby/object:Gem::Requirement
127
66
  requirements:
128
67
  - - "~>"
129
68
  - !ruby/object:Gem::Version
130
- version: '0.6'
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: 0.6.11
69
+ version: '0.7'
134
70
  - !ruby/object:Gem::Dependency
135
71
  name: pry-byebug
136
72
  requirement: !ruby/object:Gem::Requirement
137
73
  requirements:
138
74
  - - "~>"
139
75
  - !ruby/object:Gem::Version
140
- version: '1.3'
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: 1.3.3
76
+ version: '2.0'
144
77
  type: :development
145
78
  prerelease: false
146
79
  version_requirements: !ruby/object:Gem::Requirement
147
80
  requirements:
148
81
  - - "~>"
149
82
  - !ruby/object:Gem::Version
150
- version: '1.3'
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: 1.3.3
83
+ version: '2.0'
154
84
  - !ruby/object:Gem::Dependency
155
85
  name: rspec
156
86
  requirement: !ruby/object:Gem::Requirement
157
87
  requirements:
158
88
  - - "~>"
159
89
  - !ruby/object:Gem::Version
160
- version: '3.0'
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- version: 3.0.0
90
+ version: '3.1'
164
91
  type: :development
165
92
  prerelease: false
166
93
  version_requirements: !ruby/object:Gem::Requirement
167
94
  requirements:
168
95
  - - "~>"
169
96
  - !ruby/object:Gem::Version
170
- version: '3.0'
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: 3.0.0
97
+ version: '3.1'
174
98
  - !ruby/object:Gem::Dependency
175
99
  name: rubocop
176
100
  requirement: !ruby/object:Gem::Requirement
177
101
  requirements:
178
102
  - - "~>"
179
103
  - !ruby/object:Gem::Version
180
- version: '0.24'
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- version: 0.24.1
104
+ version: '0.28'
184
105
  type: :development
185
106
  prerelease: false
186
107
  version_requirements: !ruby/object:Gem::Requirement
187
108
  requirements:
188
109
  - - "~>"
189
110
  - !ruby/object:Gem::Version
190
- version: '0.24'
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- version: 0.24.1
111
+ version: '0.28'
194
112
  - !ruby/object:Gem::Dependency
195
113
  name: rubocop-rspec
196
114
  requirement: !ruby/object:Gem::Requirement
197
115
  requirements:
198
116
  - - "~>"
199
117
  - !ruby/object:Gem::Version
200
- version: '1.1'
201
- - - ">="
202
- - !ruby/object:Gem::Version
203
- version: 1.1.0
118
+ version: '1.2'
204
119
  type: :development
205
120
  prerelease: false
206
121
  version_requirements: !ruby/object:Gem::Requirement
207
122
  requirements:
208
123
  - - "~>"
209
124
  - !ruby/object:Gem::Version
210
- version: '1.1'
211
- - - ">="
212
- - !ruby/object:Gem::Version
213
- version: 1.1.0
125
+ version: '1.2'
214
126
  - !ruby/object:Gem::Dependency
215
127
  name: rake
216
128
  requirement: !ruby/object:Gem::Requirement
217
129
  requirements:
218
130
  - - "~>"
219
131
  - !ruby/object:Gem::Version
220
- version: '10.3'
221
- - - ">="
222
- - !ruby/object:Gem::Version
223
- version: 10.3.2
132
+ version: '10.4'
224
133
  type: :development
225
134
  prerelease: false
226
135
  version_requirements: !ruby/object:Gem::Requirement
227
136
  requirements:
228
137
  - - "~>"
229
138
  - !ruby/object:Gem::Version
230
- version: '10.3'
231
- - - ">="
232
- - !ruby/object:Gem::Version
233
- version: 10.3.2
139
+ version: '10.4'
234
140
  - !ruby/object:Gem::Dependency
235
141
  name: coveralls
236
142
  requirement: !ruby/object:Gem::Requirement
@@ -238,9 +144,6 @@ dependencies:
238
144
  - - "~>"
239
145
  - !ruby/object:Gem::Version
240
146
  version: '0.7'
241
- - - ">="
242
- - !ruby/object:Gem::Version
243
- version: 0.7.1
244
147
  type: :development
245
148
  prerelease: false
246
149
  version_requirements: !ruby/object:Gem::Requirement
@@ -248,12 +151,7 @@ dependencies:
248
151
  - - "~>"
249
152
  - !ruby/object:Gem::Version
250
153
  version: '0.7'
251
- - - ">="
252
- - !ruby/object:Gem::Version
253
- version: 0.7.1
254
- description: Pluggable, destributed continous delivery framework. Works with your
255
- existing build, test, CI, deployment, or indeed any tools to provide a cohesive
256
- way to do continuous delivery.
154
+ description: See https://github.com/shantytown/shanty for more information!
257
155
  email:
258
156
  - nathan@nathankleyn.com
259
157
  executables:
@@ -266,28 +164,28 @@ files:
266
164
  - lib/shanty.rb
267
165
  - lib/shanty/cli.rb
268
166
  - lib/shanty/discoverer.rb
269
- - lib/shanty/discoverers/gradle.rb
167
+ - lib/shanty/discoverers/rubygem.rb
270
168
  - lib/shanty/discoverers/shantyfile.rb
271
- - lib/shanty/global.rb
169
+ - lib/shanty/env.rb
272
170
  - lib/shanty/graph.rb
273
171
  - lib/shanty/mixins/acts_as_link_graph_node.rb
274
172
  - lib/shanty/mixins/attr_combined_accessor.rb
275
173
  - lib/shanty/mixins/callbacks.rb
276
174
  - lib/shanty/mutator.rb
277
- - lib/shanty/mutators/git.rb
175
+ - lib/shanty/mutators/bundler.rb
176
+ - lib/shanty/mutators/changed.rb
278
177
  - lib/shanty/plugin.rb
279
178
  - lib/shanty/plugins/bundler.rb
280
179
  - lib/shanty/plugins/rspec.rb
281
180
  - lib/shanty/plugins/rubocop.rb
282
181
  - lib/shanty/project.rb
283
182
  - lib/shanty/project_template.rb
284
- - lib/shanty/projects/ruby.rb
183
+ - lib/shanty/projects/rubygem.rb
285
184
  - lib/shanty/projects/static.rb
286
- - lib/shanty/task.rb
287
- - lib/shanty/tasks/basic.rb
185
+ - lib/shanty/task_env.rb
186
+ - lib/shanty/task_set.rb
187
+ - lib/shanty/task_sets/basic.rb
288
188
  - lib/shanty/util.rb
289
- - lib/shanty/vcs_range.rb
290
- - lib/shanty/vcs_ranges/local_git.rb
291
189
  homepage: https://github.com/shantytown/shanty
292
190
  licenses:
293
191
  - MIT
@@ -308,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
308
206
  version: '0'
309
207
  requirements: []
310
208
  rubyforge_project:
311
- rubygems_version: 2.2.2
209
+ rubygems_version: 2.4.5
312
210
  signing_key:
313
211
  specification_version: 4
314
212
  summary: Pluggable, destributed continous delivery framework.