simplerubysteps 0.0.2 → 0.0.4
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 +9 -1
- data/bin/setup +0 -1
- data/exe/simplerubysteps-deploy +1 -1
- data/exe/simplerubysteps-destroy +1 -1
- data/exe/simplerubysteps-logs +6 -0
- data/exe/simplerubysteps-workflow-run +1 -1
- data/lib/function.rb +11 -6
- data/lib/logs.sh +7 -0
- data/lib/simplerubysteps/version.rb +1 -1
- data/lib/simplerubysteps.rb +207 -117
- data/samples/sample1/continue-callbackbranch.sh +5 -0
- data/samples/sample1/send-task-success.sh +6 -0
- data/samples/sample1/start-callbackbranch.sh +3 -0
- data/samples/sample1/start-directbranch.sh +3 -0
- data/samples/sample1/workflow.rb +24 -25
- data/samples/sample2/workflow.rb +40 -0
- data/simplerubysteps.gemspec +12 -20
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1331d05828403e219eed44ad66888362be212c7cb31d7676e2c58ced835b0b8
|
4
|
+
data.tar.gz: f402ca43e00170f1b4814098a03b9e1048ba7d52b6f44bf613726f4409d57e98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c8c8fb7a7e62c32abd550ad902082ccdc0568093b1a262b804b64ae9886bc9dd5dbc2673ce4460a3d881d68953a4b593a659bc507c295966e9be719f792638d
|
7
|
+
data.tar.gz: '05327638e236a405009d752d23d0b4ea28ae7cb5a77bcc43deb7ecb909674b83f80ca9f197e0ba1c2c0e6ff5172ccd7aad194a84c55b1888bdb169f0c56f8385'
|
data/README.md
CHANGED
@@ -42,7 +42,7 @@ simplerubysteps-deploy
|
|
42
42
|
```
|
43
43
|
export AWS_PROFILE=...
|
44
44
|
cd samples/sample1
|
45
|
-
echo '{"foo": "
|
45
|
+
echo '{"foo": "James Bond"}' | simplerubysteps-workflow-run
|
46
46
|
```
|
47
47
|
|
48
48
|
### Delete CloudFormation stack
|
@@ -59,6 +59,14 @@ After checking out the repo, run `bin/setup` to install dependencies.
|
|
59
59
|
|
60
60
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
61
61
|
|
62
|
+
### TODOs
|
63
|
+
|
64
|
+
* Support for StateMachineType (STANDARD or EXPRESS)
|
65
|
+
* Custom IAM role policies (Step Functions and Lambda)
|
66
|
+
* sls-like tooling in ruby with AWS SDK
|
67
|
+
* Workflow action unit test support
|
68
|
+
* ...
|
69
|
+
|
62
70
|
## Contributing
|
63
71
|
|
64
72
|
Bug reports and pull requests are (soon - after alpha phase) welcome on GitHub at https://github.com/chtz/simplerubysteps
|
data/bin/setup
CHANGED
data/exe/simplerubysteps-deploy
CHANGED
data/exe/simplerubysteps-destroy
CHANGED
data/lib/function.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "json"
|
2
|
+
require "./workflow.rb"
|
3
3
|
|
4
4
|
def handler(event:, context:)
|
5
|
-
puts ENV.inspect
|
6
|
-
puts event
|
7
|
-
puts context.inspect
|
8
|
-
|
5
|
+
puts ENV.inspect # FIXME remove DEBUG code
|
6
|
+
puts event # FIXME remove DEBUG code
|
7
|
+
puts context.inspect # FIXME remove DEBUG code
|
8
|
+
|
9
|
+
if event["Token"]
|
10
|
+
$sm.states[event["Task"].to_sym].perform_action event["Input"], event["Token"]
|
11
|
+
else
|
12
|
+
$sm.states[event["Task"].to_sym].perform_action event["Input"]
|
13
|
+
end
|
9
14
|
end
|
data/lib/logs.sh
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
export STACK_NAME=$(basename "$PWD")
|
4
|
+
|
5
|
+
export FUNCTION_NAME=$(aws cloudformation describe-stacks --stack-name $STACK_NAME --output text --query "Stacks[].Outputs[]"|grep LambdaFunctionName|awk '{print $2}')
|
6
|
+
|
7
|
+
aws logs tail /aws/lambda/$FUNCTION_NAME
|
data/lib/simplerubysteps.rb
CHANGED
@@ -2,177 +2,267 @@ require "simplerubysteps/version"
|
|
2
2
|
require "json"
|
3
3
|
|
4
4
|
module Simplerubysteps
|
5
|
-
|
5
|
+
# Step Functions JSON generator
|
6
6
|
|
7
|
-
|
8
|
-
attr_reader :states
|
9
|
-
attr_reader :start_at
|
7
|
+
$FUNCTION_ARN = ENV["LAMBDA_FUNCTION_ARN"] ? ENV["LAMBDA_FUNCTION_ARN"] : "unknown"
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
def function_name
|
10
|
+
return "unknown" unless $FUNCTION_ARN =~ /.+\:function\:(.+)/
|
11
|
+
$1
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@states[state.name] = state
|
19
|
-
state.state_machine = self
|
14
|
+
class StateMachine
|
15
|
+
attr_reader :states
|
16
|
+
attr_reader :start_at
|
20
17
|
|
21
|
-
|
22
|
-
|
18
|
+
def initialize()
|
19
|
+
@states = {}
|
20
|
+
end
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
:StartAt => @start_at,
|
27
|
-
:States => @states.map { |name,state| [name, state.render] }.to_h
|
28
|
-
}
|
29
|
-
end
|
30
|
-
end
|
22
|
+
def add(state)
|
23
|
+
@start_at = state.name unless @start_at
|
31
24
|
|
32
|
-
|
33
|
-
|
34
|
-
attr_accessor :state_machine
|
35
|
-
|
36
|
-
def initialize(name)
|
37
|
-
@name = name
|
38
|
-
@dict = {}
|
39
|
-
end
|
25
|
+
@states[state.name] = state
|
26
|
+
state.state_machine = self
|
40
27
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
28
|
+
state
|
29
|
+
end
|
44
30
|
|
45
|
-
|
46
|
-
|
47
|
-
|
31
|
+
def render
|
32
|
+
{
|
33
|
+
:StartAt => @start_at,
|
34
|
+
:States => @states.map { |name, state| [name, state.render] }.to_h,
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
48
38
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
39
|
+
class State
|
40
|
+
attr_reader :name
|
41
|
+
attr_accessor :state_machine
|
42
|
+
|
43
|
+
def initialize(name)
|
44
|
+
@name = name
|
45
|
+
@dict = {}
|
46
|
+
end
|
47
|
+
|
48
|
+
def []=(key, value)
|
49
|
+
@dict[key] = value
|
50
|
+
end
|
51
|
+
|
52
|
+
def next=(state)
|
53
|
+
@dict[:Next] = (state.is_a? Symbol) ? state : state.name
|
54
|
+
end
|
55
|
+
|
56
|
+
def render
|
57
|
+
dict = @dict
|
58
|
+
dict[:End] = true unless dict[:Next]
|
59
|
+
dict
|
60
|
+
end
|
54
61
|
end
|
55
62
|
|
56
63
|
class Task < State
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
64
|
+
def initialize(name)
|
65
|
+
super
|
66
|
+
@dict[:Type] = "Task"
|
67
|
+
@dict[:Resource] = $FUNCTION_ARN
|
68
|
+
@dict[:Parameters] = {
|
69
|
+
:Task => name,
|
70
|
+
"Input.$" => "$",
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def action(&action_block)
|
75
|
+
@action_block = action_block
|
76
|
+
end
|
77
|
+
|
78
|
+
def perform_action(input)
|
79
|
+
output = nil
|
80
|
+
output = @action_block.call(input) if @action_block
|
81
|
+
|
82
|
+
if @implicit_choice
|
83
|
+
output = {} unless output
|
84
|
+
@implicit_choice.perform_action(output)
|
65
85
|
end
|
66
86
|
|
67
|
-
|
68
|
-
|
69
|
-
end
|
87
|
+
output
|
88
|
+
end
|
70
89
|
|
71
|
-
|
72
|
-
|
90
|
+
def implicit_choice
|
91
|
+
unless @implicit_choice
|
92
|
+
@implicit_choice = Choice.new("#{name}_choice")
|
93
|
+
$sm.add @implicit_choice
|
94
|
+
self.next = @implicit_choice
|
73
95
|
end
|
96
|
+
@implicit_choice
|
97
|
+
end
|
74
98
|
end
|
75
99
|
|
76
|
-
class
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
100
|
+
class Callback < State
|
101
|
+
def initialize(name)
|
102
|
+
super
|
103
|
+
@dict[:Type] = "Task"
|
104
|
+
@dict[:Resource] = "arn:aws:states:::lambda:invoke.waitForTaskToken"
|
105
|
+
@dict[:Parameters] = {
|
106
|
+
:FunctionName => function_name,
|
107
|
+
:Payload => {
|
108
|
+
:Task => name,
|
109
|
+
"Input.$" => "$",
|
110
|
+
"Token.$" => "$$.Task.Token",
|
111
|
+
},
|
112
|
+
}
|
113
|
+
end
|
114
|
+
|
115
|
+
def action(&action_block)
|
116
|
+
@action_block = action_block
|
117
|
+
end
|
118
|
+
|
119
|
+
def perform_action(input, token)
|
120
|
+
@action_block.call(input, token) if @action_block
|
121
|
+
end
|
89
122
|
end
|
90
123
|
|
91
|
-
class
|
92
|
-
|
124
|
+
class ChoiceItem
|
125
|
+
attr_accessor :implicit_condition_block
|
93
126
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
127
|
+
def initialize(dict = {}, state = nil)
|
128
|
+
@dict = dict
|
129
|
+
self.next = state if state
|
130
|
+
end
|
99
131
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
def add_string_matches(var, match, state)
|
105
|
-
add ChoiceItem.new({
|
106
|
-
:Variable => var,
|
107
|
-
:StringMatches => match
|
108
|
-
}, state)
|
109
|
-
end
|
132
|
+
def next=(state)
|
133
|
+
@dict[:Next] = (state.is_a? Symbol) ? state : state.name
|
134
|
+
end
|
110
135
|
|
111
|
-
|
112
|
-
|
113
|
-
|
136
|
+
def render
|
137
|
+
@dict
|
138
|
+
end
|
114
139
|
|
115
|
-
|
116
|
-
|
140
|
+
def perform_action(choice_name, output)
|
141
|
+
if @implicit_condition_block
|
142
|
+
output["#{choice_name}_#{@dict[:Next]}"] = @implicit_condition_block.call(output) ? "yes" : "no"
|
117
143
|
end
|
144
|
+
end
|
145
|
+
end
|
118
146
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
147
|
+
class Choice < State
|
148
|
+
attr_reader :choices
|
149
|
+
|
150
|
+
def initialize(name)
|
151
|
+
super
|
152
|
+
@choices = []
|
153
|
+
@dict[:Type] = "Choice"
|
154
|
+
end
|
155
|
+
|
156
|
+
def add(item)
|
157
|
+
@choices.push item
|
158
|
+
end
|
159
|
+
|
160
|
+
def add_string_matches(var, match, state)
|
161
|
+
add ChoiceItem.new({
|
162
|
+
:Variable => var,
|
163
|
+
:StringMatches => match,
|
164
|
+
}, state)
|
165
|
+
end
|
166
|
+
|
167
|
+
def default=(state)
|
168
|
+
@dict[:Default] = (state.is_a? Symbol) ? state : state.name
|
169
|
+
end
|
170
|
+
|
171
|
+
def next=(state)
|
172
|
+
self.default = state
|
173
|
+
end
|
174
|
+
|
175
|
+
def render
|
176
|
+
dict = @dict.clone
|
177
|
+
dict[:Choices] = @choices.map { |item| item.render }
|
178
|
+
dict
|
179
|
+
end
|
180
|
+
|
181
|
+
def perform_action(output)
|
182
|
+
@choices.each do |choice|
|
183
|
+
choice.perform_action name, output
|
123
184
|
end
|
185
|
+
end
|
124
186
|
end
|
125
187
|
|
126
|
-
|
188
|
+
# Workflow DSL
|
127
189
|
|
128
190
|
$sm = StateMachine.new
|
129
191
|
$tasks = []
|
130
192
|
|
131
193
|
def task(name)
|
132
|
-
|
194
|
+
t = $sm.add Task.new(name)
|
133
195
|
|
134
|
-
|
196
|
+
$tasks.last.next = t if $tasks.last
|
135
197
|
|
136
|
-
|
137
|
-
|
138
|
-
|
198
|
+
$tasks.push t
|
199
|
+
yield if block_given?
|
200
|
+
$tasks.pop
|
139
201
|
end
|
140
202
|
|
203
|
+
def callback(name)
|
204
|
+
t = $sm.add Callback.new(name)
|
205
|
+
|
206
|
+
$tasks.last.next = t if $tasks.last
|
207
|
+
|
208
|
+
$tasks.push t
|
209
|
+
yield if block_given?
|
210
|
+
$tasks.pop
|
211
|
+
end
|
141
212
|
|
142
213
|
def action(&action_block)
|
143
|
-
|
214
|
+
$tasks.last.action &action_block
|
144
215
|
end
|
145
216
|
|
146
217
|
def transition(state)
|
147
|
-
|
218
|
+
$tasks.last.next = state
|
219
|
+
end
|
220
|
+
|
221
|
+
def transition_to(state, &condition_block)
|
222
|
+
choice = $tasks.last.implicit_choice
|
223
|
+
|
224
|
+
c = ChoiceItem.new({
|
225
|
+
:Variable => "$.#{choice.name}_#{state}",
|
226
|
+
:StringMatches => "yes",
|
227
|
+
})
|
228
|
+
c.next = state
|
229
|
+
c.implicit_condition_block = condition_block
|
230
|
+
|
231
|
+
choice.add c
|
232
|
+
end
|
233
|
+
|
234
|
+
def default_transition_to(state)
|
235
|
+
choice = $tasks.last.implicit_choice
|
236
|
+
|
237
|
+
choice.default = state
|
148
238
|
end
|
149
239
|
|
150
240
|
def choice(name)
|
151
|
-
|
152
|
-
|
153
|
-
|
241
|
+
t = $sm.add Choice.new(name)
|
242
|
+
|
243
|
+
$tasks.last.next = t if $tasks.last
|
154
244
|
|
155
|
-
|
156
|
-
|
157
|
-
|
245
|
+
$tasks.push t
|
246
|
+
yield if block_given?
|
247
|
+
$tasks.pop
|
158
248
|
end
|
159
249
|
|
160
250
|
def string_matches(var, match)
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
251
|
+
c = ChoiceItem.new({
|
252
|
+
:Variable => var,
|
253
|
+
:StringMatches => match,
|
254
|
+
})
|
165
255
|
|
166
|
-
|
256
|
+
$tasks.last.add c
|
167
257
|
|
168
|
-
|
169
|
-
|
170
|
-
|
258
|
+
$tasks.push c
|
259
|
+
yield if block_given?
|
260
|
+
$tasks.pop
|
171
261
|
end
|
172
262
|
|
173
263
|
def default
|
174
|
-
|
175
|
-
|
176
|
-
|
264
|
+
$tasks.push $tasks.last
|
265
|
+
yield if block_given?
|
266
|
+
$tasks.pop
|
177
267
|
end
|
178
268
|
end
|
data/samples/sample1/workflow.rb
CHANGED
@@ -4,37 +4,36 @@ require "simplerubysteps"
|
|
4
4
|
include Simplerubysteps
|
5
5
|
|
6
6
|
task :t1 do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
choice :t2 do
|
13
|
-
string_matches "$.Foo1", "ja" do
|
14
|
-
task :t3 do
|
15
|
-
action do |input|
|
16
|
-
puts "Task t3: #{input}"
|
17
|
-
input.merge({ "Foo3": "Bar3x" })
|
18
|
-
end
|
7
|
+
action do |input|
|
8
|
+
puts "Task t1: #{input}"
|
9
|
+
input.merge({ "Foo1" => (input["foo"] == "John Wick" ? "ja" : "nein") })
|
10
|
+
end
|
19
11
|
|
20
|
-
|
21
|
-
|
12
|
+
choice :t2 do
|
13
|
+
string_matches "$.Foo1", "ja" do
|
14
|
+
callback :t3 do
|
15
|
+
action do |input, token|
|
16
|
+
puts "Callback t3: #{input}, #{token}" # The logged token is picked up by continue-callbackbranch.sh
|
22
17
|
end
|
23
18
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
19
|
+
transition :t5
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
default do
|
24
|
+
task :t4 do
|
25
|
+
action do |input|
|
26
|
+
puts "Task t4: #{input}"
|
27
|
+
input.merge({ "Foo4": "Bar4xy" })
|
31
28
|
end
|
29
|
+
end
|
32
30
|
end
|
31
|
+
end
|
33
32
|
end
|
34
33
|
|
35
34
|
task :t5 do
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
action do |input|
|
36
|
+
puts "Task t5: #{input}"
|
37
|
+
input.merge({ "Foo5" => "Bar5" })
|
38
|
+
end
|
40
39
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require "simplerubysteps"
|
4
|
+
include Simplerubysteps
|
5
|
+
|
6
|
+
task :t1 do
|
7
|
+
action do |input|
|
8
|
+
puts "Task t1: #{input}"
|
9
|
+
input.merge({ "t1" => (input["bar"] ? input["bar"] : "") + "t1" })
|
10
|
+
end
|
11
|
+
|
12
|
+
transition_to :t2 do |output|
|
13
|
+
output["t1"] == "foot1"
|
14
|
+
end
|
15
|
+
|
16
|
+
default_transition_to :t3
|
17
|
+
end
|
18
|
+
|
19
|
+
task :t2 do
|
20
|
+
action do |input|
|
21
|
+
puts "Task t2: #{input}"
|
22
|
+
input.merge({ "t2" => "yes" })
|
23
|
+
end
|
24
|
+
|
25
|
+
transition :t4
|
26
|
+
end
|
27
|
+
|
28
|
+
task :t3 do
|
29
|
+
action do |input|
|
30
|
+
puts "Task t3: #{input}"
|
31
|
+
input.merge({ "t3" => "yes" })
|
32
|
+
end
|
33
|
+
|
34
|
+
task :t4 do
|
35
|
+
action do |input|
|
36
|
+
puts "Task t4: #{input}"
|
37
|
+
input.merge({ "t4" => "yes" })
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/simplerubysteps.gemspec
CHANGED
@@ -3,31 +3,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
require "simplerubysteps/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
6
|
+
spec.name = "simplerubysteps"
|
7
|
+
spec.version = Simplerubysteps::VERSION
|
8
|
+
spec.authors = ["Christian Tschenett"]
|
9
|
+
spec.email = ["simplerubysteps@furthermore.ch"]
|
10
10
|
|
11
|
-
spec.summary
|
12
|
-
|
13
|
-
spec.homepage = "https://github.com/chtz/simplerubysteps"
|
14
|
-
spec.license = "MIT"
|
11
|
+
spec.summary = %q{simplerubysteps makes it easy to manage AWS Step Functions with ruby (eventually - this is an early alpha version and should not really be used by everyone).}
|
15
12
|
|
16
|
-
spec.
|
13
|
+
spec.homepage = "https://github.com/chtz/simplerubysteps"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
17
17
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
18
|
end
|
19
|
-
spec.files << "lib/deploy.sh"
|
20
|
-
spec.files << "lib/destroy.sh"
|
21
|
-
spec.files << "lib/workflow-run.sh"
|
22
|
-
spec.files << "lib/statemachine.yaml"
|
23
|
-
spec.files << "lib/function.rb"
|
24
19
|
|
25
|
-
spec.bindir
|
26
|
-
spec.executables
|
27
|
-
|
28
|
-
spec.executables << "simplerubysteps-destroy"
|
29
|
-
spec.executables << "simplerubysteps-workflow-run"
|
30
|
-
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
|
31
23
|
spec.require_paths = ["lib"]
|
32
24
|
|
33
25
|
spec.add_development_dependency "bundler", "~> 1.17"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplerubysteps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Tschenett
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,6 +44,7 @@ email:
|
|
44
44
|
executables:
|
45
45
|
- simplerubysteps-deploy
|
46
46
|
- simplerubysteps-destroy
|
47
|
+
- simplerubysteps-logs
|
47
48
|
- simplerubysteps-workflow-run
|
48
49
|
extensions: []
|
49
50
|
extra_rdoc_files: []
|
@@ -57,15 +58,22 @@ files:
|
|
57
58
|
- bin/setup
|
58
59
|
- exe/simplerubysteps-deploy
|
59
60
|
- exe/simplerubysteps-destroy
|
61
|
+
- exe/simplerubysteps-logs
|
60
62
|
- exe/simplerubysteps-workflow-run
|
61
63
|
- lib/deploy.sh
|
62
64
|
- lib/destroy.sh
|
63
65
|
- lib/function.rb
|
66
|
+
- lib/logs.sh
|
64
67
|
- lib/simplerubysteps.rb
|
65
68
|
- lib/simplerubysteps/version.rb
|
66
69
|
- lib/statemachine.yaml
|
67
70
|
- lib/workflow-run.sh
|
71
|
+
- samples/sample1/continue-callbackbranch.sh
|
72
|
+
- samples/sample1/send-task-success.sh
|
73
|
+
- samples/sample1/start-callbackbranch.sh
|
74
|
+
- samples/sample1/start-directbranch.sh
|
68
75
|
- samples/sample1/workflow.rb
|
76
|
+
- samples/sample2/workflow.rb
|
69
77
|
- simplerubysteps.gemspec
|
70
78
|
homepage: https://github.com/chtz/simplerubysteps
|
71
79
|
licenses:
|