@platforma-sdk/workflow-tengo 2.8.4 → 2.8.5
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.
- package/dist/tengo/lib/assets.lib.tengo +6 -0
- package/dist/tengo/lib/constants.lib.tengo +3 -0
- package/dist/tengo/lib/exec.R.lib.tengo +8 -0
- package/dist/tengo/lib/exec.internal.lib.tengo +12 -0
- package/dist/tengo/lib/exec.lib.tengo +67 -0
- package/dist/tengo/lib/exec.package.lib.tengo +9 -0
- package/dist/tengo/lib/exec.python.internal.lib.tengo +1 -0
- package/dist/tengo/lib/exec.python.lib.tengo +8 -0
- package/dist/tengo/lib/exec.runcmd.lib.tengo +19 -0
- package/dist/tengo/lib/exec.runenv.lib.tengo +4 -0
- package/dist/tengo/lib/exec.stream.lib.tengo +4 -0
- package/dist/tengo/lib/file.internal.lib.tengo +7 -0
- package/dist/tengo/lib/file.lib.tengo +3 -0
- package/dist/tengo/lib/ll.lib.tengo +24 -0
- package/dist/tengo/lib/maps.lib.tengo +8 -0
- package/dist/tengo/lib/objects.lib.tengo +2 -0
- package/dist/tengo/lib/oop.lib.tengo +3 -0
- package/dist/tengo/lib/path.lib.tengo +9 -0
- package/dist/tengo/lib/pframes.constants.lib.tengo +3 -0
- package/dist/tengo/lib/pframes.export-pcolumn.lib.tengo +5 -0
- package/dist/tengo/lib/pframes.lib.tengo +5 -0
- package/dist/tengo/lib/pframes.ll.lib.tengo +2 -0
- package/dist/tengo/lib/pframes.pcolumn.lib.tengo +4 -0
- package/dist/tengo/lib/pframes.spec.lib.tengo +26 -0
- package/dist/tengo/lib/pframes.util.lib.tengo +134 -0
- package/dist/tengo/lib/pframes.xsv.lib.tengo +12 -0
- package/dist/tengo/lib/render.lib.tengo +10 -0
- package/dist/tengo/lib/sets.lib.tengo +7 -0
- package/dist/tengo/lib/slices.lib.tengo +11 -0
- package/dist/tengo/lib/smart.lib.tengo +113 -0
- package/dist/tengo/lib/test.lib.tengo +32 -0
- package/dist/tengo/lib/tpl.lib.tengo +68 -0
- package/dist/tengo/lib/tpl.state-await.lib.tengo +14 -0
- package/dist/tengo/lib/tpl.util.lib.tengo +5 -0
- package/dist/tengo/lib/validation.lib.tengo +44 -0
- package/dist/tengo/lib/workdir.lib.tengo +22 -0
- package/dist/tengo/lib/workdir.proc.lib.tengo +18 -0
- package/dist/tengo/lib/workdir.save.lib.tengo +17 -0
- package/dist/tengo/lib/workflow.bobject.lib.tengo +5 -0
- package/dist/tengo/lib/workflow.bquery.lib.tengo +25 -0
- package/dist/tengo/lib/workflow.constants.lib.tengo +1 -0
- package/dist/tengo/lib/workflow.context.lib.tengo +5 -0
- package/dist/tengo/lib/workflow.lib.tengo +39 -0
- package/dist/tengo/tpl/exec.R.create-renv.plj.gz +0 -0
- package/dist/tengo/tpl/exec.exec.plj.gz +0 -0
- package/dist/tengo/tpl/exec.python.create-venv.plj.gz +0 -0
- package/dist/tengo/tpl/exec.python.install-deps.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.aggregate.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.export-multiple-pcolumns.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.export-pframe.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.export-single-pcolumn.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.import-dir.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.map-pframe.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.xsv-export-pframe.plj.gz +0 -0
- package/dist/tengo/tpl/pframes.xsv-import-map.plj.gz +0 -0
- package/dist/tengo/tpl/workdir.save.plj.gz +0 -0
- package/dist/tengo/tpl/workflow.build-ctx.plj.gz +0 -0
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
2
3
|
plapi := import("plapi")
|
|
3
4
|
json := import("json")
|
|
4
5
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
@@ -13,6 +14,7 @@ smart := import("@platforma-sdk/workflow-tengo:smart")
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
|
|
17
|
+
|
|
16
18
|
importTemplate := func(tplName) {
|
|
17
19
|
return smart.resource(plapi.getTemplateId(tplName))
|
|
18
20
|
}
|
|
@@ -27,6 +29,7 @@ return smart.resource(plapi.getTemplateId(tplName))
|
|
|
27
29
|
|
|
28
30
|
|
|
29
31
|
|
|
32
|
+
|
|
30
33
|
importSoftware := func(swName) {
|
|
31
34
|
sw := plapi.getSoftwareInfo(swName)
|
|
32
35
|
return ll.toStrict({
|
|
@@ -47,6 +50,7 @@ descriptor: ll.toStrict(json.decode(sw.descriptor)) // raw sw.json data with sof
|
|
|
47
50
|
|
|
48
51
|
|
|
49
52
|
|
|
53
|
+
|
|
50
54
|
isSoftwareInfo := func(toCheck) {
|
|
51
55
|
if !ll.isMap(toCheck) {
|
|
52
56
|
return false
|
|
@@ -64,6 +68,7 @@ return (ll.fromStrict(toCheck)._type) == "softwareDescriptor"
|
|
|
64
68
|
|
|
65
69
|
|
|
66
70
|
|
|
71
|
+
|
|
67
72
|
importAsset := func(assetName) {
|
|
68
73
|
asset := plapi.getSoftwareInfo(assetName)
|
|
69
74
|
return ll.toStrict({
|
|
@@ -84,6 +89,7 @@ descriptor: ll.toStrict(json.decode(asset.descriptor)) // raw sw.json data with
|
|
|
84
89
|
|
|
85
90
|
|
|
86
91
|
|
|
92
|
+
|
|
87
93
|
isAssetInfo := func(toCheck) {
|
|
88
94
|
if !ll.isMap(toCheck) {
|
|
89
95
|
return false
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
2
3
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
3
4
|
|
|
4
5
|
RTYPE_JSON := { Name: "json/object", Version: "1" }
|
|
5
6
|
|
|
6
7
|
RTYPE_MAP := { Name: "std/map", Version: "1" }
|
|
8
|
+
|
|
7
9
|
RTYPE_MAP_ALT := { Name: "StdMap", Version: "1" }
|
|
8
10
|
RTYPE_MAP_EPH := { Name: "EphStdMap", Version: "1" }
|
|
9
11
|
|
|
@@ -31,6 +33,7 @@ RTYPE_WORKDIR_FILL_RULES := { Name: "WorkdirFill/rules", Version: "1" }
|
|
|
31
33
|
RTYPE_WORKDIR_SAVE := { Name: "WorkdirSave", Version: "1" }
|
|
32
34
|
RTYPE_WORKDIR_SAVE_RULES := { Name: "WorkdirSave/rules", Version: "1" }
|
|
33
35
|
|
|
36
|
+
|
|
34
37
|
RTYPE_JSON_ERROR := { Name: "json/resourceError", Version: "1"}
|
|
35
38
|
|
|
36
39
|
FTYPE_OTW := "OTW" // Generic one-time writable field. The value of this field can be set only once.
|
|
@@ -68,6 +68,7 @@ return self
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
|
|
71
|
+
|
|
71
72
|
cacheMillis: func(millis) {
|
|
72
73
|
ll.assert(is_int(millis) && millis > 0, "exec.R.cacheMillis: cache time must be a number of milliseconds")
|
|
73
74
|
cache = millis * times.millisecond
|
|
@@ -78,6 +79,7 @@ return self
|
|
|
78
79
|
|
|
79
80
|
|
|
80
81
|
|
|
82
|
+
|
|
81
83
|
cacheSeconds: func(seconds) {
|
|
82
84
|
ll.assert(is_int(seconds) && seconds > 0, "exec.R.cacheSeconds: cache time must be a number of seconds")
|
|
83
85
|
cache = seconds * times.second
|
|
@@ -88,6 +90,7 @@ return self
|
|
|
88
90
|
|
|
89
91
|
|
|
90
92
|
|
|
93
|
+
|
|
91
94
|
cacheMinutes: func(minutes) {
|
|
92
95
|
ll.assert(is_int(minutes) && minutes > 0, "exec.R.cacheMinutes: cache time must be a number of minutes")
|
|
93
96
|
cache = minutes * times.minute
|
|
@@ -98,6 +101,7 @@ return self
|
|
|
98
101
|
|
|
99
102
|
|
|
100
103
|
|
|
104
|
+
|
|
101
105
|
cacheHours: func(hours) {
|
|
102
106
|
ll.assert(is_int(hours) && hours > 0, "exec.R.cacheHours: cache time must be a number of hours")
|
|
103
107
|
cache = hours * times.hour
|
|
@@ -108,6 +112,7 @@ return self
|
|
|
108
112
|
|
|
109
113
|
|
|
110
114
|
|
|
115
|
+
|
|
111
116
|
cacheDays: func(days) {
|
|
112
117
|
ll.assert(is_int(days) && days > 0, "exec.R.cacheDays: cache time must be a number of days")
|
|
113
118
|
cache = days * times.hour * 24
|
|
@@ -119,6 +124,7 @@ return self
|
|
|
119
124
|
|
|
120
125
|
|
|
121
126
|
|
|
127
|
+
|
|
122
128
|
cache: func(time) {
|
|
123
129
|
ll.assert(
|
|
124
130
|
is_int(time) && time > times.millisecond,
|
|
@@ -151,6 +157,7 @@ self = ll.toStrict(oop.inherit(tpl, {
|
|
|
151
157
|
|
|
152
158
|
|
|
153
159
|
|
|
160
|
+
|
|
154
161
|
venv: func() {
|
|
155
162
|
return tpl.output(_OUTPUT_RUN_ENV, cache)
|
|
156
163
|
},
|
|
@@ -159,6 +166,7 @@ return tpl.output(_OUTPUT_RUN_ENV, cache)
|
|
|
159
166
|
|
|
160
167
|
|
|
161
168
|
|
|
169
|
+
|
|
162
170
|
R: func() {
|
|
163
171
|
return rPkg
|
|
164
172
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
8
9
|
json := import("json")
|
|
9
10
|
times := import("times")
|
|
@@ -16,6 +17,7 @@ runcmd := import("@platforma-sdk/workflow-tengo:exec.runcmd")
|
|
|
16
17
|
python := import("@platforma-sdk/workflow-tengo:exec.python")
|
|
17
18
|
R := import("@platforma-sdk/workflow-tengo:exec.R")
|
|
18
19
|
|
|
20
|
+
|
|
19
21
|
_ARG_VAR_PKG := "{pkg}" // abs path to software package
|
|
20
22
|
_ARG_VAR_JAVA := "{java}" // abs path to 'java' run environment
|
|
21
23
|
_ARG_VAR_PYTHON := "{python}" // abs path to 'python' run environment
|
|
@@ -26,6 +28,7 @@ _ARG_VAR_R_VENV := "{rVenv}" // abs path to 'R' portable virtual environ
|
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
|
|
31
|
+
|
|
29
32
|
_newArg := func(hasVariables, value) {
|
|
30
33
|
return ll.toStrict({
|
|
31
34
|
hasVars: hasVariables,
|
|
@@ -172,12 +175,15 @@ ll.panic("run environment type %q is not currently supported by workflow-sdk", d
|
|
|
172
175
|
|
|
173
176
|
|
|
174
177
|
|
|
178
|
+
|
|
175
179
|
_binPackageCallOptions := func(operationMode, runOptions, variables, descriptor, softPackage) {
|
|
176
180
|
customPaths := []
|
|
177
181
|
envs := ll.toStrict({})
|
|
178
182
|
args := []
|
|
179
183
|
runEnvType := "binary"
|
|
180
184
|
|
|
185
|
+
|
|
186
|
+
|
|
181
187
|
if (maps.containsKey(descriptor, "runEnv")) {
|
|
182
188
|
runEnvInfo := _loadRunEnvironment(operationMode, descriptor, runOptions.software.name, softPackage)
|
|
183
189
|
|
|
@@ -252,6 +258,9 @@ return _binPackageCallOptions("remote", runOptions, variables, binaryDescriptor,
|
|
|
252
258
|
|
|
253
259
|
binaryRunOptions := func(runOptions) {
|
|
254
260
|
if (is_undefined(ll.fromStrict(runOptions).software)) {
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
|
|
255
264
|
return _directCallOptions(runOptions)
|
|
256
265
|
}
|
|
257
266
|
|
|
@@ -272,15 +281,18 @@ ll.panic("Unable to run software %s v%s: 'binary' execution mode is not enabled
|
|
|
272
281
|
prepareCommandRun := func(wd, opts) {
|
|
273
282
|
runBuilder := runcmd.builder(wd)
|
|
274
283
|
|
|
284
|
+
|
|
275
285
|
for varInfo in opts.variables {
|
|
276
286
|
runBuilder.ref(varInfo.refName, varInfo.reference)
|
|
277
287
|
runBuilder.substitutionRule(varInfo.varName, varInfo.refName)
|
|
278
288
|
}
|
|
279
289
|
|
|
290
|
+
|
|
280
291
|
for p in opts.customPaths {
|
|
281
292
|
runBuilder.addToPath(p.value, p.hasVars)
|
|
282
293
|
}
|
|
283
294
|
|
|
295
|
+
|
|
284
296
|
for name, value in opts.envs {
|
|
285
297
|
if value.hasVars {
|
|
286
298
|
runBuilder.envVar(name, value.value)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
|
|
4
5
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
5
6
|
assets := import("@platforma-sdk/workflow-tengo:assets")
|
|
6
7
|
smart := import("@platforma-sdk/workflow-tengo:smart")
|
|
@@ -24,6 +25,7 @@ _UI_TASKS_QUEUE := "ui-tasks"
|
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
|
|
28
|
+
|
|
27
29
|
builder := func() {
|
|
28
30
|
self := undefined
|
|
29
31
|
|
|
@@ -43,17 +45,27 @@ queue := _HEAVY_QUEUE
|
|
|
43
45
|
cache := 0
|
|
44
46
|
nErrorLines := 200
|
|
45
47
|
|
|
48
|
+
|
|
46
49
|
filesToAdd := {}
|
|
50
|
+
|
|
47
51
|
filesToWrite := {}
|
|
52
|
+
|
|
48
53
|
dirsToCreate := {}
|
|
49
54
|
|
|
55
|
+
|
|
50
56
|
filesToSave := {}
|
|
57
|
+
|
|
51
58
|
filesContentToSave := {}
|
|
59
|
+
|
|
52
60
|
fileSetsToSave := {}
|
|
61
|
+
|
|
53
62
|
fileSetsContentToSave := {}
|
|
63
|
+
|
|
54
64
|
filesToStream := {}
|
|
65
|
+
|
|
55
66
|
wdProcessors := {}
|
|
56
67
|
|
|
68
|
+
|
|
57
69
|
assetInfos := {}
|
|
58
70
|
assetDescriptors := {}
|
|
59
71
|
assetRules := {}
|
|
@@ -71,6 +83,7 @@ self = ll.toStrict({
|
|
|
71
83
|
|
|
72
84
|
|
|
73
85
|
|
|
86
|
+
|
|
74
87
|
cmd: func(commandName) {
|
|
75
88
|
assertEntrypointNotSet()
|
|
76
89
|
|
|
@@ -83,6 +96,7 @@ return self
|
|
|
83
96
|
|
|
84
97
|
|
|
85
98
|
|
|
99
|
+
|
|
86
100
|
software: func(sw) {
|
|
87
101
|
assertEntrypointNotSet()
|
|
88
102
|
ll.assert(assets.isSoftwareInfo(sw),
|
|
@@ -98,6 +112,7 @@ return self
|
|
|
98
112
|
|
|
99
113
|
|
|
100
114
|
|
|
115
|
+
|
|
101
116
|
arg: func(arg) {
|
|
102
117
|
if is_undefined(arg) {
|
|
103
118
|
ll.panic("exec: arg can't be undefined")
|
|
@@ -111,6 +126,7 @@ return self
|
|
|
111
126
|
|
|
112
127
|
|
|
113
128
|
|
|
129
|
+
|
|
114
130
|
env: func(name, value) {
|
|
115
131
|
validation.assertJsonSchema([name, value], ["string"])
|
|
116
132
|
envs[name] = value
|
|
@@ -121,6 +137,7 @@ return self
|
|
|
121
137
|
|
|
122
138
|
|
|
123
139
|
|
|
140
|
+
|
|
124
141
|
envMap: func(envMap) {
|
|
125
142
|
enum.each(envMap, self.env)
|
|
126
143
|
return self
|
|
@@ -131,6 +148,7 @@ return self
|
|
|
131
148
|
|
|
132
149
|
|
|
133
150
|
|
|
151
|
+
|
|
134
152
|
secret: func(secretName, envName) {
|
|
135
153
|
validation.assertJsonSchema([secretName, envName], ["string"])
|
|
136
154
|
secrets[envName] = "{secrets."+secretName+"}"
|
|
@@ -139,6 +157,7 @@ return self
|
|
|
139
157
|
|
|
140
158
|
|
|
141
159
|
|
|
160
|
+
|
|
142
161
|
inHeavyQueue: func() {
|
|
143
162
|
queue = _HEAVY_QUEUE
|
|
144
163
|
return self
|
|
@@ -146,6 +165,7 @@ return self
|
|
|
146
165
|
|
|
147
166
|
|
|
148
167
|
|
|
168
|
+
|
|
149
169
|
inMediumQueue: func() {
|
|
150
170
|
queue = _MEDIUM_QUEUE
|
|
151
171
|
return self
|
|
@@ -153,6 +173,7 @@ return self
|
|
|
153
173
|
|
|
154
174
|
|
|
155
175
|
|
|
176
|
+
|
|
156
177
|
inLightQueue: func() {
|
|
157
178
|
queue = _LIGHT_QUEUE
|
|
158
179
|
return self
|
|
@@ -160,6 +181,7 @@ return self
|
|
|
160
181
|
|
|
161
182
|
|
|
162
183
|
|
|
184
|
+
|
|
163
185
|
inUiQueue: func() {
|
|
164
186
|
queue = _UI_TASKS_QUEUE
|
|
165
187
|
return self
|
|
@@ -170,6 +192,7 @@ return self
|
|
|
170
192
|
|
|
171
193
|
|
|
172
194
|
|
|
195
|
+
|
|
173
196
|
cache: func(time) {
|
|
174
197
|
ll.assert(
|
|
175
198
|
is_int(time),
|
|
@@ -183,6 +206,7 @@ return self
|
|
|
183
206
|
|
|
184
207
|
|
|
185
208
|
|
|
209
|
+
|
|
186
210
|
cacheMillis: func(millis) {
|
|
187
211
|
ll.assert(is_int(millis) && millis > 0, "cache time must be a number of milliseconds")
|
|
188
212
|
cache = millis * times.millisecond
|
|
@@ -193,6 +217,7 @@ return self
|
|
|
193
217
|
|
|
194
218
|
|
|
195
219
|
|
|
220
|
+
|
|
196
221
|
cacheSeconds: func(seconds) {
|
|
197
222
|
ll.assert(is_int(seconds) && seconds > 0, "cache time must be a number of seconds")
|
|
198
223
|
cache = seconds * times.second
|
|
@@ -203,6 +228,7 @@ return self
|
|
|
203
228
|
|
|
204
229
|
|
|
205
230
|
|
|
231
|
+
|
|
206
232
|
cacheMinutes: func(minutes) {
|
|
207
233
|
ll.assert(is_int(minutes) && minutes > 0, "cache time must be a number of minutes")
|
|
208
234
|
cache = minutes * times.minute
|
|
@@ -213,6 +239,7 @@ return self
|
|
|
213
239
|
|
|
214
240
|
|
|
215
241
|
|
|
242
|
+
|
|
216
243
|
cacheHours: func(hours) {
|
|
217
244
|
ll.assert(is_int(hours) && hours > 0, "cache time must be a number of hours")
|
|
218
245
|
cache = hours * times.hour
|
|
@@ -223,6 +250,7 @@ return self
|
|
|
223
250
|
|
|
224
251
|
|
|
225
252
|
|
|
253
|
+
|
|
226
254
|
cacheDays: func(days) {
|
|
227
255
|
ll.assert(is_int(days) && days > 0, "cache time must be a number of days")
|
|
228
256
|
cache = days * times.hour * 24
|
|
@@ -233,6 +261,7 @@ return self
|
|
|
233
261
|
|
|
234
262
|
|
|
235
263
|
|
|
264
|
+
|
|
236
265
|
nErrorLines: func(lines) {
|
|
237
266
|
ll.assert(
|
|
238
267
|
is_int(lines) && lines >= 0,
|
|
@@ -249,11 +278,14 @@ return self
|
|
|
249
278
|
|
|
250
279
|
|
|
251
280
|
|
|
281
|
+
|
|
252
282
|
addAsset: func(asset, destinationDir, ...pathsInArchive) {
|
|
253
283
|
if (len(pathsInArchive) == 1 && is_array(pathsInArchive[0])) {
|
|
284
|
+
|
|
254
285
|
pathsInArchive = pathsInArchive[0]
|
|
255
286
|
}
|
|
256
287
|
if len(pathsInArchive) == 0 {
|
|
288
|
+
|
|
257
289
|
pathsInArchive = []
|
|
258
290
|
}
|
|
259
291
|
|
|
@@ -283,6 +315,7 @@ return self
|
|
|
283
315
|
|
|
284
316
|
|
|
285
317
|
|
|
318
|
+
|
|
286
319
|
cacheAssetMillis: func (asset, millis) {
|
|
287
320
|
ll.assert(assets.isAssetInfo(asset),
|
|
288
321
|
"exec.builder.cacheAssetMillis: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
|
|
@@ -298,6 +331,7 @@ return self
|
|
|
298
331
|
|
|
299
332
|
|
|
300
333
|
|
|
334
|
+
|
|
301
335
|
cacheAssetSeconds: func (asset, seconds) {
|
|
302
336
|
ll.assert(assets.isAssetInfo(asset),
|
|
303
337
|
"exec.builder.cacheAssetSeconds: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
|
|
@@ -313,6 +347,7 @@ return self
|
|
|
313
347
|
|
|
314
348
|
|
|
315
349
|
|
|
350
|
+
|
|
316
351
|
cacheAssetMinutes: func (asset, minutes) {
|
|
317
352
|
ll.assert(assets.isAssetInfo(asset),
|
|
318
353
|
"exec.builder.cacheAssetMinutes: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
|
|
@@ -328,6 +363,7 @@ return self
|
|
|
328
363
|
|
|
329
364
|
|
|
330
365
|
|
|
366
|
+
|
|
331
367
|
cacheAssetHours: func (asset, hours) {
|
|
332
368
|
ll.assert(assets.isAssetInfo(asset),
|
|
333
369
|
"exec.builder.cacheAssetHours: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
|
|
@@ -343,6 +379,7 @@ return self
|
|
|
343
379
|
|
|
344
380
|
|
|
345
381
|
|
|
382
|
+
|
|
346
383
|
cacheAssetDays: func (asset, days) {
|
|
347
384
|
ll.assert(assets.isAssetInfo(asset),
|
|
348
385
|
"exec.builder.cacheAssetHours: <asset> parameter is not an asset info. Provide the value obtained from assets.importAsset() here")
|
|
@@ -360,6 +397,7 @@ return self
|
|
|
360
397
|
|
|
361
398
|
|
|
362
399
|
|
|
400
|
+
|
|
363
401
|
addFile: func(fileName, file) {
|
|
364
402
|
fileName = path.canonize(fileName)
|
|
365
403
|
filesToAdd[fileName] = file
|
|
@@ -370,6 +408,7 @@ return self
|
|
|
370
408
|
|
|
371
409
|
|
|
372
410
|
|
|
411
|
+
|
|
373
412
|
addFiles: func(filesMap) {
|
|
374
413
|
enum.each(filesMap, self.addFile)
|
|
375
414
|
return self
|
|
@@ -381,6 +420,7 @@ return self
|
|
|
381
420
|
|
|
382
421
|
|
|
383
422
|
|
|
423
|
+
|
|
384
424
|
writeFile: func(fileName, data) {
|
|
385
425
|
validation.assertJsonSchema(data, ["or",
|
|
386
426
|
"string",
|
|
@@ -398,6 +438,7 @@ return self
|
|
|
398
438
|
|
|
399
439
|
|
|
400
440
|
|
|
441
|
+
|
|
401
442
|
mkDir: func(dir) {
|
|
402
443
|
dir = path.canonize(dir)
|
|
403
444
|
dirsToCreate = sets.add(dirsToCreate, dir)
|
|
@@ -408,6 +449,7 @@ return self
|
|
|
408
449
|
|
|
409
450
|
|
|
410
451
|
|
|
452
|
+
|
|
411
453
|
saveFile: func(fileName) {
|
|
412
454
|
fileName = path.canonize(fileName)
|
|
413
455
|
sets.add(filesToSave, fileName)
|
|
@@ -418,6 +460,7 @@ return self
|
|
|
418
460
|
|
|
419
461
|
|
|
420
462
|
|
|
463
|
+
|
|
421
464
|
saveFileContent: func(fileName) {
|
|
422
465
|
fileName = path.canonize(fileName)
|
|
423
466
|
sets.add(filesContentToSave, fileName)
|
|
@@ -429,6 +472,7 @@ return self
|
|
|
429
472
|
|
|
430
473
|
|
|
431
474
|
|
|
475
|
+
|
|
432
476
|
saveFileSet: func(name, regex) {
|
|
433
477
|
fileSetsToSave[name] = regex
|
|
434
478
|
return self
|
|
@@ -436,6 +480,7 @@ return self
|
|
|
436
480
|
|
|
437
481
|
|
|
438
482
|
|
|
483
|
+
|
|
439
484
|
processWorkdir: func(name, tpl, tplArgs) {
|
|
440
485
|
wdProcessors[name] = {
|
|
441
486
|
tpl: tpl,
|
|
@@ -449,6 +494,7 @@ return self
|
|
|
449
494
|
|
|
450
495
|
|
|
451
496
|
|
|
497
|
+
|
|
452
498
|
saveFileSetContent: func(name, regex) {
|
|
453
499
|
fileSetsContentToSave[name] = regex
|
|
454
500
|
return self
|
|
@@ -458,6 +504,7 @@ return self
|
|
|
458
504
|
|
|
459
505
|
|
|
460
506
|
|
|
507
|
+
|
|
461
508
|
streamFile: func(fileName) {
|
|
462
509
|
fileName = path.canonize(fileName)
|
|
463
510
|
sets.add(filesToStream, fileName)
|
|
@@ -467,6 +514,7 @@ return self
|
|
|
467
514
|
|
|
468
515
|
|
|
469
516
|
|
|
517
|
+
|
|
470
518
|
stdoutFileName: func(fileName) {
|
|
471
519
|
fileName = path.canonize(fileName)
|
|
472
520
|
stdout = fileName
|
|
@@ -475,6 +523,7 @@ return self
|
|
|
475
523
|
|
|
476
524
|
|
|
477
525
|
|
|
526
|
+
|
|
478
527
|
stderrFileName: func(fileName) {
|
|
479
528
|
fileName = path.canonize(fileName)
|
|
480
529
|
stderr = fileName
|
|
@@ -483,6 +532,7 @@ return self
|
|
|
483
532
|
|
|
484
533
|
|
|
485
534
|
|
|
535
|
+
|
|
486
536
|
saveStdoutContent: func() {
|
|
487
537
|
stdoutToValue = true
|
|
488
538
|
return self
|
|
@@ -490,6 +540,7 @@ return self
|
|
|
490
540
|
|
|
491
541
|
|
|
492
542
|
|
|
543
|
+
|
|
493
544
|
saveStderrContent: func() {
|
|
494
545
|
stderrToValue = true
|
|
495
546
|
return self
|
|
@@ -497,6 +548,7 @@ return self
|
|
|
497
548
|
|
|
498
549
|
|
|
499
550
|
|
|
551
|
+
|
|
500
552
|
printErrStreamToStdout: func() {
|
|
501
553
|
stderrToStdout = true
|
|
502
554
|
return self
|
|
@@ -506,6 +558,7 @@ return self
|
|
|
506
558
|
|
|
507
559
|
|
|
508
560
|
|
|
561
|
+
|
|
509
562
|
run: func() {
|
|
510
563
|
if stderrToStdout {
|
|
511
564
|
stderr = stdout
|
|
@@ -521,6 +574,9 @@ if stderrToValue {
|
|
|
521
574
|
sets.add(filesContentToSave, stderr)
|
|
522
575
|
}
|
|
523
576
|
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
|
|
524
580
|
filesToWriteRefs := maps.mapValues(filesToWrite, func(v) {
|
|
525
581
|
if smart.isReference(v) { return v }
|
|
526
582
|
return smart.createValueResource(constants.RTYPE_BINARY_VALUE, v)
|
|
@@ -573,6 +629,7 @@ self = ll.toStrict(oop.inherit(tpl, {
|
|
|
573
629
|
|
|
574
630
|
|
|
575
631
|
|
|
632
|
+
|
|
576
633
|
getFile: func(fileName) {
|
|
577
634
|
return tpl.output("files", cache).getFutureInputField(fileName)
|
|
578
635
|
},
|
|
@@ -582,6 +639,7 @@ return tpl.output("files", cache).getFutureInputField(fileName)
|
|
|
582
639
|
|
|
583
640
|
|
|
584
641
|
|
|
642
|
+
|
|
585
643
|
getFileContent: func(fileName) {
|
|
586
644
|
return tpl.output("filesContent", cache).getFutureInputField(fileName)
|
|
587
645
|
},
|
|
@@ -591,6 +649,7 @@ return tpl.output("filesContent", cache).getFutureInputField(fileName)
|
|
|
591
649
|
|
|
592
650
|
|
|
593
651
|
|
|
652
|
+
|
|
594
653
|
getFileStream: func(fileName) {
|
|
595
654
|
return tpl.output("fileStreams", cache).getFutureInputField(fileName, true)
|
|
596
655
|
},
|
|
@@ -600,6 +659,7 @@ return tpl.output("fileStreams", cache).getFutureInputField(fileName, true)
|
|
|
600
659
|
|
|
601
660
|
|
|
602
661
|
|
|
662
|
+
|
|
603
663
|
getFileSet: func(fileSetName) {
|
|
604
664
|
return tpl.output("fileSets", cache).getFutureInputField(fileSetName)
|
|
605
665
|
},
|
|
@@ -609,6 +669,7 @@ return tpl.output("fileSets", cache).getFutureInputField(fileSetName)
|
|
|
609
669
|
|
|
610
670
|
|
|
611
671
|
|
|
672
|
+
|
|
612
673
|
getFileSetContent: func(fileSetName) {
|
|
613
674
|
return tpl.output("fileSetsContent", cache).getFutureInputField(fileSetName)
|
|
614
675
|
},
|
|
@@ -619,30 +680,35 @@ return tpl.output("wdProcessors", cache).getFutureInputField(procName)
|
|
|
619
680
|
|
|
620
681
|
|
|
621
682
|
|
|
683
|
+
|
|
622
684
|
getStdoutStream: func() {
|
|
623
685
|
return self.getFileStream(stdout)
|
|
624
686
|
},
|
|
625
687
|
|
|
626
688
|
|
|
627
689
|
|
|
690
|
+
|
|
628
691
|
getStderrStream: func() {
|
|
629
692
|
return self.getFileStream(stderr)
|
|
630
693
|
},
|
|
631
694
|
|
|
632
695
|
|
|
633
696
|
|
|
697
|
+
|
|
634
698
|
getStdoutFile: func() {
|
|
635
699
|
return self.getFile(stdout)
|
|
636
700
|
},
|
|
637
701
|
|
|
638
702
|
|
|
639
703
|
|
|
704
|
+
|
|
640
705
|
getStderrFile: func() {
|
|
641
706
|
return self.getFile(stderr)
|
|
642
707
|
},
|
|
643
708
|
|
|
644
709
|
|
|
645
710
|
|
|
711
|
+
|
|
646
712
|
getStdoutFileContent: func() {
|
|
647
713
|
if stdoutToValue {
|
|
648
714
|
return self.getFileContent(stdout)
|
|
@@ -652,6 +718,7 @@ ll.panic("stdout was not saved as a content")
|
|
|
652
718
|
|
|
653
719
|
|
|
654
720
|
|
|
721
|
+
|
|
655
722
|
getStderrFileContent: func() {
|
|
656
723
|
if stderrToValue {
|
|
657
724
|
return self.getFileContent(stderr)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
|
|
4
5
|
ll := import("@platforma-sdk/workflow-tengo:ll")
|
|
5
6
|
smart := import("@platforma-sdk/workflow-tengo:smart")
|
|
6
7
|
workdir := import("@platforma-sdk/workflow-tengo:workdir")
|
|
@@ -68,6 +69,7 @@ self = oop.inherit(res, {
|
|
|
68
69
|
|
|
69
70
|
|
|
70
71
|
|
|
72
|
+
|
|
71
73
|
archive: func() {
|
|
72
74
|
return res.outputs()[_OUTPUT_ARCHIVE]
|
|
73
75
|
}
|
|
@@ -94,6 +96,7 @@ self = oop.inherit(res, {
|
|
|
94
96
|
|
|
95
97
|
|
|
96
98
|
|
|
99
|
+
|
|
97
100
|
package: func() {
|
|
98
101
|
return res.getField(_OUTPUT_PACKAGE)
|
|
99
102
|
}
|
|
@@ -130,6 +133,7 @@ self = oop.inherit(res, {
|
|
|
130
133
|
|
|
131
134
|
|
|
132
135
|
|
|
136
|
+
|
|
133
137
|
package: func() {
|
|
134
138
|
return res.outputs()[_OUTPUT_PACKAGE]
|
|
135
139
|
}
|
|
@@ -149,6 +153,7 @@ _OUTPUT_WD_OUT := "workdirOut"
|
|
|
149
153
|
|
|
150
154
|
|
|
151
155
|
|
|
156
|
+
|
|
152
157
|
pkgFileLoader := func(pkg) {
|
|
153
158
|
ll.assert(smart.isReference(pkg),
|
|
154
159
|
"package.pkgFileLoader: <pkg> must be reference to installed package. It is usually obtained from package.install().package")
|
|
@@ -224,6 +229,7 @@ progress: wdSave.progress,
|
|
|
224
229
|
|
|
225
230
|
|
|
226
231
|
|
|
232
|
+
|
|
227
233
|
getFile: func(fileName) {
|
|
228
234
|
return wdSave.files.getFutureInputField(fileName)
|
|
229
235
|
},
|
|
@@ -233,6 +239,7 @@ return wdSave.files.getFutureInputField(fileName)
|
|
|
233
239
|
|
|
234
240
|
|
|
235
241
|
|
|
242
|
+
|
|
236
243
|
getFileContent: func(fileName) {
|
|
237
244
|
return wdSave.filesContent.getFutureInputField(fileName)
|
|
238
245
|
}
|
|
@@ -250,6 +257,7 @@ return ll.toStrict(self)
|
|
|
250
257
|
|
|
251
258
|
|
|
252
259
|
|
|
260
|
+
|
|
253
261
|
loadPackageFile := func(pkg, assetPath) {
|
|
254
262
|
assets := pkgFileLoader(pkg).
|
|
255
263
|
saveFile(assetPath).
|
|
@@ -268,6 +276,7 @@ progress: assets.progress
|
|
|
268
276
|
|
|
269
277
|
|
|
270
278
|
|
|
279
|
+
|
|
271
280
|
loadPackageFileContent := func(pkg, assetPath) {
|
|
272
281
|
assets := pkgFileLoader(pkg).
|
|
273
282
|
saveFileContent(assetPath).
|