snapshot of https://github.com/cortezaproject/corteza.git (2024.9.x, 2026-09-18; blobs > 131072B omitted)
Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s

This commit is contained in:
upstream-mirror
2026-09-18 01:22:23 +05:00
commit 7e385fc126
8391 changed files with 1766236 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
workflows:
basic:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [ { target: foo, type: Integer, expr: "40" } ]
- stepID: 2
kind: expressions
arguments: [ { target: foo, type: Integer, expr: "foo + 2" } ]
paths:
- { parentID: 1, childID: 2 }

View File

@@ -0,0 +1,66 @@
roles:
testers:
users:
tester:
email: tester@testing-samples.tld
workflows:
check-and-grant:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: function
ref: rolesLookup
arguments:
- { target: lookup, type: Handle, value: "testers" }
results:
- { target: res, expr: role }
- stepID: 2
kind: function
ref: rbacCheck
arguments:
- { target: resource, type: RbacResource, expr: "res" }
- { target: operation, type: String, value: "read" }
results:
- { target: canCurrentRead, type: String, expr: 'can ? "y":"n"' }
- stepID: 3
kind: function
ref: usersLookup
arguments:
- { target: lookup, type: Handle, value: "tester" }
results:
- { target: usr, expr: user }
- stepID: 4
kind: function
ref: rbacCheck
arguments:
- { target: resource, type: RbacResource, expr: "res" }
- { target: operation, type: String, value: "read" }
- { target: user, type: User, expr: "usr" }
results:
- { target: canOtherRead, type: String, expr: 'can ? "y":"n"' }
- stepID: 5
kind: function
ref: rbacAllow
arguments:
- { target: resource, type: RbacResource, expr: "res" }
- { target: operation, type: String, value: "read" }
- { target: role, type: Role, expr: "res" }
paths:
- { parentID: 1, childID: 2 }
- { parentID: 2, childID: 3 }
- { parentID: 3, childID: 4 }
- { parentID: 4, childID: 5 }

View File

@@ -0,0 +1,24 @@
workflows:
create-user:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments:
- { target: dummy, type: User }
- { target: dummy.email, type: String, value: "some.email@domain.tld" }
- { target: dummy.name, type: String, value: "Not Sure" }
- stepID: 2
kind: function
ref: usersCreate
arguments:
- { target: user, type: User, expr: "dummy" }
paths:
- { parentID: 1, childID: 2 }

View File

@@ -0,0 +1,7 @@
users:
u1: u1@example.tld
u2: u2@example.tld
roles:
r1: Role1
r2: Role2

View File

@@ -0,0 +1,74 @@
workflows:
role-members:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
# Adding membership
- stepID: 10
kind: function
ref: rolesAddMember
arguments:
- { target: role, type: Handle, value: r1 }
- { target: user, type: Handle, value: u1 }
- stepID: 11
kind: function
ref: rolesAddMember
arguments:
- { target: role, type: Handle, value: r2 }
- { target: user, type: Handle, value: u1 }
# Get current state
- stepID: 20
kind: function
ref: rolesSearchMembers
arguments:
- { target: lookup, type: Handle, value: r1 }
results:
- { target: usersPre_r1, expr: "users" }
- { target: totalPre_r1, expr: "total" }
- stepID: 21
kind: function
ref: rolesSearchMembers
arguments:
- { target: lookup, type: Handle, value: r2 }
results:
- { target: usersPre_r2, expr: "users" }
- { target: totalPre_r2, expr: "total" }
# Removing membership
- stepID: 30
kind: function
ref: rolesRemoveMember
arguments:
- { target: role, type: Handle, value: r1 }
- { target: user, type: Handle, value: u1 }
# Get final state
- stepID: 40
kind: function
ref: rolesSearchMembers
arguments:
- { target: lookup, type: Handle, value: r1 }
results:
- { target: usersPost_r1, expr: "users" }
- { target: totalPost_r1, expr: "total" }
- stepID: 41
kind: function
ref: rolesSearchMembers
arguments:
- { target: lookup, type: Handle, value: r2 }
results:
- { target: usersPost_r2, expr: "users" }
- { target: totalPost_r2, expr: "total" }
paths:
- { parentID: 10, childID: 11 }
- { parentID: 11, childID: 20 }
- { parentID: 20, childID: 21 }
- { parentID: 21, childID: 30 }
- { parentID: 30, childID: 40 }
- { parentID: 40, childID: 41 }

View File

@@ -0,0 +1,7 @@
users:
u1: u1@example.tld
u2: u2@example.tld
roles:
r1: Role1
r2: Role2

View File

