runfile 1.0.0.rc2 → 1.0.0.rc3
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 +10 -2
- data/examples/default-action-2/runfile +2 -0
- data/examples/helpers/runfile +20 -0
- data/examples/multiple-runfiles/runfile +2 -0
- data/examples/nesting/deploy/deploy.runfile +4 -0
- data/examples/nesting/runfile +9 -0
- data/examples/nesting/server.runfile +15 -0
- data/examples/require-context/runfile +7 -0
- data/examples/require-context/server.runfile +25 -0
- data/lib/runfile/action.rb +35 -17
- data/lib/runfile/concerns/dsl.rb +30 -17
- data/lib/runfile/entrypoint.rb +21 -5
- data/lib/runfile/initiator.rb +14 -11
- data/lib/runfile/userfile.rb +70 -45
- data/lib/runfile/version.rb +1 -1
- data/lib/runfile/views/userfile.gtx +15 -17
- metadata +8 -8
- data/examples/different-name/runfile.rb +0 -8
- data/examples/execute/runfile +0 -14
- data/examples/execute/server.runfile +0 -11
- data/examples/named-only/deploy.runfile +0 -7
- data/examples/named-only/server.runfile +0 -11
- data/lib/runfile/meta.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87fc70007827b06c5dc191a36501383e7cbbff057ab8b237e4fd1c6ecc1cc359
|
4
|
+
data.tar.gz: 63a028d2937711589b69f73003ddc367326fd0dc2d4decfad10e29e3b1d44078
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebdb28b94a76ad187975256fb7e3ab9d423e3b86af833f20b52d91e74886b4b03fd2a8849bdf1f50cd97c26978742f42a3522f375bd3d6567f5bb46c675b9ac2
|
7
|
+
data.tar.gz: fd87911f07745dff40c82bb8c4245cf309eae294799dbee320521c7d38b50a0c9575d9ad15fde44974c18639c05c3223712cf517389c149e6a9bd97020344b02
|
data/README.md
CHANGED
@@ -138,7 +138,7 @@ Request](https://github.com/DannyBen/runfile/pull/50).
|
|
138
138
|
|
139
139
|
### Upgrading to 1.0.0
|
140
140
|
|
141
|
-
### No more `.runfile
|
141
|
+
### No more `.runfile` config
|
142
142
|
|
143
143
|
If you have used the multi-runfile config file, this no longer exists.
|
144
144
|
Use a standard `runfile` instead, along with the `import` directive.
|
@@ -149,6 +149,13 @@ If you have used the `action :global do` notation, this is replaced with the
|
|
149
149
|
simpler use `action do` instead. Also, there is no more need for
|
150
150
|
empty `usage ''`, just delete it if you have it in your runfiles.
|
151
151
|
|
152
|
+
### No more `execute` directive
|
153
|
+
|
154
|
+
If you have used it to cross-call other actions, it is no longer available. As
|
155
|
+
an alternative, you can define common code in separate classes and `require`
|
156
|
+
them, or use the new `helpers` directive to define functions that will be
|
157
|
+
available to all actions.
|
158
|
+
|
152
159
|
### No more need for `trap(:INT)`
|
153
160
|
|
154
161
|
If your old runfiles trap the `Interrupt` signal, there i no longer a need to
|
@@ -167,7 +174,8 @@ before short flags `--force, -f` instead of `-f, --force`. Update your custom
|
|
167
174
|
|
168
175
|
### RunfileTasks
|
169
176
|
|
170
|
-
The `RunfileTasks` gem is
|
177
|
+
The `RunfileTasks` gem is also released as a pre-release, if you are using it
|
178
|
+
make sure to install the latest release candidate.
|
171
179
|
|
172
180
|
## Contributing / Support
|
173
181
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
# Define helper methods
|
4
|
+
helpers do
|
5
|
+
def files
|
6
|
+
Dir['*'].sort
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# $ run ls : can call helper methods
|
11
|
+
help 'Show files'
|
12
|
+
usage 'ls [--json]'
|
13
|
+
option '--json, -j', 'Output in JSON format'
|
14
|
+
action :ls do |args|
|
15
|
+
if args['--json']
|
16
|
+
puts files.to_json
|
17
|
+
else
|
18
|
+
puts files.join("\n")
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
title 'Server commands'
|
2
|
+
summary 'Manage all the servers'
|
3
|
+
|
4
|
+
# Import all the runfiles in the deploy folder
|
5
|
+
import 'deploy/*'
|
6
|
+
|
7
|
+
help 'Build server'
|
8
|
+
action :build do
|
9
|
+
say 'Building...'
|
10
|
+
end
|
11
|
+
|
12
|
+
help 'Start server'
|
13
|
+
action :start do
|
14
|
+
say 'Server starting...'
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
title 'Server commands'
|
2
|
+
summary 'Build and manage all the servers'
|
3
|
+
|
4
|
+
# Declare that we need three variables in the `import` directive
|
5
|
+
# One mandatory (:image) and two with a default fallback values
|
6
|
+
require_context :image
|
7
|
+
require_context :allow_deploy, default: false
|
8
|
+
require_context :env, default: 'development'
|
9
|
+
|
10
|
+
# $ run server : default command
|
11
|
+
action do |args|
|
12
|
+
say 'g`Context`:'
|
13
|
+
p context
|
14
|
+
say 'g`Args`:'
|
15
|
+
p args
|
16
|
+
end
|
17
|
+
|
18
|
+
help 'Deploy to production'
|
19
|
+
action 'deploy' do
|
20
|
+
if context[:allow_deploy]
|
21
|
+
say 'DEPLOYING'
|
22
|
+
else
|
23
|
+
say! 'r`Deployment not allowed`'
|
24
|
+
end
|
25
|
+
end
|
data/lib/runfile/action.rb
CHANGED
@@ -6,42 +6,60 @@ module Runfile
|
|
6
6
|
include Inspectable
|
7
7
|
|
8
8
|
attr_reader :name, :shortcut
|
9
|
-
attr_accessor :block, :help, :
|
9
|
+
attr_accessor :block, :help, :host
|
10
10
|
|
11
|
-
def
|
12
|
-
|
11
|
+
def full_name
|
12
|
+
@full_name ||= if shortcut
|
13
|
+
"#{prefix} (#{name} | #{shortcut})".strip
|
14
|
+
else
|
15
|
+
"#{prefix} #{name}".strip
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
|
-
def
|
16
|
-
|
19
|
+
def implicit_usages
|
20
|
+
usages.empty? ? [full_name] : usages
|
17
21
|
end
|
18
22
|
|
19
|
-
def
|
20
|
-
|
23
|
+
def inspectable
|
24
|
+
{ name: name, prefix: prefix, 'host.path': host&.path }
|
21
25
|
end
|
22
26
|
|
23
|
-
def
|
24
|
-
|
25
|
-
end
|
27
|
+
def run(args = {})
|
28
|
+
validate_context
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
else
|
31
|
-
"#{prefix} #{name}".strip
|
30
|
+
instance_eval do
|
31
|
+
host.helpers.each { |b| b.call args }
|
32
|
+
block.call args
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
36
|
+
def name=(value)
|
37
|
+
@name = value&.to_s
|
38
|
+
end
|
39
|
+
|
35
40
|
def names
|
36
41
|
name ? [name, shortcut].compact : ['(default)']
|
37
42
|
end
|
38
43
|
|
39
|
-
def
|
40
|
-
|
44
|
+
def prefix
|
45
|
+
host&.full_name
|
46
|
+
end
|
47
|
+
|
48
|
+
def shortcut=(value)
|
49
|
+
@shortcut = value&.to_s
|
41
50
|
end
|
42
51
|
|
43
52
|
def usages
|
44
53
|
@usages ||= []
|
45
54
|
end
|
55
|
+
|
56
|
+
def validate_context
|
57
|
+
host.required_contexts.each do |varname, default|
|
58
|
+
next if host.context[varname]
|
59
|
+
raise UserError, "Need #{varname}" if default.nil?
|
60
|
+
|
61
|
+
host.context[varname] = default
|
62
|
+
end
|
63
|
+
end
|
46
64
|
end
|
47
65
|
end
|
data/lib/runfile/concerns/dsl.rb
CHANGED
@@ -6,13 +6,10 @@ module Runfile
|
|
6
6
|
|
7
7
|
def action(name = nil, shortcut = nil, &block)
|
8
8
|
current_action.block = block
|
9
|
-
current_action.name = name
|
10
|
-
current_action.shortcut = shortcut if shortcut
|
11
|
-
current_action.
|
12
|
-
|
13
|
-
actions[name || :default] = current_action
|
14
|
-
@default_action = current_action unless name
|
15
|
-
@current_action = nil
|
9
|
+
current_action.name = name.to_s
|
10
|
+
current_action.shortcut = shortcut.to_s if shortcut
|
11
|
+
current_action.host = self
|
12
|
+
finalize_current_action name.to_s
|
16
13
|
end
|
17
14
|
|
18
15
|
def env_var(name, help)
|
@@ -27,6 +24,11 @@ module Runfile
|
|
27
24
|
current_action.help = message
|
28
25
|
end
|
29
26
|
|
27
|
+
def helpers(&block)
|
28
|
+
helper_blocks.push block if block
|
29
|
+
helper_blocks
|
30
|
+
end
|
31
|
+
|
30
32
|
def import(pathspec, context = nil)
|
31
33
|
imports[pathspec] = context
|
32
34
|
end
|
@@ -46,8 +48,16 @@ module Runfile
|
|
46
48
|
params[name] = help
|
47
49
|
end
|
48
50
|
|
51
|
+
def require_context(varname, default: nil)
|
52
|
+
required_contexts[varname] = default
|
53
|
+
end
|
54
|
+
|
55
|
+
def required_contexts
|
56
|
+
@required_contexts ||= {}
|
57
|
+
end
|
58
|
+
|
49
59
|
def shortcut(name)
|
50
|
-
current_action.shortcut = name
|
60
|
+
current_action.shortcut = name.to_s
|
51
61
|
end
|
52
62
|
|
53
63
|
def summary(text = nil)
|
@@ -63,7 +73,7 @@ module Runfile
|
|
63
73
|
end
|
64
74
|
|
65
75
|
def usage(message)
|
66
|
-
message = "#{
|
76
|
+
message = "#{name} #{message}" if name
|
67
77
|
current_action.usages.push message
|
68
78
|
end
|
69
79
|
|
@@ -73,16 +83,8 @@ module Runfile
|
|
73
83
|
@version = text
|
74
84
|
end
|
75
85
|
|
76
|
-
def execute(command_line)
|
77
|
-
run Shellwords.split(command_line)
|
78
|
-
end
|
79
|
-
|
80
86
|
# Evaluation Artifacts
|
81
87
|
|
82
|
-
def action_prefix
|
83
|
-
nil
|
84
|
-
end
|
85
|
-
|
86
88
|
def actions
|
87
89
|
@actions ||= {}
|
88
90
|
end
|
@@ -99,6 +101,10 @@ module Runfile
|
|
99
101
|
@examples ||= []
|
100
102
|
end
|
101
103
|
|
104
|
+
def helper_blocks
|
105
|
+
@helper_blocks ||= []
|
106
|
+
end
|
107
|
+
|
102
108
|
def options
|
103
109
|
@options ||= {}
|
104
110
|
end
|
@@ -109,6 +115,13 @@ module Runfile
|
|
109
115
|
|
110
116
|
private
|
111
117
|
|
118
|
+
def finalize_current_action(name)
|
119
|
+
key = name.empty? ? :default : name
|
120
|
+
actions[key] = current_action
|
121
|
+
@default_action = current_action unless name
|
122
|
+
@current_action = nil
|
123
|
+
end
|
124
|
+
|
112
125
|
def current_action
|
113
126
|
@current_action ||= Action.new
|
114
127
|
end
|
data/lib/runfile/entrypoint.rb
CHANGED
@@ -11,12 +11,16 @@ module Runfile
|
|
11
11
|
@argv = argv
|
12
12
|
end
|
13
13
|
|
14
|
+
def handler
|
15
|
+
rootfile || Initiator.new
|
16
|
+
end
|
17
|
+
|
14
18
|
def inspectable
|
15
19
|
{ argv: argv }
|
16
20
|
end
|
17
21
|
|
18
22
|
def run
|
19
|
-
|
23
|
+
handler.run argv
|
20
24
|
end
|
21
25
|
|
22
26
|
def run!
|
@@ -25,7 +29,7 @@ module Runfile
|
|
25
29
|
say e.message
|
26
30
|
1
|
27
31
|
rescue Runfile::UserError => e
|
28
|
-
|
32
|
+
allow_debug e
|
29
33
|
say! "mib` #{e.class} `"
|
30
34
|
say! e.message
|
31
35
|
1
|
@@ -33,18 +37,30 @@ module Runfile
|
|
33
37
|
say! 'm`Goodbye`', replace: true
|
34
38
|
1
|
35
39
|
rescue => e
|
36
|
-
|
40
|
+
allow_debug e
|
37
41
|
origin = e.backtrace_locations.first
|
38
42
|
location = "#{origin.path}:#{origin.lineno}"
|
39
43
|
say! "rib` #{e.class} ` in nu`#{location}`"
|
40
44
|
say! e.message
|
45
|
+
say! "\nPrefix with nu`DEBUG=1` for full backtrace" unless ENV['DEBUG']
|
41
46
|
1
|
42
47
|
end
|
43
48
|
|
44
49
|
private
|
45
50
|
|
46
|
-
def
|
47
|
-
|
51
|
+
def allow_debug(e)
|
52
|
+
return unless ENV['DEBUG']
|
53
|
+
|
54
|
+
say! e.backtrace.reverse.join("\n")
|
55
|
+
say! '---'
|
56
|
+
end
|
57
|
+
|
58
|
+
def rootfile
|
59
|
+
if File.exist? 'runfile'
|
60
|
+
Userfile.new 'runfile'
|
61
|
+
elsif File.exist? 'Runfile'
|
62
|
+
Userfile.new 'Runfile'
|
63
|
+
end
|
48
64
|
end
|
49
65
|
end
|
50
66
|
end
|
data/lib/runfile/initiator.rb
CHANGED
@@ -46,10 +46,10 @@ module Runfile
|
|
46
46
|
|
47
47
|
def create_example(name)
|
48
48
|
dir = "#{examples_dir}/#{name}"
|
49
|
-
|
50
|
-
raise UserError, "No such example: nu`#{name}`" if files.empty?
|
49
|
+
raise UserError, "No such example: nu`#{name}`" unless Dir.exist? dir
|
51
50
|
|
52
|
-
files.
|
51
|
+
files = Dir.chdir(dir) { Dir['**/{runfile,*.runfile,*.rb}'] }.sort
|
52
|
+
files.each { |file| safe_copy dir, file }
|
53
53
|
say_tip
|
54
54
|
end
|
55
55
|
|
@@ -59,19 +59,22 @@ module Runfile
|
|
59
59
|
say 'Delete the copied files to go back to the initial state'
|
60
60
|
end
|
61
61
|
|
62
|
-
def safe_copy(
|
63
|
-
|
64
|
-
# This will never happen since if there is a runfile, the initiator will
|
65
|
-
# not be called. Nonetheless, keep it for safety
|
66
|
-
return if File.exist? target
|
62
|
+
def safe_copy(source_dir, target_file)
|
63
|
+
source_file = "#{source_dir}/#{target_file}"
|
67
64
|
|
68
|
-
|
69
|
-
|
65
|
+
if File.exist? target_file
|
66
|
+
say "r`Skipped #{target_file}` (exists)"
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
70
|
+
FileUtils.mkdir_p File.dirname(target_file)
|
71
|
+
FileUtils.cp source_file, target_file
|
72
|
+
say "Copied g`#{target_file}`"
|
70
73
|
end
|
71
74
|
|
72
75
|
def examples
|
73
76
|
@examples ||= Dir["#{examples_dir}/*"]
|
74
|
-
.select { |f| File.directory?
|
77
|
+
.select { |f| File.directory? f }
|
75
78
|
.map { |f| File.basename f }
|
76
79
|
.sort
|
77
80
|
end
|
data/lib/runfile/userfile.rb
CHANGED
@@ -7,70 +7,82 @@ module Runfile
|
|
7
7
|
include Inspectable
|
8
8
|
include DSL
|
9
9
|
|
10
|
-
attr_reader :
|
11
|
-
|
12
|
-
alias action_prefix name
|
13
|
-
|
14
|
-
class << self
|
15
|
-
def load_file(path)
|
16
|
-
if masterfile? path
|
17
|
-
name = nil
|
18
|
-
else
|
19
|
-
name = File.basename path, '.runfile'
|
20
|
-
path = "#{path}.runfile" unless path.end_with? '.runfile'
|
21
|
-
end
|
10
|
+
attr_reader :path, :host
|
11
|
+
attr_accessor :context
|
22
12
|
|
23
|
-
|
24
|
-
|
25
|
-
|
13
|
+
def initialize(path, context: nil, host: nil)
|
14
|
+
@path = path
|
15
|
+
@host = host
|
16
|
+
@context = context || {}
|
17
|
+
end
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
19
|
+
def basename
|
20
|
+
@basename ||= File.basename(path, '.runfile')
|
30
21
|
end
|
31
22
|
|
32
|
-
def
|
33
|
-
@code
|
34
|
-
|
35
|
-
@path = path
|
23
|
+
def code
|
24
|
+
@code ||= File.read(path)
|
25
|
+
end
|
36
26
|
|
37
|
-
|
27
|
+
def eval_code
|
28
|
+
return if evaluated?
|
38
29
|
|
39
|
-
|
40
|
-
|
30
|
+
@evaluated = true
|
31
|
+
instance_eval code, path
|
32
|
+
end
|
33
|
+
|
34
|
+
def evaluated?
|
35
|
+
@evaluated
|
36
|
+
end
|
37
|
+
|
38
|
+
def full_name
|
39
|
+
id.join ' '
|
40
|
+
end
|
41
|
+
|
42
|
+
def id
|
43
|
+
if host
|
44
|
+
(host.id + [name]).compact
|
41
45
|
else
|
42
|
-
|
46
|
+
[name].compact
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
50
|
def inspectable
|
47
|
-
{ name: name, path: path
|
51
|
+
{ name: name, path: path }
|
48
52
|
end
|
49
53
|
|
50
|
-
def
|
51
|
-
|
52
|
-
if found_delegate
|
53
|
-
found_delegate.run argv
|
54
|
-
else
|
55
|
-
run_local argv
|
56
|
-
end
|
54
|
+
def name
|
55
|
+
@name ||= (rootfile? ? nil : basename.downcase)
|
57
56
|
end
|
58
57
|
|
59
|
-
def
|
60
|
-
|
58
|
+
def rootfile?
|
59
|
+
basename.casecmp? 'runfile'
|
61
60
|
end
|
62
61
|
|
63
|
-
def
|
64
|
-
|
62
|
+
def run(argv = [])
|
63
|
+
eval_code
|
64
|
+
found_guest = find_guest argv
|
65
|
+
if found_guest
|
66
|
+
found_guest.run argv
|
67
|
+
else
|
68
|
+
run_local argv
|
69
|
+
end
|
65
70
|
end
|
66
71
|
|
67
|
-
# Returns an array of actions that have help defined
|
68
72
|
def commands
|
69
73
|
actions.values.select(&:help)
|
70
74
|
end
|
71
75
|
|
72
|
-
def
|
73
|
-
@
|
76
|
+
def guests
|
77
|
+
@guests ||= begin
|
78
|
+
result = imports.map do |glob, context|
|
79
|
+
Dir.glob("#{glob}.runfile").sort.map do |guest_path|
|
80
|
+
Userfile.new guest_path, context: context, host: self
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
result.flatten
|
85
|
+
end
|
74
86
|
end
|
75
87
|
|
76
88
|
private
|
@@ -83,17 +95,30 @@ module Runfile
|
|
83
95
|
actions[:default]
|
84
96
|
end
|
85
97
|
|
98
|
+
def find_guest(argv)
|
99
|
+
guests.find do |guest|
|
100
|
+
guest_id_size = guest.id.size
|
101
|
+
next if guest_id_size.zero?
|
102
|
+
|
103
|
+
argv.first(guest_id_size) == guest.id
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
86
107
|
def run_local(argv)
|
108
|
+
exit_code = nil
|
109
|
+
# This is here to allow guests to provide their own title/summary as
|
110
|
+
# the help message for the Commands block.
|
111
|
+
# TODO: Relatively costly. Consider alternatives.
|
112
|
+
guests.each(&:eval_code)
|
113
|
+
|
87
114
|
Runner.run docopt, argv: argv, version: version do |args|
|
88
115
|
action = find_action(args)
|
89
116
|
raise ActionNotFound, 'Cannot find action. Is it properly defined?' unless action
|
90
117
|
|
91
|
-
action.run args
|
118
|
+
exit_code = action.run args
|
92
119
|
end
|
93
|
-
end
|
94
120
|
|
95
|
-
|
96
|
-
@meta ||= Meta.new
|
121
|
+
exit_code if exit_code.is_a? Integer
|
97
122
|
end
|
98
123
|
|
99
124
|
def docopt
|
data/lib/runfile/version.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
if
|
2
|
-
=
|
1
|
+
if title
|
2
|
+
= title
|
3
3
|
>
|
4
4
|
end
|
5
5
|
|
6
6
|
if summary
|
7
|
-
=
|
7
|
+
= title ? word_wrap(" #{summary}") : word_wrap(summary)
|
8
8
|
>
|
9
9
|
end
|
10
10
|
|
@@ -15,16 +15,15 @@ actions.each do |name, action|
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
> run {{ name }} (--help | -h)
|
18
|
+
if guests.any?
|
19
|
+
guests.each do |userfile|
|
20
|
+
= " run #{userfile.full_name}"
|
21
|
+
end
|
22
|
+
> run [COMMAND] (--help | -h)
|
23
|
+
elsif full_name && !full_name.empty?
|
24
|
+
> run {{ full_name }} (--help | -h)
|
26
25
|
else
|
27
|
-
> run (--help | -h)
|
26
|
+
> run (--help | -h)
|
28
27
|
end
|
29
28
|
|
30
29
|
if version
|
@@ -32,7 +31,7 @@ if version
|
|
32
31
|
end
|
33
32
|
>
|
34
33
|
|
35
|
-
if commands.any? ||
|
34
|
+
if commands.any? || guests.any?
|
36
35
|
> Commands:
|
37
36
|
commands.each do |action|
|
38
37
|
= " nb`#{action.names.join(', ')}`"
|
@@ -40,11 +39,11 @@ if commands.any? || delegates.any?
|
|
40
39
|
>
|
41
40
|
end
|
42
41
|
|
43
|
-
|
42
|
+
guests.each do |userfile|
|
44
43
|
summary = userfile.summary || userfile.title ||
|
45
|
-
"Run nu`run #{
|
44
|
+
"Run nu`run #{userfile.full_name} --help` for more information"
|
46
45
|
|
47
|
-
= " nb`#{name}`"
|
46
|
+
= " nb`#{userfile.name}`"
|
48
47
|
= word_wrap " #{summary}"
|
49
48
|
>
|
50
49
|
end
|
@@ -83,7 +82,6 @@ if env_vars.any?
|
|
83
82
|
>
|
84
83
|
end
|
85
84
|
|
86
|
-
|
87
85
|
if examples.any?
|
88
86
|
> Examples:
|
89
87
|
examples.each do |text|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colsole
|
@@ -90,21 +90,22 @@ files:
|
|
90
90
|
- examples/default-action-2/runfile
|
91
91
|
- examples/default-action-2/server.runfile
|
92
92
|
- examples/default-action/runfile
|
93
|
-
- examples/different-name/runfile.rb
|
94
93
|
- examples/example-multiline/runfile
|
95
94
|
- examples/example/runfile
|
96
|
-
- examples/execute/runfile
|
97
|
-
- examples/execute/server.runfile
|
98
95
|
- examples/full/runfile
|
96
|
+
- examples/helpers/runfile
|
99
97
|
- examples/import/more_tasks/spec.runfile
|
100
98
|
- examples/import/runfile
|
101
99
|
- examples/import/tasks/server.runfile
|
102
100
|
- examples/minimal/runfile
|
103
101
|
- examples/multiple-runfiles/runfile
|
104
102
|
- examples/multiple-runfiles/server.runfile
|
105
|
-
- examples/named-only/deploy.runfile
|
106
|
-
- examples/named-only/server.runfile
|
107
103
|
- examples/naval-fate/runfile
|
104
|
+
- examples/nesting/deploy/deploy.runfile
|
105
|
+
- examples/nesting/runfile
|
106
|
+
- examples/nesting/server.runfile
|
107
|
+
- examples/require-context/runfile
|
108
|
+
- examples/require-context/server.runfile
|
108
109
|
- examples/shortcut/runfile
|
109
110
|
- lib/runfile.rb
|
110
111
|
- lib/runfile/action.rb
|
@@ -115,7 +116,6 @@ files:
|
|
115
116
|
- lib/runfile/exceptions.rb
|
116
117
|
- lib/runfile/gem_finder.rb
|
117
118
|
- lib/runfile/initiator.rb
|
118
|
-
- lib/runfile/meta.rb
|
119
119
|
- lib/runfile/runner.rb
|
120
120
|
- lib/runfile/templates/runfile
|
121
121
|
- lib/runfile/userfile.rb
|
data/examples/execute/runfile
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
title 'Execute other actions'
|
2
|
-
summary 'Shows how to call other actions from within an action'
|
3
|
-
|
4
|
-
# $ run greet
|
5
|
-
# $ run g
|
6
|
-
action :greet, :g do |_args|
|
7
|
-
say 'GREET'
|
8
|
-
end
|
9
|
-
|
10
|
-
# $ run s
|
11
|
-
help 'Shortcut to nu`server start`'
|
12
|
-
action :s do
|
13
|
-
execute 'server start'
|
14
|
-
end
|
data/lib/runfile/meta.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
module Runfile
|
2
|
-
# Holds meta information about the state of runfiles in a given directory
|
3
|
-
class Meta
|
4
|
-
include Inspectable
|
5
|
-
|
6
|
-
MASTERFILE_NAMES = %w[runfile Runfile runfile.rb]
|
7
|
-
|
8
|
-
def masterfile_path
|
9
|
-
@masterfile_path ||= begin
|
10
|
-
result = nil
|
11
|
-
|
12
|
-
MASTERFILE_NAMES.each do |name|
|
13
|
-
if File.exist? name
|
14
|
-
result = name
|
15
|
-
break
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
result
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def handler(_argv = ARGV)
|
24
|
-
masterfile || dummy || initiator
|
25
|
-
end
|
26
|
-
|
27
|
-
# If there are external files and no masterfile, we will use a dummy empty
|
28
|
-
# runfile as a masterfile to serve as the access point to the named
|
29
|
-
# runfiles
|
30
|
-
def dummy
|
31
|
-
return nil unless external_files.any?
|
32
|
-
|
33
|
-
Userfile.new
|
34
|
-
end
|
35
|
-
|
36
|
-
def initiator
|
37
|
-
Initiator.new
|
38
|
-
end
|
39
|
-
|
40
|
-
def masterfile
|
41
|
-
return nil unless masterfile_path
|
42
|
-
|
43
|
-
@masterfile ||= Userfile.load_file masterfile_path
|
44
|
-
end
|
45
|
-
|
46
|
-
def globs
|
47
|
-
@globs ||= (masterfile ? ['*'] + masterfile.imports.keys : ['*'])
|
48
|
-
end
|
49
|
-
|
50
|
-
def external_files
|
51
|
-
@external_files ||= begin
|
52
|
-
result = []
|
53
|
-
globs.each do |glob|
|
54
|
-
Dir["#{glob}.runfile"].sort.each do |file|
|
55
|
-
userfile = Userfile.load_file(file)
|
56
|
-
userfile.context = masterfile.imports[glob] if masterfile
|
57
|
-
result.push userfile
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
result.to_h { |file| [file.name, file] }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|