@@ -53,6 +53,8 @@ $graph:
53
53
54
54
* `coresMin` and `coresMax` of
55
55
[ResourceRequirement](#ResourceRequirement) may now request fractional CPUs.
56
+ * `ramMin`, `ramMax`, `tmpdirMin`, `tmpdirMax`, `outdirMin`, and `outdirMax` of
57
+ [ResourceRequirement](#ResourceRequirement) now accept floating point values.
56
58
* (CommandLineTool)[#CommandLineTool] can now express `intent`
57
59
with an identifier for the type of computational operation.
58
60
* Added conformance tests for order of operations evaluating `secondaryFiles` on input
@@ -68,10 +70,20 @@ $graph:
68
70
* Note that only enum and record types can be typedef-ed
69
71
* Added conformance tests for order of operations evaluating `secondaryFiles` on input
70
72
and ensure that input and output secondaryFiles expressions can return a File object.
71
- * Escaping in " string interpolation": #String_Interpolation has
73
+ * Escaping in [ string interpolation]( #String_Interpolation) has
72
74
been added to the specification along with conformance tests.
75
+ * It is now possible to have an absolute path in the `entryname`
76
+ field in
77
+ [InitialWorkDirRequirement](#InitialWorkDirRequirement) when
78
+ running in a mandatory container. Together with
79
+ `DockerRequirement.dockerOutputDirectory` this it possible to
80
+ control the locations of both input and output files when
81
+ running in containers.
82
+ * Specify default success/fail interpretation of exit codes when not given.
73
83
74
84
See also the [CWL Workflow Description, v1.2.0-dev4 changelog](Workflow.html#Changelog).
85
+ For other changes since CWL v1.0, see the
86
+ [CWL Command Line Tool Description, v1.1 changelog](https://www.commonwl.org/v1.1/CommandLineTool.html#Changelog)
75
87
76
88
## Purpose
77
89
@@ -305,7 +317,7 @@ $graph:
305
317
306
318
If a tool needs to return a large amount of structured data to
307
319
the workflow, loading the output object from `cwl.output.json`
308
- bypasses `outputEval` but is not subject to the 64 KiB
320
+ bypasses `outputEval` and is not subject to the 64 KiB
309
321
`loadContents` limit.
310
322
311
323
- name : CommandLineBindable
@@ -693,20 +705,26 @@ $graph:
693
705
doc : |
694
706
Exit codes that indicate the process completed successfully.
695
707
708
+ If not specified, only exit code 0 is considered success.
709
+
696
710
- name : temporaryFailCodes
697
711
type : int[]?
698
712
doc : |
699
713
Exit codes that indicate the process failed due to a possibly
700
714
temporary condition, where executing the process with the same
701
715
runtime environment and inputs may produce different results.
702
716
717
+ If not specified, no exit codes are considered temporary failure.
718
+
703
719
- name : permanentFailCodes
704
720
type : int[]?
705
721
doc :
706
722
Exit codes that indicate the process failed due to a permanent logic
707
723
error, where executing the process with the same runtime environment and
708
724
same inputs is expected to always fail.
709
725
726
+ If not specified, all exit codes except 0 are considered permanent failure.
727
+
710
728
711
729
- type : record
712
730
name : DockerRequirement
@@ -883,25 +901,46 @@ $graph:
883
901
- name : Dirent
884
902
type : record
885
903
doc : |
886
- Define a file or subdirectory that must be placed in the designated output
887
- directory prior to executing the command line tool. May be the result of
888
- executing an expression, such as building a configuration file from a
889
- template.
904
+ Define a file or subdirectory that must be staged to a particular
905
+ place prior to executing the command line tool. May be the result
906
+ of executing an expression, such as building a configuration file
907
+ from a template.
908
+
909
+ Usually files are staged within the [designated output directory](#Runtime_environment).
910
+ However, under certain circumstances, files may be staged at
911
+ arbitrary locations, see discussion for `entryname`.
912
+
890
913
fields :
891
914
- name : entryname
892
915
type : ["null", string, Expression]
893
916
jsonldPredicate :
894
917
_id : cwl:entryname
895
918
doc : |
896
- The name of the file or subdirectory to create in the output
897
- directory. If `entry` is a File or Directory, the `entryname`
898
- field overrides the value of `basename` of the File or
899
- Directory object.
919
+ The "target" name of the file or subdirectory. If `entry` is
920
+ a File or Directory, the `entryname` field overrides the value
921
+ of `basename` of the File or Directory object.
900
922
901
923
* Required when `entry` evaluates to file contents only
902
924
* Optional when `entry` evaluates to a File or Directory object with a `basename`
903
925
* Invalid when `entry` evaluates to an array of File or Directory objects.
904
926
927
+ If `entryname` is a relative path, it specifies a name within
928
+ the designated output directory. A relative path starting
929
+ with `../` or that resolves to location above the designated output directory is an error.
930
+
931
+ If `entryname` is an absolute path (starts with a slash `/`)
932
+ it is an error unless the following conditions are met:
933
+
934
+ * `DockerRequirement` is present in `requirements`
935
+ * The program is will run inside a software container
936
+ where, from the perspective of the program, the root
937
+ filesystem is not shared with any other user or
938
+ running program.
939
+
940
+ In this case, and the above conditions are met, then
941
+ `entryname` may specify the absolute path within the container
942
+ where the file or directory must be placed.
943
+
905
944
- name : entry
906
945
type : [string, Expression]
907
946
jsonldPredicate :
@@ -956,9 +995,16 @@ $graph:
956
995
type : record
957
996
extends : ProcessRequirement
958
997
doc :
959
- Define a list of files and subdirectories that must be created by the
960
- workflow platform in the designated output directory prior to executing the
961
- command line tool.
998
+ Define a list of files and subdirectories that must be staged by
999
+ the workflow platform prior to executing the command line tool.
1000
+
1001
+ Normally files are staged within the designated output directory.
1002
+ However, when running inside containers, files may be staged at
1003
+ arbitrary locations, see discussion for `Dirent.entryname`.
1004
+ Together with `DockerRequirement.dockerOutputDirectory` this it
1005
+ possible to control the locations of both input and output files
1006
+ when running in containers.
1007
+
962
1008
fields :
963
1009
- name : class
964
1010
type : string
@@ -983,8 +1029,8 @@ $graph:
983
1029
jsonldPredicate :
984
1030
_id : " cwl:listing"
985
1031
doc : |
986
- The list of files or subdirectories that must be placed in the
987
- designated output directory prior to executing the command line tool.
1032
+ The list of files or subdirectories that must be staged prior
1033
+ to executing the command line tool.
988
1034
989
1035
Return type of each expression must validate as `["null",
990
1036
File, Directory, Dirent, {type: array, items: [File,
@@ -1000,12 +1046,13 @@ $graph:
1000
1046
1001
1047
Expressions may return null, in which case they have no effect.
1002
1048
1003
- Files or Directories which are listed in the input parameters and
1004
- appear in the `InitialWorkDirRequirement` listing must have their
1005
- `path` set to their staged location in the designated output directory.
1006
- If the same File or Directory appears more than once in the
1007
- `InitialWorkDirRequirement` listing, the implementation must choose
1008
- exactly one value for `path`; how this value is chosen is undefined.
1049
+ Files or Directories which are listed in the input parameters
1050
+ and appear in the `InitialWorkDirRequirement` listing must
1051
+ have their `path` set to their staged location. If the same
1052
+ File or Directory appears more than once in the
1053
+ `InitialWorkDirRequirement` listing, the implementation must
1054
+ choose exactly one value for `path`; how this value is chosen
1055
+ is undefined.
1009
1056
1010
1057
1011
1058
- name : EnvVarRequirement
@@ -1055,15 +1102,20 @@ $graph:
1055
1102
doc : |
1056
1103
Specify basic hardware resource requirements.
1057
1104
1058
- "min" is the minimum amount of a resource that must be reserved to schedule
1059
- a job. If "min" cannot be satisfied, the job should not be run.
1105
+ "min" is the minimum amount of a resource that must be reserved to
1106
+ schedule a job. If "min" cannot be satisfied, the job should not
1107
+ be run.
1108
+
1109
+ "max" is the maximum amount of a resource that the job shall be
1110
+ allocated. If a node has sufficient resources, multiple jobs may
1111
+ be scheduled on a single node provided each job's "max" resource
1112
+ requirements are met. If a job attempts to exceed its resource
1113
+ allocation, an implementation may deny additional resources, which
1114
+ may result in job failure.
1060
1115
1061
- "max" is the maximum amount of a resource that the job shall be permitted
1062
- to use. If a node has sufficient resources, multiple jobs may be scheduled
1063
- on a single node provided each job's "max" resource requirements are
1064
- met. If a job attempts to exceed its "max" resource allocation, an
1065
- implementation may deny additional resources, which may result in job
1066
- failure.
1116
+ If both "min" and "max" are specified, an implementation may
1117
+ choose to allocate any amount between "min" and "max", with the
1118
+ actual allocation provided in the `runtime` object.
1067
1119
1068
1120
If "min" is specified but "max" is not, then "max" == "min"
1069
1121
If "max" is specified by "min" is not, then "min" == "max".
@@ -1118,28 +1170,58 @@ $graph:
1118
1170
See `coresMin` for discussion about fractional CPU requests.
1119
1171
1120
1172
- name : ramMin
1121
- type : ["null", long, Expression]
1122
- doc : Minimum reserved RAM in mebibytes (2**20) (default is 256)
1173
+ type : ["null", long, float, Expression]
1174
+ doc : |
1175
+ Minimum reserved RAM in mebibytes (2**20) (default is 256)
1176
+
1177
+ May be a fractional value. If so, the actual RAM request must
1178
+ be rounded up to the next whole number. The reported amount of
1179
+ RAM reserved for the process, which is available to
1180
+ expressions on the CommandLineTool as `runtime.ram`, must be a
1181
+ non-zero integer.
1123
1182
1124
1183
- name : ramMax
1125
- type : ["null", long, Expression]
1126
- doc : Maximum reserved RAM in mebibytes (2**20)
1184
+ type : ["null", long, float, Expression]
1185
+ doc : |
1186
+ Maximum reserved RAM in mebibytes (2**20)
1187
+
1188
+ See `ramMin` for discussion about fractional RAM requests.
1127
1189
1128
1190
- name : tmpdirMin
1129
- type : ["null", long, Expression]
1130
- doc : Minimum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20) (default is 1024)
1191
+ type : ["null", long, float, Expression]
1192
+ doc : |
1193
+ Minimum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20) (default is 1024)
1194
+
1195
+ May be a fractional value. If so, the actual storage request
1196
+ must be rounded up to the next whole number. The reported
1197
+ amount of storage reserved for the process, which is available
1198
+ to expressions on the CommandLineTool as `runtime.tmpdirSize`,
1199
+ must be a non-zero integer.
1131
1200
1132
1201
- name : tmpdirMax
1133
- type : ["null", long, Expression]
1134
- doc : Maximum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20)
1202
+ type : ["null", long, float, Expression]
1203
+ doc : |
1204
+ Maximum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20)
1205
+
1206
+ See `tmpdirMin` for discussion about fractional storage requests.
1135
1207
1136
1208
- name : outdirMin
1137
- type : ["null", long, Expression]
1138
- doc : Minimum reserved filesystem based storage for the designated output directory, in mebibytes (2**20) (default is 1024)
1209
+ type : ["null", long, float, Expression]
1210
+ doc : |
1211
+ Minimum reserved filesystem based storage for the designated output directory, in mebibytes (2**20) (default is 1024)
1212
+
1213
+ May be a fractional value. If so, the actual storage request
1214
+ must be rounded up to the next whole number. The reported
1215
+ amount of storage reserved for the process, which is available
1216
+ to expressions on the CommandLineTool as `runtime.outdirSize`,
1217
+ must be a non-zero integer.
1139
1218
1140
1219
- name : outdirMax
1141
- type : ["null", long, Expression]
1142
- doc : Maximum reserved filesystem based storage for the designated output directory, in mebibytes (2**20)
1220
+ type : ["null", long, float, Expression]
1221
+ doc : |
1222
+ Maximum reserved filesystem based storage for the designated output directory, in mebibytes (2**20)
1223
+
1224
+ See `outdirMin` for discussion about fractional storage requests.
1143
1225
1144
1226
1145
1227
- type : record
0 commit comments