@@ -0,0 +1,115 @@
workflows:
user-membership:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
# Adding membership
- stepID: 10
kind: function
ref: rolesAddMember
arguments:
- { target: role, type: Handle, value: r1 }
- { target: user, type: Handle, value: u1 }
- stepID: 11
kind: function
ref: rolesAddMember
arguments:
- { target: role, type: Handle, value: r2 }
- { target: user, type: Handle, value: u1 }
# Get current state
- stepID: 20
kind: function
ref: usersSearchMembership
arguments:
- { target: lookup, type: Handle, value: u1 }
results:
- { target: rolesPre_u1, expr: "roles" }
- { target: totalPre_u1, expr: "total" }
- stepID: 21
kind: function
ref: usersSearchMembership
arguments:
- { target: lookup, type: Handle, value: u2 }
results:
- { target: rolesPre_u2, expr: "roles" }
- { target: totalPre_u2, expr: "total" }
- stepID: 22
kind: function
ref: usersCheckMembership
arguments:
- { target: user, type: Handle, value: u1 }
- { target: role, type: Handle, value: r1 }
results:
- { target: memberPre_u1, expr: "member" }
- stepID: 23
kind: function
ref: usersCheckMembership
arguments:
- { target: user, type: Handle, value: u2 }
- { target: role, type: Handle, value: r1 }
results:
- { target: memberPre_u2, expr: "member" }
# Removing membership
- stepID: 30
kind: function
ref: rolesRemoveMember
arguments:
- { target: role, type: Handle, value: r1 }
- { target: user, type: Handle, value: u1 }
# Get final state
- stepID: 40
kind: function
ref: usersSearchMembership
arguments:
- { target: lookup, type: Handle, value: u1 }
results:
- { target: rolesPost_u1, expr: "roles" }
- { target: totalPost_u1, expr: "total" }
- stepID: 41
kind: function
ref: usersSearchMembership
arguments:
- { target: lookup, type: Handle, value: u2 }
results:
- { target: rolesPost_u2, expr: "roles" }
- { target: totalPost_u2, expr: "total" }
- stepID: 42
kind: function
ref: usersCheckMembership
arguments:
- { target: user, type: Handle, value: u1 }
- { target: role, type: Handle, value: r1 }
results:
- { target: memberPost_u1, expr: "member" }
- stepID: 43
kind: function
ref: usersCheckMembership
arguments:
- { target: user, type: Handle, value: u2 }
- { target: role, type: Handle, value: r1 }
results:
- { target: memberPost_u2, expr: "member" }
paths:
- { parentID: 10, childID: 11 }
- { parentID: 11, childID: 20 }
- { parentID: 20, childID: 21 }
- { parentID: 21, childID: 22 }
- { parentID: 22, childID: 23 }
- { parentID: 23, childID: 30 }
- { parentID: 30, childID: 40 }
- { parentID: 40, childID: 41 }
- { parentID: 41, childID: 42 }
- { parentID: 42, childID: 43 }

View File

