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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/shanty.rb +11 -21
- data/lib/shanty/cli.rb +35 -19
- data/lib/shanty/discoverer.rb +9 -3
- data/lib/shanty/discoverers/rubygem.rb +17 -0
- data/lib/shanty/discoverers/shantyfile.rb +9 -2
- data/lib/shanty/env.rb +51 -0
- data/lib/shanty/graph.rb +43 -32
- data/lib/shanty/mixins/acts_as_link_graph_node.rb +0 -10
- data/lib/shanty/mixins/callbacks.rb +20 -8
- data/lib/shanty/mutator.rb +10 -3
- data/lib/shanty/mutators/bundler.rb +13 -0
- data/lib/shanty/mutators/changed.rb +78 -0
- data/lib/shanty/plugin.rb +6 -13
- data/lib/shanty/project.rb +12 -4
- data/lib/shanty/project_template.rb +13 -9
- data/lib/shanty/projects/{ruby.rb → rubygem.rb} +1 -1
- data/lib/shanty/task_env.rb +24 -0
- data/lib/shanty/task_set.rb +45 -0
- data/lib/shanty/{tasks → task_sets}/basic.rb +16 -11
- metadata +24 -126
- data/lib/shanty/discoverers/gradle.rb +0 -18
- data/lib/shanty/global.rb +0 -49
- data/lib/shanty/mutators/git.rb +0 -24
- data/lib/shanty/task.rb +0 -45
- data/lib/shanty/vcs_range.rb +0 -31
- data/lib/shanty/vcs_ranges/local_git.rb +0 -20
data/lib/shanty/mutator.rb
CHANGED
@@ -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
|
18
|
-
self.class.mutators.
|
19
|
-
mutator.new.mutate
|
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
|
data/lib/shanty/plugin.rb
CHANGED
@@ -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
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
-
@
|
23
|
-
@
|
15
|
+
@callbacks ||= []
|
16
|
+
@callbacks.push(args)
|
24
17
|
end
|
25
18
|
end
|
26
19
|
end
|
data/lib/shanty/project.rb
CHANGED
@@ -7,7 +7,7 @@ module Shanty
|
|
7
7
|
include Mixins::ActsAsLinkGraphNode
|
8
8
|
include Mixins::Callbacks
|
9
9
|
|
10
|
-
attr_accessor :name, :path, :options, :
|
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
|
-
@
|
22
|
+
@parents_by_path = project_template.parents
|
23
23
|
@changed = false
|
24
24
|
|
25
25
|
project_template.plugins.each do |plugin|
|
26
|
-
self
|
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
|
-
|
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(
|
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 =
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@
|
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
|
-
|
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
|
-
|
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)
|
@@ -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/
|
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 <
|
9
|
-
desc 'tasks.
|
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,
|
13
|
-
graph.
|
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,
|
24
|
-
graph.
|
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,
|
35
|
-
graph.
|
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.
|
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:
|
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.
|
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.
|
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: '
|
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: '
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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/
|
167
|
+
- lib/shanty/discoverers/rubygem.rb
|
270
168
|
- lib/shanty/discoverers/shantyfile.rb
|
271
|
-
- lib/shanty/
|
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/
|
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/
|
183
|
+
- lib/shanty/projects/rubygem.rb
|
285
184
|
- lib/shanty/projects/static.rb
|
286
|
-
- lib/shanty/
|
287
|
-
- lib/shanty/
|
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.
|
209
|
+
rubygems_version: 2.4.5
|
312
210
|
signing_key:
|
313
211
|
specification_version: 4
|
314
212
|
summary: Pluggable, destributed continous delivery framework.
|