spud 0.2.6 → 0.2.9
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/lib/spud/cli/options.rb +0 -6
- data/lib/spud/cli/parser.rb +0 -1
- data/lib/spud/driver.rb +0 -5
- data/lib/spud/error.rb +1 -1
- data/lib/spud/help.rb +1 -2
- data/lib/spud/lister.rb +45 -14
- data/lib/spud/task_runners/docker-compose/task.rb +56 -0
- data/lib/spud/task_runners/make/task.rb +7 -7
- data/lib/spud/task_runners/package.json/task.rb +4 -4
- data/lib/spud/task_runners/rake_task_runner/task.rb +59 -0
- data/lib/spud/task_runners/spud_task_runner/task.rb +3 -2
- data/lib/spud/task_runners/task.rb +2 -6
- data/lib/spud/task_runners/task_runners.rb +12 -9
- data/lib/spud/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c375bdd21d64dcddbdb86e7d3aef2c8e04abd0b5
|
4
|
+
data.tar.gz: 26d2be23293edfa1305ab3b28684e04a3d2d98ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8689e8cbf001ad043337b556a7e6c981c67481eac17c10810da3d9d5f851fb0def39cb5a828d0d96022b722828447412cc3f3a730d599f756d59098df32a5a21
|
7
|
+
data.tar.gz: 033f5a3b43d2d1d99247cf75d1aa98c9d42e69f99cfaa50201f66253681388b8f55c80c1f008691cabb9e23aef4f6d5daed418d2958c6b3b4714e98121de279b
|
data/lib/spud/cli/options.rb
CHANGED
@@ -7,7 +7,6 @@ module Spud
|
|
7
7
|
extend T::Sig
|
8
8
|
|
9
9
|
attr_writer :help
|
10
|
-
attr_writer :files
|
11
10
|
attr_writer :inspect
|
12
11
|
|
13
12
|
sig {returns(T::Array[String])}
|
@@ -21,11 +20,6 @@ module Spud
|
|
21
20
|
!!@help
|
22
21
|
end
|
23
22
|
|
24
|
-
sig {returns(T::Boolean)}
|
25
|
-
def files?
|
26
|
-
!!@files
|
27
|
-
end
|
28
|
-
|
29
23
|
sig {returns(T::Boolean)}
|
30
24
|
def inspect?
|
31
25
|
!!@inspect
|
data/lib/spud/cli/parser.rb
CHANGED
@@ -54,7 +54,6 @@ module Spud
|
|
54
54
|
case flag
|
55
55
|
when '-h', '--help' then options.help = true
|
56
56
|
when '-w', '--watch' then options.watches << take!
|
57
|
-
when '-f', '--files' then options.files = true
|
58
57
|
when '-i', '--inspect' then options.inspect = true
|
59
58
|
else raise Error, "invalid option: '#{flag}'"
|
60
59
|
end
|
data/lib/spud/driver.rb
CHANGED
data/lib/spud/error.rb
CHANGED
data/lib/spud/help.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strict
|
2
2
|
require 'sorbet-runtime'
|
3
3
|
require 'stringio'
|
4
4
|
require 'spud/version'
|
@@ -18,7 +18,6 @@ module Spud
|
|
18
18
|
options:
|
19
19
|
-h, --help show this help dialog
|
20
20
|
-w, --watch <glob> re-run task any time glob changes
|
21
|
-
-f, --files list parsed files
|
22
21
|
-i, --inspect show details about a task
|
23
22
|
HELP
|
24
23
|
end
|
data/lib/spud/lister.rb
CHANGED
@@ -7,6 +7,11 @@ module Spud
|
|
7
7
|
class Lister
|
8
8
|
extend T::Sig
|
9
9
|
|
10
|
+
TASKS_HEADER = T.let('TASK', String)
|
11
|
+
ORDERED_HEADER = T.let('ORDERED ARGS', String)
|
12
|
+
NAMED_HEADER = T.let('NAMED ARGS', String)
|
13
|
+
SOURCES_HEADER = T.let('SOURCE', String)
|
14
|
+
|
10
15
|
sig {params(tasks: T::Array[TaskRunners::Task]).void}
|
11
16
|
def initialize(tasks)
|
12
17
|
@tasks = tasks
|
@@ -16,6 +21,27 @@ module Spud
|
|
16
21
|
def list_tasks!
|
17
22
|
builder = StringIO.new
|
18
23
|
|
24
|
+
if show_headers?
|
25
|
+
builder.write TASKS_HEADER.ljust(max_task_length)
|
26
|
+
|
27
|
+
if show_ordered_args?
|
28
|
+
builder.write ' '
|
29
|
+
builder.write ORDERED_HEADER.ljust(max_ordered_string_length)
|
30
|
+
end
|
31
|
+
|
32
|
+
if show_named_args?
|
33
|
+
builder.write ' '
|
34
|
+
builder.write NAMED_HEADER.ljust(max_named_string_length)
|
35
|
+
end
|
36
|
+
|
37
|
+
if show_sources?
|
38
|
+
builder.write ' '
|
39
|
+
builder.write SOURCES_HEADER
|
40
|
+
end
|
41
|
+
|
42
|
+
builder.write "\n"
|
43
|
+
end
|
44
|
+
|
19
45
|
@tasks.each do |task|
|
20
46
|
builder.write task.name.ljust(max_task_length)
|
21
47
|
|
@@ -29,9 +55,9 @@ module Spud
|
|
29
55
|
builder.write task.args.named.join(' ').ljust(max_named_string_length)
|
30
56
|
end
|
31
57
|
|
32
|
-
if
|
58
|
+
if show_sources?
|
33
59
|
builder.write ' '
|
34
|
-
builder.write task.
|
60
|
+
builder.write task.source
|
35
61
|
end
|
36
62
|
|
37
63
|
builder.write "\n"
|
@@ -40,21 +66,19 @@ module Spud
|
|
40
66
|
puts builder.string
|
41
67
|
end
|
42
68
|
|
43
|
-
|
44
|
-
def list_filenames!
|
45
|
-
puts filenames.join("\n")
|
46
|
-
end
|
69
|
+
private
|
47
70
|
|
48
|
-
sig {returns(T::
|
49
|
-
def
|
50
|
-
@
|
71
|
+
sig {returns(T::Boolean)}
|
72
|
+
def show_headers?
|
73
|
+
@show_headers ||= show_ordered_args? || show_named_args? || show_sources?
|
51
74
|
end
|
52
75
|
|
53
|
-
private
|
54
|
-
|
55
76
|
sig {returns(Integer)}
|
56
77
|
def max_task_length
|
57
|
-
@max_task_length ||= @tasks
|
78
|
+
@max_task_length ||= @tasks
|
79
|
+
.map { |task| task.name.length }
|
80
|
+
.tap { |lengths| lengths.push(TASKS_HEADER.length) if show_headers? }
|
81
|
+
.max
|
58
82
|
end
|
59
83
|
|
60
84
|
sig {returns(Integer)}
|
@@ -62,6 +86,7 @@ module Spud
|
|
62
86
|
@max_ordered_string_length ||= @tasks
|
63
87
|
.map { |task| task.args.ordered.join(' ') }
|
64
88
|
.map(&:length)
|
89
|
+
.tap { |lengths| lengths.push(ORDERED_HEADER.length) if show_headers? }
|
65
90
|
.max
|
66
91
|
end
|
67
92
|
|
@@ -75,6 +100,7 @@ module Spud
|
|
75
100
|
@max_named_string_length ||= @tasks
|
76
101
|
.map { |task| task.args.named.join(' ') }
|
77
102
|
.map(&:length)
|
103
|
+
.tap { |lengths| lengths.push(NAMED_HEADER.length) if show_headers? }
|
78
104
|
.max
|
79
105
|
end
|
80
106
|
|
@@ -84,8 +110,13 @@ module Spud
|
|
84
110
|
end
|
85
111
|
|
86
112
|
sig {returns(T::Boolean)}
|
87
|
-
def
|
88
|
-
|
113
|
+
def show_sources?
|
114
|
+
sources.length > 1
|
115
|
+
end
|
116
|
+
|
117
|
+
sig {returns(T::Array[String])}
|
118
|
+
def sources
|
119
|
+
@filenames ||= @tasks.map(&:source).uniq
|
89
120
|
end
|
90
121
|
end
|
91
122
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# typed: true
|
2
|
+
require 'sorbet-runtime'
|
3
|
+
require 'yaml'
|
4
|
+
require 'spud/driver'
|
5
|
+
require 'spud/shell/command'
|
6
|
+
require 'spud/task_runners/task'
|
7
|
+
|
8
|
+
module Spud
|
9
|
+
module TaskRunners
|
10
|
+
module DockerCompose
|
11
|
+
class Task < TaskRunners::Task
|
12
|
+
extend T::Sig
|
13
|
+
|
14
|
+
sig {override.returns(String)}
|
15
|
+
attr_reader :name
|
16
|
+
|
17
|
+
sig {override.params(driver: Driver).returns(T::Array[TaskRunners::Task])}
|
18
|
+
def self.tasks(driver)
|
19
|
+
return [] unless File.exist?('docker-compose.yml')
|
20
|
+
|
21
|
+
if `command -v docker-compose`.empty?
|
22
|
+
puts 'docker-compose.yml detected, but no installation of `docker-compose` exists. Skipping docker-compose...'
|
23
|
+
return []
|
24
|
+
end
|
25
|
+
|
26
|
+
source = File.read('docker-compose.yml')
|
27
|
+
contents = YAML.load(source)
|
28
|
+
services = contents['services']
|
29
|
+
services.map { |name, service| new(driver, name, service) }
|
30
|
+
end
|
31
|
+
|
32
|
+
sig {params(driver: Driver, name: String, service: T::Hash[String, T.untyped]).void}
|
33
|
+
def initialize(driver, name, service)
|
34
|
+
@driver = driver
|
35
|
+
@name = name
|
36
|
+
@service = service
|
37
|
+
end
|
38
|
+
|
39
|
+
sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
|
40
|
+
def invoke(ordered, named)
|
41
|
+
system("docker-compose up #{@name} #{ordered.join(' ')}")
|
42
|
+
end
|
43
|
+
|
44
|
+
sig {override.returns(String)}
|
45
|
+
def source
|
46
|
+
'docker-compose.yml'
|
47
|
+
end
|
48
|
+
|
49
|
+
sig {override.returns(String)}
|
50
|
+
def details
|
51
|
+
YAML.dump(@name => @service)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -25,30 +25,30 @@ module Spud
|
|
25
25
|
|
26
26
|
source = File.read('Makefile')
|
27
27
|
T.unsafe(source.scan(/^(\S+):.*/)).map(&:first).map do |name|
|
28
|
-
new(driver, name)
|
28
|
+
new(driver, name, source)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
sig {params(driver: Driver, name: String).void}
|
33
|
-
def initialize(driver, name)
|
32
|
+
sig {params(driver: Driver, name: String, make_source: String).void}
|
33
|
+
def initialize(driver, name, make_source)
|
34
34
|
@driver = driver
|
35
35
|
@name = name
|
36
|
+
@make_source = make_source
|
36
37
|
end
|
37
38
|
|
38
39
|
sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
|
39
40
|
def invoke(ordered, named)
|
40
|
-
|
41
|
+
system("make #{name}")
|
41
42
|
end
|
42
43
|
|
43
44
|
sig {override.returns(String)}
|
44
|
-
def
|
45
|
+
def source
|
45
46
|
'Makefile'
|
46
47
|
end
|
47
48
|
|
48
49
|
sig {override.returns(String)}
|
49
50
|
def details
|
50
|
-
|
51
|
-
lines = source.split("\n")
|
51
|
+
lines = @make_source.split("\n")
|
52
52
|
cursor = 0
|
53
53
|
|
54
54
|
cursor += 1 until lines[cursor]&.start_with?(name)
|
@@ -36,8 +36,8 @@ module Spud
|
|
36
36
|
end
|
37
37
|
|
38
38
|
source = File.read('package.json')
|
39
|
-
|
40
|
-
scripts =
|
39
|
+
contents = JSON.parse(source)
|
40
|
+
scripts = contents['scripts']
|
41
41
|
return [] unless scripts
|
42
42
|
|
43
43
|
scripts.keys.map { |name| new(driver, name, command, scripts) }
|
@@ -53,11 +53,11 @@ module Spud
|
|
53
53
|
|
54
54
|
sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
|
55
55
|
def invoke(ordered, named)
|
56
|
-
|
56
|
+
system("#{@command} run #{name}")
|
57
57
|
end
|
58
58
|
|
59
59
|
sig {override.returns(String)}
|
60
|
-
def
|
60
|
+
def source
|
61
61
|
'package.json'
|
62
62
|
end
|
63
63
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# typed: true
|
2
|
+
require 'sorbet-runtime'
|
3
|
+
require 'rake'
|
4
|
+
require 'spud/driver'
|
5
|
+
require 'spud/task_arg'
|
6
|
+
require 'spud/task_args'
|
7
|
+
require 'spud/task_runners/task'
|
8
|
+
|
9
|
+
module Spud
|
10
|
+
module TaskRunners
|
11
|
+
module RakeTaskRunner
|
12
|
+
class Task < TaskRunners::Task
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig {override.params(driver: Driver).returns(T::Array[TaskRunners::Task])}
|
16
|
+
def self.tasks(driver)
|
17
|
+
app = Rake.application
|
18
|
+
rakefile = app.find_rakefile_location&.first
|
19
|
+
return [] if rakefile.nil?
|
20
|
+
|
21
|
+
app.init('rake', [])
|
22
|
+
app.load_rakefile
|
23
|
+
|
24
|
+
app.tasks.map(&method(:new))
|
25
|
+
end
|
26
|
+
|
27
|
+
sig {params(task: Rake::Task).void}
|
28
|
+
def initialize(task)
|
29
|
+
@rake_task = task
|
30
|
+
end
|
31
|
+
|
32
|
+
sig {override.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
|
33
|
+
def invoke(ordered, named)
|
34
|
+
T.unsafe(@rake_task).invoke(*ordered)
|
35
|
+
end
|
36
|
+
|
37
|
+
sig {override.returns(String)}
|
38
|
+
def name
|
39
|
+
@rake_task.name
|
40
|
+
end
|
41
|
+
|
42
|
+
sig {override.returns(String)}
|
43
|
+
def source
|
44
|
+
'rake'
|
45
|
+
end
|
46
|
+
|
47
|
+
sig {override.returns(TaskArgs)}
|
48
|
+
def args
|
49
|
+
TaskArgs.new(@rake_task.arg_names.map { |arg_name| TaskArg.new(arg_name.to_s, 'ordered') })
|
50
|
+
end
|
51
|
+
|
52
|
+
sig {override.returns(String)}
|
53
|
+
def details
|
54
|
+
"#{@rake_task.name_with_args}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -16,8 +16,9 @@ module Spud
|
|
16
16
|
class Task < TaskRunners::Task
|
17
17
|
extend T::Sig
|
18
18
|
|
19
|
-
sig {
|
19
|
+
sig {returns(String)}
|
20
20
|
attr_reader :filename
|
21
|
+
alias source filename
|
21
22
|
|
22
23
|
sig {override.returns(String)}
|
23
24
|
attr_reader :name
|
@@ -27,7 +28,7 @@ module Spud
|
|
27
28
|
|
28
29
|
sig {override.params(driver: Driver).returns(T::Array[TaskRunners::Task])}
|
29
30
|
def self.tasks(driver)
|
30
|
-
Dir['
|
31
|
+
Dir['Spudfile', '*.spud'].flat_map { |filename| FileDSL.run(driver, filename) }
|
31
32
|
end
|
32
33
|
|
33
34
|
sig {params(filename: String, name: String).returns(String)}
|
@@ -17,13 +17,9 @@ module Spud
|
|
17
17
|
def name; end
|
18
18
|
|
19
19
|
sig {abstract.returns(String)}
|
20
|
-
def
|
20
|
+
def source; end
|
21
21
|
|
22
|
-
sig
|
23
|
-
abstract
|
24
|
-
.params(ordered: T::Array[String], named: T::Hash[String, String])
|
25
|
-
.returns(T.untyped)
|
26
|
-
end
|
22
|
+
sig {abstract.params(ordered: T::Array[String], named: T::Hash[String, String]).returns(T.untyped)}
|
27
23
|
def invoke(ordered, named); end
|
28
24
|
|
29
25
|
sig {overridable.returns(TaskArgs)}
|
@@ -1,9 +1,11 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: true
|
2
2
|
require 'sorbet-runtime'
|
3
3
|
require 'spud/task_runners/task'
|
4
4
|
require 'spud/task_runners/spud_task_runner/task'
|
5
|
+
require 'spud/task_runners/rake_task_runner/task'
|
5
6
|
require 'spud/task_runners/make/task'
|
6
7
|
require 'spud/task_runners/package.json/task'
|
8
|
+
require 'spud/task_runners/docker-compose/task'
|
7
9
|
|
8
10
|
module Spud
|
9
11
|
module TaskRunners
|
@@ -12,14 +14,15 @@ module Spud
|
|
12
14
|
sig {returns(T::Array[T.class_of(Task)])}
|
13
15
|
def self.get
|
14
16
|
# Ordered by priority
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
runners = [
|
18
|
+
SpudTaskRunner::Task,
|
19
|
+
RakeTaskRunner::Task,
|
20
|
+
Make::Task,
|
21
|
+
PackageJSON::Task,
|
22
|
+
DockerCompose::Task,
|
23
|
+
]
|
24
|
+
|
25
|
+
T.let(runners, T::Array[T.class_of(Task)])
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
data/lib/spud/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Booth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sorbet-runtime
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.5.6100
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '13.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,8 +115,10 @@ files:
|
|
101
115
|
- lib/spud/shell/result.rb
|
102
116
|
- lib/spud/task_arg.rb
|
103
117
|
- lib/spud/task_args.rb
|
118
|
+
- lib/spud/task_runners/docker-compose/task.rb
|
104
119
|
- lib/spud/task_runners/make/task.rb
|
105
120
|
- lib/spud/task_runners/package.json/task.rb
|
121
|
+
- lib/spud/task_runners/rake_task_runner/task.rb
|
106
122
|
- lib/spud/task_runners/spud_task_runner/dependency.rb
|
107
123
|
- lib/spud/task_runners/spud_task_runner/file_dsl.rb
|
108
124
|
- lib/spud/task_runners/spud_task_runner/task.rb
|