@@ -0,0 +1,25 @@
namespaces:
ns1:
name: ns1 name
modules:
mod1:
name: mod1 name
fields:
f1:
label: f1 label
kind: String
required: false
records:
mod1:
- values:
f1: 1
- values:
f1: 2
- values:
f1: 3
- values:
f1: 4
- values:
f1: 5

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: composeRecordsEach
arguments:
- { "target": "module", "value": "mod1", "type": "Handle" }
- { "target": "namespace", "value": "ns1", "type": "Handle" }
results:
- { "target": "r", "expr": "record" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,6 @@
users:
u1: u1@example.tld
u2: u2@example.tld
u3: u3@example.tld
u4: u4@example.tld
u5: u5@example.tld

View File

@@ -0,0 +1,28 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: usersEach
arguments:
- { "target": "incTotal", "value": "false", "type": "Boolean" }
results:
- { "target": "u", "expr": "user" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,6 @@
roles:
r1: r1 name
r2: r2 name
r3: r3 name
r4: r4 name
r5: r5 name

View File

@@ -0,0 +1,28 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: rolesEach
arguments:
- { "target": "incTotal", "value": "false", "type": "Boolean" }
results:
- { "target": "r", "expr": "role" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,9 @@
roles:
r1: r1 name
users:
u1: u1@mail.tld
u2: u2@mail.tld
u3: u3@mail.tld
u4: u4@mail.tld
u5: u5@mail.tld

View File

@@ -0,0 +1,28 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: rolesEachMember
arguments:
- { "target": "lookup", "value": "r1", "type": "Handle" }
results:
- { "target": "u", "expr": "user" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,11 @@
templates:
t1:
type: text/html
t2:
type: text/html
t3:
type: text/html
t4:
type: text/html
t5:
type: text/html

View File

@@ -0,0 +1,28 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: templatesEach
arguments:
- { "target": "incTotal", "value": "false", "type": "Boolean" }
results:
- { "target": "tpl", "expr": "template" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,25 @@
namespaces:
ns1:
name: ns1 name
modules:
mod1:
name: mod1 name
fields:
f1:
label: f1 label
kind: String
required: false
records:
mod1:
- values:
f1: 1
- values:
f1: 2
- values:
f1: 3
- values:
f1: 4
- values:
f1: 5

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: composeRecordsEach
arguments:
- { "target": "module", "value": "mod1", "type": "Handle" }
- { "target": "namespace", "value": "ns1", "type": "Handle" }
results:
- { "target": "r", "expr": "record" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,19 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: expressions
arguments:
- { "target": "test", "value": "42", "type": "Any" }
- stepID: 11
kind: termination
paths:
- { parentID: 10, childID: 11 }

View File

@@ -0,0 +1,13 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: expressions
arguments:
- { "target": "test", "value": "42", "type": "Any" }

View File

@@ -0,0 +1,120 @@
workflows:
case1:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: gateway
ref: excl
- stepID: 11
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 1", type: "String"}
- stepID: 12
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 2", type: "String"}
- stepID: 13
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 3", type: "String"}
- stepID: 14
kind: termination
paths:
- { parentID: 10, childID: 11, expr: "true == true" }
- { parentID: 10, childID: 12, expr: "true == true" }
- { parentID: 10, childID: 13, expr: "" }
- { parentID: 11, childID: 14 }
- { parentID: 12, childID: 14 }
- { parentID: 13, childID: 14 }
case2:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: gateway
ref: excl
- stepID: 11
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 1", type: "String"}
- stepID: 12
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 2", type: "String"}
- stepID: 13
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 3", type: "String"}
- stepID: 14
kind: termination
paths:
- { parentID: 10, childID: 11, expr: "true == false" }
- { parentID: 10, childID: 12, expr: "true == true" }
- { parentID: 10, childID: 13, expr: "" }
- { parentID: 11, childID: 14 }
- { parentID: 12, childID: 14 }
- { parentID: 13, childID: 14 }
case3:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: gateway
ref: excl
- stepID: 11
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 1", type: "String"}
- stepID: 12
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 2", type: "String"}
- stepID: 13
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 3", type: "String"}
- stepID: 14
kind: termination
paths:
- { parentID: 10, childID: 11, expr: "true == false" }
- { parentID: 10, childID: 12, expr: "true == false" }
- { parentID: 10, childID: 13, expr: "" }
- { parentID: 11, childID: 14 }
- { parentID: 12, childID: 14 }
- { parentID: 13, childID: 14 }

View File

@@ -0,0 +1,46 @@
workflows:
case1:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: gateway
ref: fork
- stepID: 11
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 1", type: "String"}
- stepID: 12
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 2", type: "String"}
- stepID: 13
kind: function
ref: logInfo
arguments:
- {target: "message", value: "log 3", type: "String"}
- stepID: 14
kind: gateway
ref: join
- stepID: 15
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }
- { parentID: 10, childID: 13 }
- { parentID: 11, childID: 14 }
- { parentID: 12, childID: 14 }
- { parentID: 13, childID: 14 }
- { parentID: 14, childID: 15 }

View File

@@ -0,0 +1,83 @@
workflows:
case1:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [ { target: foo, type: Integer, expr: "40" } ]
- stepID: 2
kind: expressions
arguments: [ { target: bar, type: Integer, expr: "50" } ]
- stepID: 3
kind: gateway
ref: excl
paths:
- { parentID: 1, childID: 2 }
case2:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [ { target: foo, type: Integer, expr: "40" } ]
- stepID: 2
kind: expressions
arguments: [ { target: bar, type: Integer, expr: "50" } ]
- stepID: 3
kind: gateway
ref: incl
paths:
- { parentID: 1, childID: 2 }
case3:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [ { target: foo, type: Integer, expr: "40" } ]
- stepID: 2
kind: expressions
arguments: [ { target: bar, type: Integer, expr: "50" } ]
- stepID: 3
kind: function
ref: logInfo
paths:
- { parentID: 1, childID: 2 }
case4:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [ { target: foo, type: Integer, expr: "40" } ]
- stepID: 2
kind: expressions
arguments: [ { target: bar, type: Integer, expr: "50" } ]
- stepID: 3
kind: iterator
paths:
- { parentID: 1, childID: 2 }

View File

@@ -0,0 +1,156 @@
workflows:
kv_expressions:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [
## Initialize empty kv
{ target: aux, type: KV, value: null },
## Initialize key and value(string) for set expression
{ target: testString, type: String, value: "testString" },
{ target: foo, type: String, value: "testing string" },
# Evaluate set for KV(1st argument) with string value(3rd argument);
# it will set string value type for given key to KV(out)
{ target: out, type: KV, expr: "set(aux, testString, foo)" },
{ target: out, type: KV, expr: "set(out, \"deleteMe\", \"foobar\")" },
# Evaluate omit for KV(1st argument) for key(Name);
# it will omit values with matching keys from KV(out)
{ target: out, type: KV, expr: "omit(out, \"deleteMe\")" },
]
- stepID: 2
kind: termination
paths:
- { parentID: 1, childID: 2 }
kvv_expressions:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [
## Initialize empty kvv
{ target: aux, type: KVV, expr: "{\"test\": [\"z\", \"y\", \"x\"], \"deleteMe\": [\"foo\", \"bar\"], }" },
## Initialize key and value(Array) for set expression
{ target: testString, type: String, value: "testString" },
{ target: testArray, type: Any, expr: "[\"foo\", \"bar\"]" },
# Evaluate set for KVV(1st argument) with []string value(3rd argument);
# it will set []string value for given key to KVV(out)
{ target: out, type: KVV, expr: "set(aux, testString, testArray)" },
# Evaluate omit for KVV(1st argument) for key(Name);
# it will omit values with matching keys from KVV(out)
{ target: out, type: KVV, expr: "omit(out, \"test\", \"deleteMe\")" },
]
- stepID: 2
kind: termination
paths:
- { parentID: 1, childID: 2 }
vars_expressions:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [
## Initialize empty vars
{ target: aux, type: Vars, value: null },
## Initialize key and value(string) for set expression
{ target: testString, type: String, value: "testString" },
{ target: foo, type: String, value: "testing string" },
# Evaluate set for Vars(1st argument) with string value(3rd argument);
# it will set string value type for given key to Vars(out)
{ target: out, type: Vars, expr: "set(aux, testString, foo)" },
## Initialize key and value(int) for set expression
{ target: testInt, type: String, value: "testInt" },
{ target: bar, type: Integer, expr: "40" },
# Evaluate set for Vars(1st argument) with int value(3rd argument);
# it will set int value type for given key to Vars(out)
{ target: out, type: Vars, expr: "set(out, testInt, bar)" },
## Initialize key and value(Vars) for set expression
{ target: testVar, type: String, value: "testVar" },
{ target: foobar, type: Vars, expr: "{\"testString\": \"testing string\", \"testFloat\": 50}" },
# Evaluate set for Vars(1st argument) with Vars value(3rd argument);
# it will set Vars value type for given key to Vars(out)
{ target: out, type: Vars, expr: "set(out, testVar, foobar)" },
## Evaluate set for constant: `{}`(1st argument) with string value(3rd argument);
# it will set string value type for given key to Vars(outConstStr)
{ target: outConstStr, type: Vars, expr: "set({}, \"testConstKey\", \"testConstValue\")" },
## Evaluate set for constant value(1st argument) with int value(3rd argument);
# it will set int value type for given key to Vars(outConstInt)
{ target: outConstInt, type: Vars, expr: "set({}, testInt, bar)" },
# Evaluate omit for Vars(1st argument) for keys;
# it will omit values matching keys from Vars(outConstInt)
{ target: outConstInt, type: Vars, expr: "omit(outConstInt, testInt)" },
]
- stepID: 2
kind: termination
paths:
- { parentID: 1, childID: 2 }
compose_record_values_expressions:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments: [
## Initialize rv(ComposeRecordValues) and key for set expression
{ target: rv, type: ComposeRecordValues, expr: "{}" },
{ target: testRv, type: String, value: "testRv" },
{ target: foo, type: String, value: "testing string" },
# Evaluate set for ComposeRecordValues(1st argument) with string value(3rd argument);
# it will set string value for given key(Name) to ComposeRecordValues(outRv)
{ target: out, type: ComposeRecordValues, expr: "set(rv, testRv, foo)" },
# Evaluate set for ComposeRecordValues(1st argument) with float value(3rd argument);
# it will set float value for given key(Name) to ComposeRecordValues(outRv)
{ target: out, type: ComposeRecordValues, expr: "set(out, \"testFloat\", 50)" },
{ target: out, type: ComposeRecordValues, expr: "set(out, \"removeMe\", \"I will be removed\")" },
# Evaluate omit for ComposeRecordValues(1st argument) for key(Name);
# it will omit values matching Name from ComposeRecordValues(outRv)
{ target: out, type: ComposeRecordValues, expr: "omit(out, \"testRv\", \"removeMe\")" },
]
- stepID: 2
kind: termination
paths:
- { parentID: 1, childID: 2 }

View File

@@ -0,0 +1,44 @@
workflows:
sub:
enabled: true
trace: true
steps:
- stepID: 1
kind: expressions
arguments:
- { target: breadcrumbs, expr: 'breadcrumbs + " + sub"' }
- stepID: 2
kind: termination
paths:
- { parentID: 1, childID: 2 }
main:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: expressions
arguments:
- { target: scope4sub, type: Vars }
- { target: scope4sub.breadcrumbs, value: 'main' }
- stepID: 2
kind: exec-workflow
arguments:
- { target: workflow, type: Handle, value: "sub" }
- { target: scope, type: Vars, source: scope4sub }
results:
- { target: out, source: breadcrumbs }
- stepID: 3
kind: termination
paths:
- { parentID: 1, childID: 2 }
- { parentID: 2, childID: 3 }

View File

@@ -0,0 +1,31 @@
workflows:
error_handler_results:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: error-handler
results:
- { target: e, type: Any, expr: "error" }
- { target: eM, type: String, expr: "errorMessage" }
- { target: esID, type: Integer, expr: "errorStepID" }
- stepID: 2
kind: error
arguments:
- { target: message, type: String, value: "TestingError" }
- stepID: 3
kind: function
ref: logInfo
arguments:
- { target: message, type: String, expr: "format(\"%s, %s, %d\", e, eM, esID)" }
paths:
- { parentID: 1, childID: 2 }
- { parentID: 1, childID: 3 }

View File

@@ -0,0 +1,221 @@
workflows:
# 1. iterator placed inside a parallel fork/join
iterator_in_fork:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: gateway
ref: fork
# branch A: iterator; its exit path leads to the join
- stepID: 11
kind: iterator
ref: templatesEach
arguments:
- { target: incTotal, value: "false", type: Boolean }
results:
- { target: tpl, expr: template }
- stepID: 12
kind: continue
# branch B: plain step
- stepID: 13
kind: expressions
arguments: [ { target: b, type: String, value: "B" } ]
- stepID: 14
kind: gateway
ref: join
- stepID: 15
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 13 }
- { parentID: 11, childID: 12 }
- { parentID: 11, childID: 14 }
- { parentID: 13, childID: 14 }
- { parentID: 14, childID: 15 }
# 3a. variable created mid-branch in a non-first branch
join_new_var:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: gateway
ref: fork
# branch A -> paths[0]
- stepID: 11
kind: expressions
arguments: [ { target: a, type: String, value: "A" } ]
# branch B: sets foo mid-branch, then does something else
- stepID: 12
kind: expressions
arguments: [ { target: foo, type: String, value: "fromB" } ]
- stepID: 13
kind: expressions
arguments: [ { target: bLast, type: String, value: "last" } ]
- stepID: 14
kind: gateway
ref: join
- stepID: 15
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }
- { parentID: 12, childID: 13 }
- { parentID: 11, childID: 14 }
- { parentID: 13, childID: 14 }
- { parentID: 14, childID: 15 }
# 3b. variable that already existed before the fork, changed mid-branch
join_existing_var:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 9
steps:
- stepID: 9
kind: expressions
arguments: [ { target: foo, type: String, value: "base" } ]
- stepID: 10
kind: gateway
ref: fork
# branch A -> paths[0], never touches foo
- stepID: 11
kind: expressions
arguments: [ { target: a, type: String, value: "A" } ]
# branch B changes foo mid-branch
- stepID: 12
kind: expressions
arguments: [ { target: foo, type: String, value: "fromB" } ]
- stepID: 13
kind: expressions
arguments: [ { target: bLast, type: String, value: "last" } ]
- stepID: 14
kind: gateway
ref: join
- stepID: 15
kind: termination
paths:
- { parentID: 9, childID: 10 }
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }
- { parentID: 12, childID: 13 }
- { parentID: 11, childID: 14 }
- { parentID: 13, childID: 14 }
- { parentID: 14, childID: 15 }
# 2. error handler registered, then a normal step runs before the error
errhandler_after_step:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: error-handler
results:
- { target: eM, type: String, expr: errorMessage }
# normal continuation (out[0])
- stepID: 2
kind: expressions
arguments: [ { target: noise, type: String, value: "noise" } ]
- stepID: 3
kind: error
arguments: [ { target: message, type: String, value: "Boom" } ]
# error handler (out[1])
- stepID: 4
kind: expressions
arguments: [ { target: caught, type: String, expr: eM } ]
paths:
- { parentID: 1, childID: 2 }
- { parentID: 1, childID: 4 }
- { parentID: 2, childID: 3 }
# 3c. a nested parallel section must not claim variables it never changed
join_nested:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 9
steps:
- stepID: 9
kind: expressions
arguments: [ { target: foo, type: String, value: "base" } ]
- stepID: 10
kind: gateway
ref: fork
# branch A -> paths[0], changes foo mid-branch
- stepID: 11
kind: expressions
arguments: [ { target: foo, type: String, value: "fromA" } ]
- stepID: 12
kind: expressions
arguments: [ { target: aLast, type: String, value: "last" } ]
# branch B holds a parallel section of its own and never touches foo
- stepID: 13
kind: gateway
ref: fork
- stepID: 14
kind: expressions
arguments: [ { target: b1, type: String, value: "b1" } ]
- stepID: 15
kind: expressions
arguments: [ { target: b2, type: String, value: "b2" } ]
- stepID: 16
kind: gateway
ref: join
- stepID: 20
kind: gateway
ref: join
- stepID: 21
kind: termination
paths:
- { parentID: 9, childID: 10 }
- { parentID: 10, childID: 11 }
- { parentID: 11, childID: 12 }
- { parentID: 10, childID: 13 }
- { parentID: 13, childID: 14 }
- { parentID: 13, childID: 15 }
- { parentID: 14, childID: 16 }
- { parentID: 15, childID: 16 }
- { parentID: 12, childID: 20 }
- { parentID: 16, childID: 20 }
- { parentID: 20, childID: 21 }

View File

@@ -0,0 +1,59 @@
workflows:
logger:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: function
ref: actionlogRecord
arguments:
- { target: action, type: String, value: "action" }
- { target: resource, type: String, value: "resource" }
- { target: error, type: String, value: "error" }
- { target: severity, type: String, value: "severity" }
- { target: description, type: String, value: "description" }
- stepID: 11
kind: function
ref: actionlogRecord
arguments:
- { target: action, type: String, value: "action" }
- { target: resource, type: String, value: "resource" }
- { target: error, type: String, value: "error" }
- { target: severity, type: String, value: "severity" }
- { target: description, type: String, value: "description" }
- stepID: 12
kind: function
ref: actionlogRecord
arguments:
- { target: action, type: String, value: "action" }
- { target: resource, type: String, value: "find-me" }
- { target: error, type: String, value: "error" }
- { target: severity, type: String, value: "severity" }
- { target: description, type: String, value: "description" }
- stepID: 13
kind: function
ref: actionlogRecord
arguments:
- { target: action, type: String, value: "action" }
- { target: resource, type: String, value: "find-me" }
- { target: error, type: String, value: "error" }
- { target: severity, type: String, value: "severity" }
- { target: description, type: String, value: "description" }
- stepID: 20
kind: function
ref: actionlogSearch
arguments:
- { target: resource, type: String, value: "find-me" }
results:
- { target: actions, expr: "actions" }
paths:
- { parentID: 10, childID: 11 }
- { parentID: 11, childID: 12 }
- { parentID: 12, childID: 13 }
- { parentID: 13, childID: 20 }

View File

@@ -0,0 +1,9 @@
namespaces:
ns1:
name: Namespace#1
modules:
mod1:
name: Module#1
fields:
f1: { label: 'Field1', kind: 'File' }

View File

@@ -0,0 +1,59 @@
workflows:
attachments:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: expressions
arguments:
- { target: base64blackGif, value: "R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=" }
- stepID: 11
kind: function
ref: composeRecordsNew
arguments:
- { target: module, type: Handle, value: "mod1" }
- { target: namespace, type: Handle, value: "ns1" }
results:
- { target: attachable, expr: "record" }
# Store attachment from given string
- stepID: 20
kind: function
ref: attachmentCreate
arguments:
- { target: content, type: String, expr: "base64blackGif" }
- { target: name, type: String, value: "black-from-base64-string.gif" }
- { target: resource, type: ComposeRecord, expr: "attachable" }
- { target: fieldName, type: String, value: "f1" }
results:
- { target: storedAttBlackGif, expr: "attachment" }
# Load attachment
- stepID: 30
kind: function
ref: attachmentLookup
arguments:
- { target: attachment, type: ID, expr: "storedAttBlackGif.ID" }
results:
- { target: loadedAttBlackGif, expr: "attachment" }
# Open attachment
- stepID: 31
kind: function
ref: attachmentOpenOriginal
arguments:
- { target: attachment, type: "Attachment", expr: "storedAttBlackGif" }
results:
- { target: loadedContent, expr: "content" }
paths:
- { parentID: 10, childID: 11 }
- { parentID: 11, childID: 20 }
- { parentID: 20, childID: 30 }
- { parentID: 30, childID: 31 }

View File

@@ -0,0 +1,9 @@
namespaces:
ns1:
name: Namespace#1
modules:
mod1:
name: Module#1
fields:
f1: { label: 'Field1', kind: 'File' }

View File

@@ -0,0 +1,96 @@
workflows:
attachments:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 11
steps:
- stepID: 11
kind: function
ref: composeRecordsNew
arguments:
- { target: module, type: Handle, value: "mod1" }
- { target: namespace, type: Handle, value: "ns1" }
results:
- { target: attachableString, expr: "record" }
- stepID: 12
kind: function
ref: composeRecordsNew
arguments:
- { target: module, type: Handle, value: "mod1" }
- { target: namespace, type: Handle, value: "ns1" }
results:
- { target: attachableReader, expr: "record" }
- stepID: 13
kind: function
ref: composeRecordsNew
arguments:
- { target: module, type: Handle, value: "mod1" }
- { target: namespace, type: Handle, value: "ns1" }
results:
- { target: attachableReadSeeker, expr: "record" }
- stepID: 14
kind: function
ref: composeRecordsNew
arguments:
- { target: module, type: Handle, value: "mod1" }
- { target: namespace, type: Handle, value: "ns1" }
results:
- { target: attachableBytes, expr: "record" }
# Store attachment from given string
- stepID: 20
kind: function
ref: attachmentCreate
arguments:
- { target: content, type: String, expr: "sourceString" }
- { target: name, type: String, value: "att.txt" }
- { target: resource, type: ComposeRecord, expr: "attachableString" }
- { target: fieldName, type: String, value: "f1" }
results:
- { target: attachedString, expr: "attachment" }
- stepID: 21
kind: function
ref: attachmentCreate
arguments:
- { target: content, type: Reader, expr: "sourceReader" }
- { target: name, type: String, value: "att.txt" }
- { target: resource, type: ComposeRecord, expr: "attachableReader" }
- { target: fieldName, type: String, value: "f1" }
results:
- { target: attachedReader, expr: "attachment" }
- stepID: 22
kind: function
ref: attachmentCreate
arguments:
- { target: content, type: Reader, expr: "sourceReadSeeker" }
- { target: name, type: String, value: "att.txt" }
- { target: resource, type: ComposeRecord, expr: "attachableReadSeeker" }
- { target: fieldName, type: String, value: "f1" }
results:
- { target: attachedReadSeeker, expr: "attachment" }
- stepID: 23
kind: function
ref: attachmentCreate
arguments:
- { target: content, type: Bytes, expr: "sourceBytes" }
- { target: name, type: String, value: "att.txt" }
- { target: resource, type: ComposeRecord, expr: "attachableBytes" }
- { target: fieldName, type: String, value: "f1" }
results:
- { target: attachedBytes, expr: "attachment" }
paths:
- { parentID: 11, childID: 12 }
- { parentID: 12, childID: 13 }
- { parentID: 13, childID: 14 }
- { parentID: 14, childID: 20 }
- { parentID: 20, childID: 21 }
- { parentID: 21, childID: 22 }
- { parentID: 22, childID: 23 }

View File

@@ -0,0 +1,8 @@
users:
exec-allowed: exec-allowed@cortezaproject.org
exec-denied: exec-denied@cortezaproject.org
roles:
executors:
members:
- exec-allowed

View File

@@ -0,0 +1,16 @@
workflows:
wf:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: termination
paths: []
allow:
executors:
- execute

View File

@@ -0,0 +1,8 @@
users:
wf-runner: workflow-runner@cortezaproject.org
wf-invoker: workflow-invoker@cortezaproject.org
roles:
wf-invokers:
members:
- wf-invoker

View File

@@ -0,0 +1,33 @@
workflows:
invoker:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: termination
paths: []
allow:
wf-invokers:
- execute
runner:
enabled: true
trace: true
runAs: wf-runner
triggers:
- enabled: true
stepID: 1
steps:
- stepID: 1
kind: termination
paths: []
allow:
wf-invokers:
- execute

View File

@@ -0,0 +1,25 @@
namespaces:
ns1:
name: ns1 name
modules:
mod1:
name: mod1 name
fields:
f1:
label: f1 label
kind: String
required: false
records:
mod1:
- values:
f1: 1
- values:
f1: 2
- values:
f1: 3
- values:
f1: 4
- values:
f1: 5

View File

@@ -0,0 +1,30 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: composeRecordsEach
arguments:
- { "target": "module", "value": "mod1", "type": "Handle" }
- { "target": "namespace", "value": "ns1", "type": "Handle" }
- { "target": "limit", "value": "2", "type": "UnsignedInteger" }
results:
- { "target": "r", "expr": "record" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,27 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: remindersEach
arguments:
- { "target": "incTotal", "value": "true", "type": "Boolean" }
results:
- { "target": "r", "expr": "reminder" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,6 @@
roles:
r1: r1 name
r2: r2 name
r3: r3 name
r4: r4 name
r5: r5 name

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: rolesEach
arguments:
- { "target": "incTotal", "value": "false", "type": "Boolean" }
- { "target": "limit", "value": "2", "type": "UnsignedInteger" }
results:
- { "target": "r", "expr": "role" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: loopSequence
arguments:
- { target: "last", expr: "3", type: "Integer"}
- { target: "step", expr: "1", type: "Integer"}
results:
- { target: "i", expr: "counter" }
- { target: "first", expr: "isFirst" }
- { target: "last", expr: "isLast" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,30 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: loopSequence
arguments:
- { target: "first", expr: "2", type: "Integer"}
- { target: "last", expr: "5", type: "Integer"}
- { target: "step", expr: "2", type: "Integer"}
results:
- { target: "i", expr: "counter" }
- { target: "first", expr: "isFirst" }
- { target: "last", expr: "isLast" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,11 @@
templates:
t1:
type: text/html
t2:
type: text/html
t3:
type: text/html
t4:
type: text/html
t5:
type: text/html

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: templatesEach
arguments:
- { "target": "incTotal", "value": "false", "type": "Boolean" }
- { "target": "limit", "value": "2", "type": "UnsignedInteger" }
results:
- { "target": "tpl", "expr": "template" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,6 @@
users:
u1: u1@example.tld
u2: u2@example.tld
u3: u3@example.tld
u4: u4@example.tld
u5: u5@example.tld

View File

@@ -0,0 +1,26 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: usersEach
arguments:
- { "target": "pageCursor", "expr": "cursor", "type": "String" }
results:
- { "target": "u", "expr": "user" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,6 @@
users:
u1: u1@example.tld
u2: u2@example.tld
u3: u3@example.tld
u4: u4@example.tld
u5: u5@example.tld

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: usersEach
arguments:
- { "target": "incTotal", "value": "false", "type": "Boolean" }
- { "target": "limit", "value": "2", "type": "UnsignedInteger" }
results:
- { "target": "u", "expr": "user" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1,6 @@
users:
u1: u1@example.tld
u2: u2@example.tld
u3: u3@example.tld
u4: u4@example.tld
u5: u5@example.tld

View File

@@ -0,0 +1,29 @@
workflows:
testing:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: iterator
ref: usersEach
arguments:
- { "target": "incTotal", "value": "true", "type": "Boolean" }
- { "target": "incPageNavigation", "value": "true", "type": "Boolean" }
results:
- { "target": "u", "expr": "user" }
- { "target": "i", "expr": "index" }
- { "target": "t", "expr": "total" }
- stepID: 11
kind: continue
- stepID: 12
kind: termination
paths:
- { parentID: 10, childID: 11 }
- { parentID: 10, childID: 12 }

View File

@@ -0,0 +1 @@
eyJhbGciOiJSUzI1NiIsImZvbyI6ImJhciIsInR5cCI6IkpXVCJ9.eyJleHAiOjcyODY1NDQwMCwiaWF0Ijo3Mjg2NTA4MDAsInNjb3BlIjpbXSwic3ViIjoiMTIzNDU2Nzg5MCJ9.Tk19aAqkcSuVd54OHSSX6VOjLk4MFhxoeufiEDGo8U7wtsW6EL3YGFCiWtcMpjrK03aNVUqQwue2BjB8ysqq3NsNvFVWiJFDUZR-4jaRHrz4FALZpb43do95YQFhJHliAnzmAEgbFQY704FTd9PYP9IGuw0EUwq_WOAtIiaKNHG20rPIRvltr_p1t54rDG0Xx_9iGCU-J-GJSWuYV7-XNHsdz0xJqxRAUeaH4Ly5BzjHBX8HSB0VezopZly2sJDlqfZCUBkL80eMvECJWc7g4znN9dPHKDcKclqvFI5sPSdQIQ7zZVeSbTizqXe-KXz9TykVTDOudnY4iRXzNerZ0_rzq7qT253qGoypkM0_N3oidFU0UkSnLgWIyeuw09bFraDyWuYEhYbsDif7qT8tP-w6YaKv0mFZ8BwRKl6yZafR8Ji7UNWhVQ3Qz8rJjAclX4elEFGq0deK7B2Kiwo6U33tNyx2Xi56QRMs6r26S9QoA3fNbA7C2HrFwy3coZxyJAKVCAHcfYOue-u1oersq0vAk_HGXytBrdiz6xL6wbRjNqfrT--I-uq2MfUEsZSh2Xy0SCEUt8IJeX6vt7nGeKqu6AUuKbCpA6CrXRI7K9jShuAsFeyTdKKjJsKCXwZRQp9ZyTmWYXcyXlDHf63I8JXNP2wzPM_3p0CCQ313S_Q

View File

@@ -0,0 +1,93 @@
workflows:
jwt_generate:
enabled: true
trace: true
triggers:
- enabled: true
stepID: 5
steps:
- stepID: 5
kind: function
ref: jwtGenerate
arguments:
- target: scope
type: String
- target: header
value: |-
{
"foo": "bar"
}
type: String
- target: payload
expr: |-
{
"sub": "1234567890",
"iat": int(strftime(date("1993-02-02T06:00:00-05:00"), "%L")),
"exp": int(strftime(modTime(date("1993-02-02T06:00:00-05:00"), "+1h"), "%L"))
}
type: Vars
- target: secret
value: |-
-----BEGIN PRIVATE KEY-----
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
C/p2c759krBsxv/zOxJJsWDEF1AolQI=
-----END PRIVATE KEY-----
type: String
results:
- target: token
expr: token

View File

@@ -0,0 +1,57 @@
workflows:
nested_iterators:
enabled: true
trace: true
triggers: [ { enabled: true, stepID: 10001 } ]
steps:
## LEVEL 1
- stepID: 10001
kind: iterator
ref: loopDo
arguments: [ { target: "while", type: "String", value: "L1 > 0" }]
- stepID: 10002
kind: expressions
arguments: [ { target: "L1", expr: "L1 - 1" } ]
## LEVEL 2
- stepID: 20001
kind: iterator
ref: loopDo
arguments: [ { target: "while", type: "String", value: "L2 > 0" }]
- stepID: 20002
kind: expressions
arguments: [ { target: "L2", expr: "L2 - 1" } ]
- stepID: 20003
kind: break
- stepID: 20009
kind: function
ref: logInfo
arguments: [{ target: "message", expr: '"loop level #2 break; L1:" + L1 + ", L2:" + L2', type: "String" }]
## /LEVEL 2
- stepID: 10009
kind: function
ref: logInfo
arguments: [{ target: "message", expr: '"L1:" + L1 + ", L2:" + L2', type: "String" }]
## /LEVEL 1
paths:
- { parentID: 10001, childID: 10002 }
- { parentID: 10001, childID: 10009 }
- { parentID: 10002, childID: 20001 }
- { parentID: 20001, childID: 20002 }
- { parentID: 20002, childID: 20003 }
- { parentID: 20001, childID: 20009 }

View File

@@ -0,0 +1,23 @@
workflows:
testing:
enabled: true
trace: false
triggers:
- enabled: true
stepID: 10
steps:
- stepID: 10
kind: function
ref: remindersSearch
arguments:
- { target: incTotal, type: Boolean, value: "true" }
results:
- { target: total, expr: total }
- { target: found, expr: "length(reminders)" }
- stepID: 11
kind: termination
paths:
- { parentID: 10, childID: 11 }