Skip to content

Commit 41a80e3

Browse files
lijiayongtetron
authored andcommitted
10827 static checker (#321)
* Add static checker for source and sink types * Propagate line numbers so that static checker output has proper source lines. Add checking for missing input parameters and unknown output parameters. * Try to initialize all workflow steps before reporting validation errors. * Print notice when scattering over empty input. * Move early exit for validation after making tool objects to get benefits of static checking.
1 parent d6ef9c0 commit 41a80e3

File tree

8 files changed

+589
-31
lines changed

8 files changed

+589
-31
lines changed

cwltool/main.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,9 +683,6 @@ def main(argsl=None, # type: List[str]
683683
preprocess_only=args.print_pre or args.pack,
684684
fetcher_constructor=fetcher_constructor)
685685

686-
if args.validate:
687-
return 0
688-
689686
if args.pack:
690687
stdout.write(print_pack(document_loader, processobj, uri, metadata))
691688
return 0
@@ -697,6 +694,9 @@ def main(argsl=None, # type: List[str]
697694
tool = make_tool(document_loader, avsc_names, metadata, uri,
698695
makeTool, vars(args))
699696

697+
if args.validate:
698+
return 0
699+
700700
if args.print_rdf:
701701
printrdf(tool, document_loader.ctx, args.rdf_serializer, stdout)
702702
return 0

cwltool/workflow.py

Lines changed: 216 additions & 27 deletions
Large diffs are not rendered by default.

tests/checker_wf/broken-wf.cwl

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
class: Workflow
2+
cwlVersion: v1.0
3+
requirements:
4+
ScatterFeatureRequirement: {}
5+
MultipleInputFeatureRequirement: {}
6+
StepInputExpressionRequirement: {}
7+
inputs:
8+
letters0:
9+
type: [string, int]
10+
default: "a0"
11+
letters1:
12+
type: string[]
13+
default: ["a1", "b1"]
14+
letters2:
15+
type: [string, int]
16+
default: "a2"
17+
letters3:
18+
type: string[]
19+
default: ["a3", "b3"]
20+
letters4:
21+
type: int
22+
default: 4
23+
letters5:
24+
type: string[]
25+
default: ["a5", "b5", "c5"]
26+
27+
outputs:
28+
all:
29+
type: File[]
30+
outputSource: cat/txt
31+
32+
steps:
33+
echo_v:
34+
run: echo.cwl
35+
in:
36+
echo_in: {}
37+
out: [txt]
38+
echo_w:
39+
run: echo.cwl
40+
in:
41+
echo_in: letters0
42+
out: [txt]
43+
echo_x:
44+
run: echo.cwl
45+
scatter: echo_in
46+
in:
47+
echo_in:
48+
source: [letters1, letters2]
49+
linkMerge: merge_nested
50+
out: [txt]
51+
echo_y:
52+
run: echo.cwl
53+
scatter: echo_in
54+
in:
55+
echo_in:
56+
source: [letters3, letters4]
57+
linkMerge: merge_flattened
58+
out: [txt]
59+
echo_z:
60+
run: echo.cwl
61+
in:
62+
echo_in:
63+
source: letters5
64+
valueFrom: "special value parsed in valueFrom"
65+
out: [txt]
66+
cat:
67+
run: cat.cwl
68+
in:
69+
cat_in:
70+
source: [echo_w/txt, echo_x/txt, echo_y/txt, echo_z/txt, letters0]
71+
linkMerge: merge_flattened
72+
out: [txt]

tests/checker_wf/broken-wf2.cwl

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
class: Workflow
2+
cwlVersion: v1.0
3+
requirements:
4+
ScatterFeatureRequirement: {}
5+
MultipleInputFeatureRequirement: {}
6+
StepInputExpressionRequirement: {}
7+
inputs:
8+
letters0:
9+
type: [string, int]
10+
default: "a0"
11+
letters1:
12+
type: string[]
13+
default: ["a1", "b1"]
14+
letters2:
15+
type: [string, int]
16+
default: "a2"
17+
letters3:
18+
type: string[]
19+
default: ["a3", "b3"]
20+
letters4:
21+
type: int
22+
default: 4
23+
letters5:
24+
type: string[]
25+
default: ["a5", "b5", "c5"]
26+
27+
outputs:
28+
all:
29+
type: File[]
30+
outputSource: cat/txt
31+
32+
steps:
33+
echo_v:
34+
run: echo.cwl
35+
in: {}
36+
out: [txt]
37+
echo_w:
38+
run: echo.cwl
39+
in:
40+
echo_in: letters0
41+
out: [txt, other]
42+
echo_x:
43+
run: echo.cwl
44+
scatter: echo_in
45+
in:
46+
echo_in:
47+
source: [letters1, letters2]
48+
linkMerge: merge_nested
49+
out: [txt]
50+
echo_y:
51+
run: echo.cwl
52+
scatter: echo_in
53+
in:
54+
echo_in:
55+
source: [letters3, letters4]
56+
linkMerge: merge_flattened
57+
out: [txt]
58+
echo_z:
59+
run: echo.cwl
60+
in:
61+
echo_in:
62+
source: letters5
63+
valueFrom: "special value parsed in valueFrom"
64+
out: [txt]
65+
cat:
66+
run: cat.cwl
67+
in:
68+
cat_in:
69+
source: [echo_w/txt, echo_x/txt, echo_y/txt, echo_z/txt, letters0]
70+
linkMerge: merge_flattened
71+
out: [txt]

tests/checker_wf/cat.cwl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cwlVersion: v1.0
2+
class: CommandLineTool
3+
baseCommand: cat
4+
inputs:
5+
cat_in:
6+
type: File[]
7+
inputBinding: {}
8+
stdout: all.txt
9+
outputs:
10+
txt:
11+
type: stdout

tests/checker_wf/echo.cwl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
cwlVersion: v1.0
2+
class: CommandLineTool
3+
baseCommand: echo
4+
inputs:
5+
echo_in:
6+
type:
7+
- string
8+
- string[]
9+
inputBinding: {}
10+
stdout: out.txt
11+
outputs:
12+
txt:
13+
type: stdout

tests/checker_wf/functional-wf.cwl

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
class: Workflow
2+
cwlVersion: v1.0
3+
requirements:
4+
ScatterFeatureRequirement: {}
5+
MultipleInputFeatureRequirement: {}
6+
StepInputExpressionRequirement: {}
7+
inputs:
8+
letters0:
9+
type: [string, int]
10+
default: "a0"
11+
letters1:
12+
type: string[]
13+
default: ["a1", "b1"]
14+
letters2:
15+
type: [string, int]
16+
default: "a2"
17+
letters3:
18+
type: string[]
19+
default: ["a3", "b3"]
20+
letters4:
21+
type: string
22+
default: "a4"
23+
letters5:
24+
type: string[]
25+
default: ["a5", "b5", "c5"]
26+
27+
outputs:
28+
all:
29+
type: File
30+
outputSource: cat/txt
31+
32+
steps:
33+
echo_w:
34+
run: echo.cwl
35+
in:
36+
echo_in: letters0
37+
out: [txt]
38+
echo_x:
39+
run: echo.cwl
40+
scatter: echo_in
41+
in:
42+
echo_in:
43+
source: [letters1, letters2]
44+
linkMerge: merge_nested
45+
out: [txt]
46+
echo_y:
47+
run: echo.cwl
48+
scatter: echo_in
49+
in:
50+
echo_in:
51+
source: [letters3, letters4]
52+
linkMerge: merge_flattened
53+
out: [txt]
54+
echo_z:
55+
run: echo.cwl
56+
in:
57+
echo_in:
58+
source: letters5
59+
valueFrom: "special value parsed in valueFrom"
60+
out: [txt]
61+
cat:
62+
run: cat.cwl
63+
in:
64+
cat_in:
65+
source: [echo_w/txt, echo_x/txt, echo_y/txt, echo_z/txt]
66+
linkMerge: merge_flattened
67+
out: [txt]

0 commit comments

Comments
 (0)