@platforma-open/milaboratories.immune-assay-data.workflow 1.8.0 → 1.9.0
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/.turbo/turbo-build.log +3 -1
- package/CHANGELOG.md +18 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/tengo/tpl/analysis.plj.gz +0 -0
- package/dist/tengo/tpl/build-outputs.plj.gz +0 -0
- package/dist/tengo/tpl/check-content-empty.plj.gz +0 -0
- package/dist/tengo/tpl/extract-unique-values.plj.gz +0 -0
- package/dist/tengo/tpl/get-unique-values.plj.gz +0 -0
- package/dist/tengo/tpl/main.plj.gz +0 -0
- package/dist/tengo/tpl/prerun.plj.gz +0 -0
- package/dist/tengo/tpl/process-outputs.plj.gz +0 -0
- package/dist/tengo/tpl/run-alignment.plj.gz +0 -0
- package/package.json +5 -4
- package/src/analysis.tpl.tengo +14 -5
- package/src/check-content-empty.tpl.tengo +2 -14
- package/src/main.tpl.tengo +16 -4
- package/src/prerun.tpl.tengo +17 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/work/immune-assay-data/immune-assay-data/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-open/milaboratories.immune-assay-data.workflow@1.
|
|
3
|
+
> @platforma-open/milaboratories.immune-assay-data.workflow@1.9.0 build /home/runner/work/immune-assay-data/immune-assay-data/workflow
|
|
4
4
|
> rm -rf dist && pl-tengo check && pl-tengo build
|
|
5
5
|
|
|
6
6
|
Processing "src/analysis.tpl.tengo"...
|
|
@@ -9,6 +9,7 @@ Processing "src/check-content-empty.tpl.tengo"...
|
|
|
9
9
|
Processing "src/extract-unique-values.tpl.tengo"...
|
|
10
10
|
Processing "src/get-unique-values.tpl.tengo"...
|
|
11
11
|
Processing "src/main.tpl.tengo"...
|
|
12
|
+
Processing "src/prerun.tpl.tengo"...
|
|
12
13
|
Processing "src/process-outputs.tpl.tengo"...
|
|
13
14
|
Processing "src/run-alignment.tpl.tengo"...
|
|
14
15
|
No syntax errors found.
|
|
@@ -17,6 +18,7 @@ No syntax errors found.
|
|
|
17
18
|
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/check-content-empty.plj.gz
|
|
18
19
|
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/extract-unique-values.plj.gz
|
|
19
20
|
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/get-unique-values.plj.gz
|
|
21
|
+
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/prerun.plj.gz
|
|
20
22
|
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/process-outputs.plj.gz
|
|
21
23
|
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/run-alignment.plj.gz
|
|
22
24
|
info: - writing /home/runner/work/immune-assay-data/immune-assay-data/workflow/dist/tengo/tpl/analysis.plj.gz
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @platforma-open/milaboratories.immune-assay-data.workflow
|
|
2
2
|
|
|
3
|
+
## 1.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 4a7083b: Fix assay file import to support remote (non-local) files
|
|
8
|
+
|
|
9
|
+
Previously, column detection used `lsDriver.getLocalFileContent()` which only works for locally-mounted files. Files from remote storages would silently fail, leaving the block unconfigurable.
|
|
10
|
+
|
|
11
|
+
Now uses a prerun workflow step to import the file and expose it as a blob, and `ReactiveFileContent` in the UI to read it via `blobDriver` — the same pattern used by samples-and-data. This works for both local and remote files.
|
|
12
|
+
|
|
13
|
+
## 1.8.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 36ed105: Improve empty input detection
|
|
18
|
+
- Updated dependencies [36ed105]
|
|
19
|
+
- @platforma-open/milaboratories.immune-assay-data.check-content-empty@1.0.1
|
|
20
|
+
|
|
3
21
|
## 1.8.0
|
|
4
22
|
|
|
5
23
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ module.exports = { Templates: {
|
|
|
3
3
|
'check-content-empty': { type: 'from-file', path: require.resolve('./tengo/tpl/check-content-empty.plj.gz') },
|
|
4
4
|
'extract-unique-values': { type: 'from-file', path: require.resolve('./tengo/tpl/extract-unique-values.plj.gz') },
|
|
5
5
|
'get-unique-values': { type: 'from-file', path: require.resolve('./tengo/tpl/get-unique-values.plj.gz') },
|
|
6
|
+
'prerun': { type: 'from-file', path: require.resolve('./tengo/tpl/prerun.plj.gz') },
|
|
6
7
|
'process-outputs': { type: 'from-file', path: require.resolve('./tengo/tpl/process-outputs.plj.gz') },
|
|
7
8
|
'run-alignment': { type: 'from-file', path: require.resolve('./tengo/tpl/run-alignment.plj.gz') },
|
|
8
9
|
'analysis': { type: 'from-file', path: require.resolve('./tengo/tpl/analysis.plj.gz') },
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
declare type TemplateFromFile = { readonly type: "from-file"; readonly path: string; };
|
|
2
|
-
declare type TplName = "build-outputs" | "check-content-empty" | "extract-unique-values" | "get-unique-values" | "process-outputs" | "run-alignment" | "analysis" | "main";
|
|
2
|
+
declare type TplName = "build-outputs" | "check-content-empty" | "extract-unique-values" | "get-unique-values" | "prerun" | "process-outputs" | "run-alignment" | "analysis" | "main";
|
|
3
3
|
declare const Templates: Record<TplName, TemplateFromFile>;
|
|
4
4
|
export { Templates };
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export const Templates = {
|
|
|
4
4
|
'check-content-empty': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/check-content-empty.plj.gz') },
|
|
5
5
|
'extract-unique-values': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/extract-unique-values.plj.gz') },
|
|
6
6
|
'get-unique-values': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/get-unique-values.plj.gz') },
|
|
7
|
+
'prerun': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/prerun.plj.gz') },
|
|
7
8
|
'process-outputs': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/process-outputs.plj.gz') },
|
|
8
9
|
'run-alignment': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/run-alignment.plj.gz') },
|
|
9
10
|
'analysis': { type: 'from-file', path: resolve(import.meta.dirname, './tengo/tpl/analysis.plj.gz') },
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-open/milaboratories.immune-assay-data.workflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Tengo-based template",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@platforma-sdk/workflow-tengo": "5.
|
|
7
|
+
"@platforma-sdk/workflow-tengo": "5.10.1",
|
|
8
8
|
"@platforma-open/soedinglab.software-mmseqs2": "1.18.3",
|
|
9
|
-
"@platforma-open/milaboratories.immune-assay-data.add-header": "1.1.3",
|
|
10
9
|
"@platforma-open/milaboratories.immune-assay-data.prepare-fasta": "1.1.3",
|
|
11
10
|
"@platforma-open/milaboratories.immune-assay-data.coverage-mode-calc": "1.2.0",
|
|
11
|
+
"@platforma-open/milaboratories.immune-assay-data.add-header": "1.1.3",
|
|
12
12
|
"@platforma-open/milaboratories.immune-assay-data.fasta-to-tsv": "1.1.3",
|
|
13
|
+
"@platforma-open/milaboratories.immune-assay-data.check-content-empty": "1.0.1",
|
|
13
14
|
"@platforma-open/milaboratories.immune-assay-data.xlsx-to-csv": "1.1.0"
|
|
14
15
|
},
|
|
15
16
|
"devDependencies": {
|
|
16
|
-
"@platforma-sdk/tengo-builder": "2.4.
|
|
17
|
+
"@platforma-sdk/tengo-builder": "2.4.30"
|
|
17
18
|
},
|
|
18
19
|
"scripts": {
|
|
19
20
|
"build": "rm -rf dist && pl-tengo check && pl-tengo build",
|
package/src/analysis.tpl.tengo
CHANGED
|
@@ -12,6 +12,7 @@ fastaToTsvSw := assets.importSoftware("@platforma-open/milaboratories.immune-ass
|
|
|
12
12
|
addHeaderSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.add-header:main")
|
|
13
13
|
covModeCalcSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.coverage-mode-calc:main")
|
|
14
14
|
xlsxToCsvSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.xlsx-to-csv:main")
|
|
15
|
+
checkContentEmptySw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.check-content-empty:main")
|
|
15
16
|
|
|
16
17
|
runAlignmentTpl := assets.importTemplate(":run-alignment")
|
|
17
18
|
checkContentEmptyTpl := assets.importTemplate(":check-content-empty")
|
|
@@ -274,16 +275,24 @@ self.body(func(args) {
|
|
|
274
275
|
arg("-o").arg("results_with_header.tsv").
|
|
275
276
|
addFile("results.tsv", mmseqsOutput).
|
|
276
277
|
saveFile("results_with_header.tsv").
|
|
277
|
-
saveFileContent("results_with_header.tsv").
|
|
278
278
|
run()
|
|
279
279
|
|
|
280
280
|
mmseqsResultTsv := addHeaderRun.getFile("results_with_header.tsv")
|
|
281
|
-
mmseqsResultContent := addHeaderRun.getFileContent("results_with_header.tsv")
|
|
282
281
|
|
|
283
|
-
//
|
|
282
|
+
// Check if results are empty (only header line or nothing)
|
|
283
|
+
checkResultsRun := exec.builder().
|
|
284
|
+
software(checkContentEmptySw).
|
|
285
|
+
arg("-i").arg("input.file").
|
|
286
|
+
arg("-n").arg("2"). // Require at least 2 non-empty lines (header + 1 data line)
|
|
287
|
+
addFile("input.file", mmseqsResultTsv).
|
|
288
|
+
saveStdoutContent().
|
|
289
|
+
mem("8GiB").
|
|
290
|
+
cpu(1).
|
|
291
|
+
inLightQueue().
|
|
292
|
+
run()
|
|
293
|
+
|
|
284
294
|
checkResult := render.create(checkContentEmptyTpl, {
|
|
285
|
-
content:
|
|
286
|
-
mode: "headerOnly"
|
|
295
|
+
content: checkResultsRun.getStdoutContent()
|
|
287
296
|
})
|
|
288
297
|
emptyResults := checkResult.output("result")
|
|
289
298
|
|
|
@@ -4,18 +4,6 @@ text := import("text")
|
|
|
4
4
|
self.defineOutputs("result")
|
|
5
5
|
|
|
6
6
|
self.body(func(args) {
|
|
7
|
-
content
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
isEmpty := false
|
|
11
|
-
if mode == "raw" {
|
|
12
|
-
// No header line (e.g. FASTA): empty content means no data
|
|
13
|
-
isEmpty = text.trim_space(content) == ""
|
|
14
|
-
} else if mode == "headerOnly" {
|
|
15
|
-
// File has a header line (e.g. TSV with added header): empty means <= 1 line
|
|
16
|
-
lines := text.split(text.trim_space(content), "\n")
|
|
17
|
-
isEmpty = len(lines) <= 1
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return { result: isEmpty }
|
|
7
|
+
// 'content' is the stdout of the check-software (already a "true"/"false" string)
|
|
8
|
+
return { result: text.trim_space(string(args.content.getData())) == "true" }
|
|
21
9
|
})
|
package/src/main.tpl.tengo
CHANGED
|
@@ -11,11 +11,15 @@ text := import("text")
|
|
|
11
11
|
render := import("@platforma-sdk/workflow-tengo:render")
|
|
12
12
|
strings := import("@platforma-sdk/workflow-tengo:strings")
|
|
13
13
|
|
|
14
|
+
prerunTpl := assets.importTemplate(":prerun")
|
|
14
15
|
analysisTpl := assets.importTemplate(":analysis")
|
|
15
16
|
processOutputsTpl := assets.importTemplate(":process-outputs")
|
|
16
17
|
checkContentEmptyTpl := assets.importTemplate(":check-content-empty")
|
|
17
18
|
|
|
19
|
+
wf.setPreRun(prerunTpl)
|
|
20
|
+
|
|
18
21
|
prepareFastaSw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.prepare-fasta:main")
|
|
22
|
+
checkContentEmptySw := assets.importSoftware("@platforma-open/milaboratories.immune-assay-data.check-content-empty:main")
|
|
19
23
|
|
|
20
24
|
wf.prepare(func(args){
|
|
21
25
|
bundleBuilder := wf.createPBundleBuilder()
|
|
@@ -103,15 +107,23 @@ wf.body(func(args) {
|
|
|
103
107
|
arg("--seq_col").arg("sequence").
|
|
104
108
|
arg("--id_col").arg("seqId").
|
|
105
109
|
saveFile("output.fasta").
|
|
106
|
-
saveFileContent("output.fasta").
|
|
107
110
|
run()
|
|
108
111
|
clonesFasta := clonesFastaRun.getFile("output.fasta")
|
|
109
|
-
clonesFastaContent := clonesFastaRun.getFileContent("output.fasta")
|
|
110
112
|
|
|
111
113
|
// Check if clones are empty before running mmseqs2
|
|
114
|
+
checkClonesRun := exec.builder().
|
|
115
|
+
software(checkContentEmptySw).
|
|
116
|
+
arg("-i").arg("input.file").
|
|
117
|
+
arg("-n").arg("1").
|
|
118
|
+
addFile("input.file", clonesFasta).
|
|
119
|
+
saveStdoutContent().
|
|
120
|
+
mem("8GiB").
|
|
121
|
+
cpu(1).
|
|
122
|
+
inLightQueue().
|
|
123
|
+
run()
|
|
124
|
+
|
|
112
125
|
checkClonesResult := render.create(checkContentEmptyTpl, {
|
|
113
|
-
content:
|
|
114
|
-
mode: "raw"
|
|
126
|
+
content: checkClonesRun.getStdoutContent()
|
|
115
127
|
})
|
|
116
128
|
emptyClonesInput := checkClonesResult.output("result")
|
|
117
129
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
wf := import("@platforma-sdk/workflow-tengo:workflow")
|
|
2
|
+
file := import("@platforma-sdk/workflow-tengo:file")
|
|
3
|
+
|
|
4
|
+
wf.body(func(args) {
|
|
5
|
+
if is_undefined(args.fileHandle) {
|
|
6
|
+
return { outputs: {}, exports: {} }
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
importedFile := file.importFile(args.fileHandle)
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
outputs: {
|
|
13
|
+
assayFile: file.exportFile(importedFile.file)
|
|
14
|
+
},
|
|
15
|
+
exports: {}
|
|
16
|
+
}
|
|
17
|
+
})
|