spud 0.1.14 → 0.1.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/spud.rb +2 -187
- data/lib/spud/build_tools/build_tools.rb +13 -0
- data/lib/spud/build_tools/make/task.rb +27 -0
- data/lib/spud/build_tools/package.json/task.rb +47 -0
- data/lib/spud/build_tools/spud/block_param_info.rb +77 -0
- data/lib/spud/build_tools/spud/dsl/file.rb +23 -0
- data/lib/spud/build_tools/spud/dsl/task.rb +63 -0
- data/lib/spud/build_tools/spud/shell/command.rb +52 -0
- data/lib/spud/build_tools/spud/shell/result.rb +26 -0
- data/lib/spud/build_tools/spud/task.rb +125 -0
- data/lib/spud/build_tools/task.rb +33 -0
- data/lib/spud/cli/parser.rb +101 -0
- data/lib/spud/cli/results.rb +25 -0
- data/lib/{error.rb → spud/error.rb} +1 -0
- data/lib/spud/help.rb +23 -0
- data/lib/spud/lister.rb +86 -0
- data/lib/spud/options.rb +14 -0
- data/lib/spud/runtime.rb +104 -0
- data/lib/spud/task_arg.rb +51 -0
- data/lib/spud/task_args.rb +49 -0
- data/lib/spud/version.rb +3 -0
- metadata +48 -28
- data/lib/args.rb +0 -73
- data/lib/build_tools/build_rule.rb +0 -21
- data/lib/build_tools/build_tool.rb +0 -19
- data/lib/build_tools/build_tools.rb +0 -13
- data/lib/build_tools/make/make.rb +0 -33
- data/lib/build_tools/package.json/package.json.rb +0 -33
- data/lib/build_tools/spud/file_context.rb +0 -33
- data/lib/build_tools/spud/rule.rb +0 -121
- data/lib/build_tools/spud/rule_context.rb +0 -58
- data/lib/build_tools/spud/shell_error.rb +0 -7
- data/lib/build_tools/spud/spud.rb +0 -27
- data/lib/shell.rb +0 -25
- data/lib/version.rb +0 -3
@@ -1,33 +0,0 @@
|
|
1
|
-
require_relative '../build_tool'
|
2
|
-
require_relative '../build_rule'
|
3
|
-
|
4
|
-
module Spud::BuildTools
|
5
|
-
class Make < BuildTool
|
6
|
-
attr_reader :rules
|
7
|
-
|
8
|
-
def mount!
|
9
|
-
@rules = {}
|
10
|
-
return unless File.exist?('Makefile')
|
11
|
-
|
12
|
-
source = File.read('Makefile')
|
13
|
-
source.scan(/^(\S+):.*/).each do |match|
|
14
|
-
name = match.first
|
15
|
-
@rules[name] = Rule.new(name)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class Rule < BuildRule
|
21
|
-
def initialize(name)
|
22
|
-
@name = name
|
23
|
-
end
|
24
|
-
|
25
|
-
def invoke(*args, **kwargs)
|
26
|
-
system('make', @name, *args)
|
27
|
-
end
|
28
|
-
|
29
|
-
def filename
|
30
|
-
'Makefile'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require_relative '../build_tool'
|
3
|
-
require_relative '../build_rule'
|
4
|
-
|
5
|
-
module Spud::BuildTools
|
6
|
-
class Node < BuildTool
|
7
|
-
attr_reader :rules
|
8
|
-
|
9
|
-
def mount!
|
10
|
-
@rules = {}
|
11
|
-
return unless File.exist?('package.json')
|
12
|
-
|
13
|
-
scripts = JSON.parse(File.read('package.json'))['scripts']
|
14
|
-
return unless scripts
|
15
|
-
|
16
|
-
scripts.each { |name, source| @rules[name] = Rule.new(source) }
|
17
|
-
end
|
18
|
-
|
19
|
-
class Rule < BuildRule
|
20
|
-
def initialize(source)
|
21
|
-
@source = source
|
22
|
-
end
|
23
|
-
|
24
|
-
def invoke(*args, **kwargs)
|
25
|
-
system(@source, out: STDOUT)
|
26
|
-
end
|
27
|
-
|
28
|
-
def filename
|
29
|
-
'package.json'
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require_relative 'rule'
|
2
|
-
|
3
|
-
module Spud::BuildTools
|
4
|
-
module SpudBuild
|
5
|
-
class FileContext
|
6
|
-
attr_reader :__rules
|
7
|
-
|
8
|
-
def initialize(spud, filename)
|
9
|
-
@__spud = spud
|
10
|
-
@__filename = filename
|
11
|
-
@__rules = {}
|
12
|
-
end
|
13
|
-
|
14
|
-
def require_relative(name)
|
15
|
-
require(name)
|
16
|
-
end
|
17
|
-
|
18
|
-
def rule(name, *args, &block)
|
19
|
-
files = args.select { |arg| arg.is_a?(String) }
|
20
|
-
deps = args.select { |arg| arg.is_a?(Hash) }.reduce({}) { |hash, dep| hash.merge(dep) }
|
21
|
-
|
22
|
-
prefix = @__filename == 'Spudfile' ? '' : "#{File.basename(@__filename, '.rb')}."
|
23
|
-
name = "#{prefix}#{name}"
|
24
|
-
|
25
|
-
@__rules[name] = Rule.new(@__spud, self, @__filename, name, files, deps, block)
|
26
|
-
end
|
27
|
-
|
28
|
-
def method_missing(name, *args, &block)
|
29
|
-
rule(name, *args, &block)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,121 +0,0 @@
|
|
1
|
-
require_relative 'file_context'
|
2
|
-
require_relative 'rule_context'
|
3
|
-
require_relative '../build_rule'
|
4
|
-
require_relative '../../error'
|
5
|
-
|
6
|
-
module Spud::BuildTools
|
7
|
-
module SpudBuild
|
8
|
-
class Rule < BuildRule
|
9
|
-
attr_reader :filename
|
10
|
-
|
11
|
-
def initialize(spud, file_context, filename, name, files, deps, block)
|
12
|
-
@spud = spud
|
13
|
-
@file_context = file_context
|
14
|
-
@filename = filename
|
15
|
-
@name = name
|
16
|
-
@files = files
|
17
|
-
@deps = deps
|
18
|
-
@block = block
|
19
|
-
end
|
20
|
-
|
21
|
-
def invoke(*args, **kwargs)
|
22
|
-
raise Spud::Error, "'#{@name}' is up to date" if up_to_date?
|
23
|
-
|
24
|
-
missing = positional_params.length - args.length
|
25
|
-
if missing > 0
|
26
|
-
names = positional_params.map { |name| "'#{name}'" }.join(', ')
|
27
|
-
arguments = missing > 1 ? 'arguments' : 'argument'
|
28
|
-
raise Spud::Error, "invocation of '#{@name}' missing required #{arguments} #{names}"
|
29
|
-
end
|
30
|
-
|
31
|
-
return RuleContext.new(@spud, @file_context).instance_exec(*args, &@block) unless key_params?
|
32
|
-
|
33
|
-
begin
|
34
|
-
RuleContext.new(@spud, @file_context).instance_exec(*args, **kwargs, &@block)
|
35
|
-
rescue ArgumentError => e
|
36
|
-
raise Spud::Error, "invocation of '#{@name}' with #{e.message}"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Params
|
41
|
-
def positional_params
|
42
|
-
@positional_params ||= params.select { |p| p.first == :req }.map(&:last)
|
43
|
-
end
|
44
|
-
|
45
|
-
def keyword_params
|
46
|
-
@keyword_params ||= params.select { |p| p.first == :key }.map(&:last)
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
# Up to date checking
|
52
|
-
def up_to_date?
|
53
|
-
return files_up_to_date? unless files_up_to_date?.nil?
|
54
|
-
deps_up_to_date?
|
55
|
-
end
|
56
|
-
|
57
|
-
def files_up_to_date?
|
58
|
-
return nil if all_files.empty?
|
59
|
-
all_files_exist?
|
60
|
-
end
|
61
|
-
|
62
|
-
def all_files_exist?
|
63
|
-
all_files.all?(&File.method(:exist?))
|
64
|
-
end
|
65
|
-
|
66
|
-
def all_files
|
67
|
-
@files.map(&Dir.method(:glob)).flatten
|
68
|
-
end
|
69
|
-
|
70
|
-
def deps_up_to_date?
|
71
|
-
return nil if @deps.empty?
|
72
|
-
|
73
|
-
@deps.all? do |deps, targets|
|
74
|
-
targets = [targets].flatten
|
75
|
-
deps = [deps].flatten
|
76
|
-
|
77
|
-
latest_target = targets
|
78
|
-
.map(&Dir.method(:glob))
|
79
|
-
.flatten
|
80
|
-
.map(&File.method(:mtime))
|
81
|
-
.sort
|
82
|
-
.last
|
83
|
-
|
84
|
-
latest_dep = deps
|
85
|
-
.map(&Dir.method(:glob))
|
86
|
-
.flatten
|
87
|
-
.map(&File.method(:mtime))
|
88
|
-
.sort
|
89
|
-
.last
|
90
|
-
|
91
|
-
return false unless latest_target && latest_dep
|
92
|
-
latest_target > latest_dep
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
# Lambda
|
97
|
-
def key_params?
|
98
|
-
@key_params ||= !keyword_params.empty?
|
99
|
-
end
|
100
|
-
|
101
|
-
def params
|
102
|
-
@params ||= lam.parameters
|
103
|
-
end
|
104
|
-
|
105
|
-
def lam
|
106
|
-
@lam ||= build_lam
|
107
|
-
end
|
108
|
-
|
109
|
-
def build_lam
|
110
|
-
line = @block.source_location.last - 1
|
111
|
-
line = File.read(filename).split("\n")[line]
|
112
|
-
|
113
|
-
match = /(do|{)\s*\|(?<params>[^|]+)\|/.match(line)
|
114
|
-
return -> {} unless match
|
115
|
-
|
116
|
-
param_source = match[:params]
|
117
|
-
eval("-> (#{param_source}) {}")
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require_relative 'shell_error'
|
2
|
-
require_relative '../../shell'
|
3
|
-
require_relative '../../error'
|
4
|
-
|
5
|
-
module Spud::BuildTools
|
6
|
-
module SpudBuild
|
7
|
-
class RuleContext
|
8
|
-
attr_reader :__process
|
9
|
-
|
10
|
-
def initialize(spud, file_context)
|
11
|
-
@__spud = spud
|
12
|
-
@__process = nil
|
13
|
-
|
14
|
-
file_context.singleton_methods.each do |method_name|
|
15
|
-
define_singleton_method(method_name, &file_context.method(method_name))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def sh(cmd)
|
20
|
-
out = sh?(cmd)
|
21
|
-
raise ShellError unless out.status.exitstatus.zero?
|
22
|
-
|
23
|
-
out
|
24
|
-
end
|
25
|
-
|
26
|
-
def sh?(cmd)
|
27
|
-
puts cmd
|
28
|
-
Spud::Shell.new(cmd)
|
29
|
-
end
|
30
|
-
|
31
|
-
def shh(cmd)
|
32
|
-
out = shh?(cmd)
|
33
|
-
raise ShellError unless out.status.exitstatus.zero?
|
34
|
-
|
35
|
-
out
|
36
|
-
end
|
37
|
-
|
38
|
-
def shh?(cmd)
|
39
|
-
Spud::Shell.new(cmd)
|
40
|
-
end
|
41
|
-
|
42
|
-
def shhh(cmd)
|
43
|
-
out = shhh?(cmd)
|
44
|
-
raise ShellError, out unless out.status.exitstatus.zero?
|
45
|
-
|
46
|
-
out
|
47
|
-
end
|
48
|
-
|
49
|
-
def shhh?(cmd)
|
50
|
-
Spud::Shell.new(cmd, silent: true)
|
51
|
-
end
|
52
|
-
|
53
|
-
def invoke(name, *args, **kwargs)
|
54
|
-
@__spud.invoke(name, *args, **kwargs)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require_relative '../build_tool'
|
2
|
-
require_relative 'file_context'
|
3
|
-
|
4
|
-
module Spud::BuildTools
|
5
|
-
module SpudBuild
|
6
|
-
class Build < BuildTool
|
7
|
-
attr_reader :rules
|
8
|
-
|
9
|
-
def mount!
|
10
|
-
filenames = Dir.glob('Spudfile')
|
11
|
-
filenames += Dir.glob('spuds/*.rb')
|
12
|
-
|
13
|
-
@rules = {}
|
14
|
-
filenames.each do |filename|
|
15
|
-
source = File.read(filename)
|
16
|
-
@ctx = FileContext.new(@spud, filename)
|
17
|
-
|
18
|
-
$LOAD_PATH << File.dirname(filename)
|
19
|
-
@ctx.instance_eval(source)
|
20
|
-
$LOAD_PATH.pop
|
21
|
-
|
22
|
-
@rules.merge!(@ctx.__rules)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/shell.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'open3'
|
2
|
-
|
3
|
-
module Spud
|
4
|
-
class Shell < String
|
5
|
-
attr_accessor :status
|
6
|
-
|
7
|
-
def initialize(cmd, silent: false)
|
8
|
-
output = StringIO.new
|
9
|
-
|
10
|
-
_, out, @thread = Open3.popen2e(cmd)
|
11
|
-
@status = @thread.value
|
12
|
-
while line = out.gets
|
13
|
-
puts line
|
14
|
-
output.puts line
|
15
|
-
end
|
16
|
-
|
17
|
-
super(output.string)
|
18
|
-
end
|
19
|
-
|
20
|
-
def kill!
|
21
|
-
thread.kill
|
22
|
-
thread.join
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
data/lib/version.rb
DELETED