Skip to content

Commit 0e11c1f

Browse files
mr-ctetron
authored andcommitted
start development of CWL v1.3.0-dev1
1 parent ae6899d commit 0e11c1f

File tree

6 files changed

+33
-336
lines changed

6 files changed

+33
-336
lines changed

CommandLineTool.yml

Lines changed: 14 additions & 266 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ $graph:
1010
type: documentation
1111
doc:
1212
- |
13-
# Common Workflow Language (CWL) Command Line Tool Description, v1.2
13+
# Common Workflow Language (CWL) Command Line Tool Description, v1.3.0-dev1
1414
1515
This version:
16-
* https://w3id.org/cwl/v1.2/
16+
* https://w3id.org/cwl/v1.3.0-dev1
1717
1818
Latest stable version:
1919
* https://w3id.org/cwl/
@@ -37,277 +37,25 @@ $graph:
3737
- {$include: intro.md}
3838

3939
- |
40-
## Introduction to the CWL Command Line Tool standard v1.2.1
41-
42-
There are no new features nor behavior changes in CWL v1.2.1
43-
as compared to CWL v1.2.0. v1.2.1 fixes only typos, adds clarifications,
44-
and adds additional conformance tests. Some changes to the schema defining
45-
CWL are to aid the auto-generation of libraries for the reading and
46-
writing of CWL documents.
47-
48-
Documents should continue to specify `cwlVersion: v1.2`. However, when
49-
reporting results from running the CWL conformance tests, please do report
50-
all three components; for example "99% of CWL v1.2.0 required tests" or
51-
"100% of CWL v1.2.1 required tests".
52-
53-
See also the [Schema-Salad v1.2.1 changelog](SchemaSalad.html#Changelog_for_v1.2.1)
54-
55-
## Changelog for v1.2.1
56-
* CWL has been assigned an official IANA Media Type of [`application/cwl`](https://www.iana.org/assignments/media-types/application/cwl)
57-
for either JSON or YAML format. For JSON formatted CWL documents, [`application/cwl+json`](https://www.iana.org/assignments/media-types/application/cwl+json)
58-
has also been assigned and can be used. For specifying a YAML formatted
59-
CWL document, one can use `application/cwl+yaml` but that is not an official
60-
IANA media-type yet; as of 2023-07-23 the `+yaml` suffix has yet to be approved.
61-
The above has been documented in the [Syntax](#Syntax) section.
62-
* There is now an unofficial [JSON Schema for CWL documents](https://github.com/common-workflow-language/cwl-v1.2/blob/1.2.1_proposed/json-schema/cwl.yaml),
63-
donated by Francis Charette-Migneault. This schema captures much, but not
64-
all, of the potential complexity of CWL documents. It was created for
65-
the [draft](https://docs.ogc.org/DRAFTS/20-044.html)
66-
[OGC API - Processes - Part 2: Deploy, Replace, Undeploy](http://www.opengis.net/doc/IS/ogcapi-processes-2/1.0)
67-
standard.
68-
To support the testing of this unofficial JSON Schema for CWL, some of
69-
the `should_fail: true` tests have had the label `json_schema_invalid`
70-
added.
71-
* For consistency, all references to `URI`s have been replaced with `IRI`s
72-
(Internationalized Resource Identifiers).
73-
* The [difference between `$()` and `${}`](#Expressions_(Optional)) were
74-
clarified. We now make more explicit that `${...}` evaluates to
75-
`(function() { ... })()`.
76-
* The publisher of this document is now explicitly named; it is the
77-
[Common Workflow Language project](https://www.commonwl.org), a member
78-
project of [Software Freedom Conservancy](https://sfconservancy.org/).
79-
* The [Parameter References](#Parameter_references) section has been updated
80-
to clarify ambiguity on `null` and array `.length`. Three conformance tests to
81-
verify this were added as well (`params_broken_null`, `length_for_non_array`,
82-
`user_defined_length_in_parameter_reference`).
83-
* It is now explicit in the description of the `size` field of a
84-
[`File`](#File) object that `size` is measured in bytes, as was already
85-
stated in the introduction to the `File` object description.
86-
* The concept of "opaque identifier(s)"/"opaque strings" as mentioned in the
87-
[`SecondaryFileSchema`](#SecondaryFileSchema), [Parameter References](#Parameter_references),
88-
and [Runtime Environment](#Runtime_environment) sections is now defined
89-
in the newly added [glossary](#Glossary): they are nonsensical values
90-
that are swapped out with a real value later in the evaluation process.
91-
Workflow and tool expressions **should not** rely on it nor try to parse it.
92-
* The purpose and valid circumstances for using `CommandLineTool.id` has
93-
been made more explicit: It is a unique identifier for that CommandLineTool;
94-
Only useful for `CommandLineTool`s in a `$graph`. This `id` value should
95-
not be exposed to users in graphical or terminal user interfaces.
96-
* How `cwl.output.json` is used to perform [output binding](#Output_binding)
97-
has been clarified, especially with regard to any `path` and `location`
98-
fields for `File` and `Directory` objects referenced within. Two new
99-
conformance tests (`json_output_path_relative`, `json_output_location_relative`)
100-
have been added to verify these clarifications.
101-
* The [BNF grammar description of CWL Parameter References](#Parameter_references)
102-
has been reformatted so that symbols get `code formatting`. `::` is
103-
replaced with `::=` (meaning that the symbol on the left must be
104-
replaced with the expression on the right).
105-
* The example expansion of the [`stdin` shortcut](#stdin) erroneously used
106-
`${ }` instead of `$( )`; this has been corrected.
107-
108-
### Clarifications to the schema in CWL v1.2.1 to aid autogenerated libraries
109-
Many different CWL parsers are autogenerated from the official CWL schema
110-
by using [`schema-salad --codegen`](https://schema-salad.readthedocs.io/en/latest/#codegen-examples).
111-
112-
In CWL v1.2.1 we made many clarifications to the schema to enable faster
113-
parsing; or to produce better results for end users. These changes do not change
114-
the CWL syntax or its meaning; we are just now modeling it better.
115-
116-
* The schema for `Requirement`s has changed to enable faster parsing by
117-
autogenerated libraries. The `class` field is now a static enum with a
118-
single permissible value instead of a generic string (for example:
119-
`class: DockerRequirement` for a `DockerRequirement` hint or requirement.)
120-
This allows for autogenerated CWL parsers to recognize any requirement
121-
immediately instead of having to check for matching field names and
122-
valid values, as was done previously.
123-
* Likewise, the schema for `CommandLineTool`; the `class` field is now a
124-
static enum with a single permissible value (`class: CommandLineTool`)
125-
instead of a generic string.
126-
* The schema for the `CommandLineBinding.position` field now has an explicit
127-
default value of `0`. Previously this was only expression textually in
128-
the description of that field.
129-
* The schema for the `File.streamable` field now has an explicit default
130-
value of `false` to match the textual description.
131-
132-
Note: Other fields like `ResourceRequirement.coresMin`, `.coresMax`,
133-
`.ramMin`, `.ramMax`, `.tmpdirMin`, `.tmpdirMax` have not had defaults
134-
set in the schema so that parsers can discriminate easily between a
135-
value not provided and the default value (`0`).
136-
* Everywhere the schema allows a value of type `long` we also explicitly
137-
allow a value of type `int`: [`File.size`](#File), [`ResourceRequirement`](#ResourceRequirement)`.coresMin`,
138-
`ResourceRequirement.coresMax`, `ResourceRequirement.ramMin`, `ResourceRequirement.ramMax`,
139-
`ResourceRequirement.tmpdirMin`, `ResourceRequirement.tmpdirMax`, `ResourceRequirement.outdirMin`,
140-
`ResourceRequirement.outdirMax`, and [`ToolTimeLimit.timelimt`](#ToolTimeLimit).
141-
142-
By JSON rules this is implicit, but by making it explicit we aid
143-
autogenerated CWL libraries especially in languages such as Java.
144-
* The schema for the `default` field of [CommandInputParameter](#CommandInputParameter)
145-
has been expanded from `Any?` to `["null", File, Directory, Any]`
146-
so that autogenerated CWL libraries will deserialize any 'File' or 'Directory'
147-
objects automatically for the user.
148-
* The schema for the `hints` field of `CommandLineTool` has been expanded
149-
from: `Any[]?` to `["null", { type: array, items: [ ProcessRequirement, Any] } ]`.
150-
This allows autogenerated CWL parsers to deserialize any of the standard
151-
CWL hints instead of forcing the users of those parsers to convert the
152-
unserialized hints to normal objects themselves.
153-
154-
### Updated Conformance Tests for v1.2.1
155-
* Conformance tests are now referred to by their textual identifiers (`id`).
156-
Previously this was the `label` field. Tests without a `label`/`id`
157-
have been given one.
158-
* `tests/loadContents/cwloutput-nolimit.cwl`: Made explicit that
159-
`bigstring` is an additional output as generated by the existing
160-
`mkfilelist.py` script's use of [`cwl.output.json`](#Output_binding).
161-
* The number of different software containers used in the conformance tests
162-
has been reduced to four. See [the list in the CONFORMANCE_TESTS.md instructions](https://github.com/common-workflow-language/cwl-v1.2/blob/1.2.1_proposed/CONFORMANCE_TESTS.md#writing-a-new-conformance-test).
163-
* `tests/secondaryfiles/rename-inputs.cwl` has been simplified by changing
164-
it to reference another input parameter instead of using `self`. The
165-
behavior of processing secondary files patterns in order and being able
166-
to reference earlier ones later is not part of CWL v1.2.
167-
168-
This doesn't exactly replicate the previous behavior, because it introduces
169-
a new input parameter, however it does demonstrate the ability to rename
170-
a file and have it staged as a secondary file without having to use
171-
`InitialWorkDirRequirement`.
172-
* `directory_input_docker` was incorrectly marked as required, it is optional
173-
unless the feature `ShellCommandRequirement` is stated as being supported.
174-
* `glob_outside_outputs_fails` was incorrectly marked as required, it is
175-
optional unless the feature `DockerRequirement` is stated as being supported.
176-
* `stage_file_array` was incorrectly marked as required, it is optional
177-
unless both the features `InlineJavascriptRequirement` and `DockerRequirement`
178-
are stated as being supported.
179-
* `stage_file_array_basename` and `stage_file_array_entryname_overrides` were
180-
both incorrectly marked as required, they are optional unless the feature
181-
`InitialWorkDirRequirement` and `InlineJavascriptRequirement` are both
182-
stated as being supported.
183-
* `optional_numerical_output_returns_0_not_null` was incorrectly marked as
184-
required, it is optional unless `InlineJavascriptRequirement` is stated
185-
as being supported.
186-
* `cwloutput_nolimit` and `loadcontents_limit` were incorrectly marked as
187-
optional; this has been corrected as both are required.
188-
* Made it explicit that if a `CommandLineTool` contains logically chained
189-
commands (e.g. `echo a && echo b`) then the `stdout` File/object must
190-
include the output of every command. The `stdout_chained_commands` mandatory
191-
conformance test was added to verify this.
192-
* `metadata`: The description and content of this test has been updated to
193-
be more focused on the metadata present in the CWL file.
194-
* The final references to Python 2 have been updated to Python 3.
195-
* A few conformance tests had `dockerPull`s without a registry specified.
196-
This has been fixed.
197-
198-
### New Mandatory Conformance Tests for v1.2.1
199-
* `params_broken_null`: Test parameter reference that refers to
200-
`null.something`.
201-
* `length_for_non_array`: Test parameter reference that refers to length
202-
of non-array input.
203-
* `user_defined_length_in_parameter_reference`: Test 'length' in a parameter
204-
reference where it does not refer to length of an array input.
205-
* `directory_literal_with_literal_file_in_subdir_nostdin`: Test non-`stdin`
206-
reference to literal `File` via a nested `Directory` literal.
207-
* `colon_in_paths`: Confirm that colons are tolerated in input paths,
208-
string values, stdout shortcut, and output file & directory names.
209-
* `colon_in_output_path`: Confirm that colons are tolerated in output
210-
directory names.
211-
* `record_with_default`: Confirm that records with defaults are accepted.
212-
* `record_outputeval_nojs`: Use of `outputEval` on a record itself, not
213-
the fields of the record (without javascript). An equivalent test with
214-
`InlineJavascriptRequirement` was added as well: `record_outputeval`.
215-
* `runtime-outdir`: Test use of `$(runtime.outdir)` for `outputBinding.glob`.
216-
* `stdout_chained_commands`: Test that chaining two `echo` calls causes
217-
the workflow runner to emit the combined output to `stdout`. This is to
218-
confirm that the workflow runner will **not** create an expression such as
219-
`echo a && echo b > out.txt`, but instead will produce the correct
220-
`echo a && echo b`, and capture the output correctly.
221-
* `record_order_with_input_bindings`: Test sorting arguments at each level
222-
(`inputBinding` for all levels).
223-
* `json_output_path_relative`: Test support for reading cwl.output.json
224-
where 'path' is relative path in output dir.
225-
* `json_output_location_relative`: Test support for reading cwl.output.json
226-
where 'location' is relative reference to output dir.
227-
* `filename_with_hash_mark`: Test for correct handling of URL-quoting in
228-
a filename to refer to filename containing a hash mark.
229-
* `capture_files`: Test that a type error is raised if directories are
230-
returned by `glob` evaluation when type is `File`.
231-
* `capture_dirs`: Test that a type error is raised if files are returned
232-
by `glob` evaluation when type is `Directory`.
233-
* `capture_files_and_dirs`: Test that both files and directories are
234-
captured by `glob` evaluation when type is `[Directory, File]`.
235-
* `very_big_and_very_floats_nojs`: Confirm that very big and very small
236-
numbers are represented on the command line using decimals, not
237-
scientific notation.
238-
* `paramref_arguments_runtime`: confirm that the `runtime` object is
239-
available to parameter references in arguments.
240-
* `paramref_arguments_self`: confirm that the `self` object is available
241-
and set to `null` in arguments.
242-
* `paramref_arguments_inputs`: confirm that the `inputs` object is
243-
available to parameter references in arguments.
244-
245-
### New Optional Conformance Tests for v1.2.1
246-
247-
#### `InlineJavaScriptRequirement`
248-
* `record_outputeval`: Use of `outputEval` on a record itself, not
249-
the fields of the record.
250-
* `staging-basename`: Use of an `ExpressionTool` to change `basename` of
251-
file, then correctly staging the file using the new name.
252-
* `js-input-record`: A test case for JavaScript with an input record.
253-
* `very_big_and_very_floats`: Confirm that very big and very small
254-
numbers are represented on the command line using decimals, not
255-
scientific notation.
256-
257-
#### `MultipleInputFeatureRequirement`
258-
* `multiple-input-feature-requirement`: `MultipleInputFeatureRequirement` on
259-
workflow outputs.
260-
261-
#### `InitialWorkDirRequirement`
262-
* `iwd-subdir`: Test emitting a subdirectory from the initial working
263-
directory.
40+
## Introduction to the CWL Command Line Tool standard v1.3.0-dev1
26441
265-
## Introduction to the CWL Command Line Tool standard v1.2
42+
This specification represents the latest development version from the
43+
CWL group.
26644
267-
Since the v1.1 release, v1.2 introduces the
268-
following updates to the CWL Command Line Tool standard.
269-
Documents should use `cwlVersion: v1.2` to make use of new
270-
syntax and features introduced in v1.2. Existing v1.1 documents
45+
Documents should use `cwlVersion: v1.3.0-dev1` to make use of new
46+
syntax and features introduced in v1.3.0-dev1. Existing v1.2 documents
27147
should be trivially updatable by changing `cwlVersion`, however
27248
CWL documents that relied on previously undefined or
27349
underspecified behavior may have slightly different behavior in
274-
v1.2.
275-
276-
## Changelog
277-
278-
* `coresMin` and `coresMax` of
279-
[ResourceRequirement](#ResourceRequirement) may now request fractional CPUs.
280-
* `ramMin`, `ramMax`, `tmpdirMin`, `tmpdirMax`, `outdirMin`, and `outdirMax` of
281-
[ResourceRequirement](#ResourceRequirement) now accept floating point values.
282-
* [CommandLineTool](#CommandLineTool) can now express `intent`
283-
with an identifier for the type of computational operation.
284-
* Added conformance tests for order of operations evaluating `secondaryFiles` on input
285-
and ensure that input and output secondaryFiles expressions can return a File object.
286-
* Clarify there are no limits on the size of file literal `contents`.
287-
* When using `loadContents` it now must fail when attempting to
288-
load a file greater than 64 KiB instead of silently truncating
289-
the data.
290-
* Objects, arrays and numbers returned by parameter references
291-
or expressions in `Dirent.entry` that are not a `File` or
292-
`Directory` object (or array of such) are now specified to be
293-
JSON serialized to produce file contents.
294-
* Note that only enum and record types can be typedef-ed
295-
* Added conformance tests for order of operations evaluating `secondaryFiles` on input
296-
and ensure that input and output secondaryFiles expressions can return a File object.
297-
* Escaping in [string interpolation](#String_Interpolation) has
298-
been added to the specification along with conformance tests.
299-
* It is now possible to have an absolute path in the `entryname`
300-
field in
301-
[InitialWorkDirRequirement](#InitialWorkDirRequirement) when
302-
running in a mandatory container. Together with
303-
`DockerRequirement.dockerOutputDirectory` this it possible to
304-
control the locations of both input and output files when
305-
running in containers.
306-
* Specify default success/fail interpretation of exit codes when not given.
307-
308-
See also the [CWL Workflow Description, v1.2 changelog](Workflow.html#Changelog).
50+
v1.3.0-dev1.
51+
52+
## Changelog for v1.3.0-dev1
53+
54+
See also the [CWL Workflow Description, v1.3.0-dev1 changelog](Workflow.html#Changelog).
30955
For other changes since CWL v1.0, see the
31056
[CWL Command Line Tool Description, v1.1 changelog](https://www.commonwl.org/v1.1/CommandLineTool.html#Changelog)
57+
and
58+
[CWL Command Line Tool Description, v1.2.1 changelog](https://www.commonwl.org/v1.2/CommandLineTool.html#Changelog).
31159
31260
## Purpose
31361

Process.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ $graph:
4646
- cwl:v1.2.0-dev4
4747
- cwl:v1.2.0-dev5
4848
- cwl:v1.2
49+
- cwl:v1.3.0-dev1
4950

5051
- name: CWLType
5152
type: enum

README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
Hello!
22

3-
This repo holds the development version of CWL v1.2.1; see https://github.com/common-workflow-language/cwl-v1.2/issues/54 for the plan.
4-
5-
See https://github.com/common-workflow-language/cwl-v1.2/tree/v1.2.0 for the released v1.2 of the Common Workflow Language standards and the history of its development.
6-
7-
You can render this using https://github.com/common-workflow-language/cwl-website/blob/main/website.sh
8-
9-
You may browse the released v1.2 standards online at https://www.commonwl.org/v1.2
3+
This repo holds the v1.3.0-dev0 in-development version of the Common Workflow Language standard and the history of its development.

0 commit comments

Comments
 (0)