diff --git a/extensions.yml b/extensions.yml new file mode 100644 index 00000000..a8aef784 --- /dev/null +++ b/extensions.yml @@ -0,0 +1,261 @@ +$base: http://commonwl.org/cwltool# +$namespaces: + cwl: "https://w3id.org/cwl/cwl#" + cwltool: "http://commonwl.org/cwltool#" +$graph: +- $import: https://github.com/common-workflow-language/cwl-v1.2/raw/codegen/CommonWorkflowLanguage.yml + +- name: Secrets + type: record + inVocab: false + extends: cwl:ProcessRequirement + fields: + class: + type: string + doc: "Always 'Secrets'" + jsonldPredicate: + "_id": "@type" + "_type": "@vocab" + secrets: + type: string[] + doc: | + List one or more input parameters that are sensitive (such as passwords) + which will be deliberately obscured from logging. + jsonldPredicate: + "_type": "@id" + refScope: 0 + + +- name: ProcessGenerator + type: record + inVocab: true + extends: cwl:Process + documentRoot: true + fields: + - name: class + jsonldPredicate: + "_id": "@type" + "_type": "@vocab" + type: string + - name: run + type: [string, cwl:Process] + jsonldPredicate: + _id: "cwl:run" + _type: "@id" + subscope: run + doc: | + Specifies the process to run. + +- name: MPIRequirement + type: record + inVocab: false + extends: cwl:ProcessRequirement + doc: | + Indicates that a process requires an MPI runtime. + fields: + - name: class + type: string + doc: "Always 'MPIRequirement'" + jsonldPredicate: + "_id": "@type" + "_type": "@vocab" + - name: processes + type: [int, cwl:Expression] + doc: | + The number of MPI processes to start. If you give a string, + this will be evaluated as a CWL Expression and it must + evaluate to an integer. + +- name: CUDARequirement + type: record + extends: cwl:ProcessRequirement + inVocab: false + doc: | + Require support for NVIDA CUDA (GPU hardware acceleration). + fields: + class: + type: string + doc: 'cwltool:CUDARequirement' + jsonldPredicate: + _id: "@type" + _type: "@vocab" + cudaVersionMin: + type: string + doc: | + Minimum CUDA version to run the software, in X.Y format. This + corresponds to a CUDA SDK release. When running directly on + the host (not in a container) the host must have a compatible + CUDA SDK (matching the exact version, or, starting with CUDA + 11.3, matching major version). When run in a container, the + container image should provide the CUDA runtime, and the host + driver is injected into the container. In this case, because + CUDA drivers are backwards compatible, it is possible to + use an older SDK with a newer driver across major versions. + + See https://docs.nvidia.com/deploy/cuda-compatibility/ for + details. + cudaComputeCapability: + type: + - 'string' + - 'string[]' + doc: | + CUDA hardware capability required to run the software, in X.Y + format. + + * If this is a single value, it defines only the minimum + compute capability. GPUs with higher capability are also + accepted. + + * If it is an array value, then only select GPUs with compute + capabilities that explicitly appear in the array. + cudaDeviceCountMin: + type: ['null', int, cwl:Expression] + default: 1 + doc: | + Minimum number of GPU devices to request. If not specified, + same as `cudaDeviceCountMax`. If neither are specified, + default 1. + cudaDeviceCountMax: + type: ['null', int, cwl:Expression] + doc: | + Maximum number of GPU devices to request. If not specified, + same as `cudaDeviceCountMin`. + +- name: LoopInput + type: record + fields: + id: + type: string? + jsonldPredicate: "@id" + doc: "It must reference the `id` of one of the elements in the `in` field of the step." + loopSource: + doc: | + Specifies one or more of the step output parameters that will + provide input to the loop iterations after the first one (inputs + of the first iteration are the step input parameters). + type: + - string? + - string[]? + jsonldPredicate: + "_type": "@id" + refScope: 1 + linkMerge: + type: cwl:LinkMergeMethod? + jsonldPredicate: "cwl:linkMerge" + default: merge_nested + doc: | + The method to use to merge multiple inbound links into a single array. + If not specified, the default method is "merge_nested". + pickValue: + type: ["null", cwl:PickValueMethod] + jsonldPredicate: "cwl:pickValue" + doc: | + The method to use to choose non-null elements among multiple sources. + default: + type: ["null", Any] + doc: | + The default value for this parameter to use if either there is no + `source` field, or the value produced by the `source` is `null`. The + default must be applied prior to scattering or evaluating `valueFrom`. + jsonldPredicate: + _id: "sld:default" + _container: "@list" + noLinkCheck: true + valueFrom: + type: + - "null" + - string + - cwl:Expression + jsonldPredicate: "cwl:valueFrom" + doc: | + To use valueFrom, [StepInputExpressionRequirement](#StepInputExpressionRequirement) must + be specified in the workflow or workflow step requirements. + + If `valueFrom` is a constant string value, use this as the value for + this input parameter. + + If `valueFrom` is a parameter reference or expression, it must be + evaluated to yield the actual value to be assigned to the input field. + + The `self` value in the parameter reference or expression must be + `null` if there is no `loopSource` field, or the value of the + parameter(s) specified in the `loopSource` field. + + The value of `inputs` in the parameter reference or expression must be + the input object to the previous iteration of the workflow step (or the initial + inputs for the first iteration). + +- name: Loop + type: record + extends: cwl:ProcessRequirement + inVocab: false + doc: | + Prototype to enable workflow-level looping of a step. + + Valid only under `requirements` of a https://www.commonwl.org/v1.2/Workflow.html#WorkflowStep. + Unlike other CWL requirements, Loop requirement is not propagated to inner steps. + + `loopWhen` is an expansion of the CWL v1.2 `when` construct which controls + conditional execution. + + Using `loopWhen` and `when` for the same step will produce an error. + + `loopWhen` is not compatible with `scatter` at this time and combining the + two in the same step will produce an error. + fields: + class: + type: string + doc: 'cwltool:Loop' + jsonldPredicate: + _id: "@type" + _type: "@vocab" + loopWhen: + type: cwl:Expression + doc: | + Only run the step while the expression evaluates to `true`. + If `false` and no iteration has been performed, the step is skipped. + + A skipped step produces a `null` on each output. + + The `inputs` value in the expression must be the step input object. + + It is an error if this expression returns a value other than `true` or `false`. + loop: + type: LoopInput[] + jsonldPredicate: + _id: "cwltool:loop" + mapSubject: id + mapPredicate: loopSource + doc: | + Defines the input parameters of the loop iterations after the first one + (inputs of the first iteration are the step input parameters). If no + `loop` rule is specified for a given step `in` field, the initial value + is kept constant among all iterations. + outputMethod: + type: + type: enum + name: LoopOutputModes + symbols: [ last, all ] + default: last + doc: | + - Specify the desired method of dealing with loop outputs + - Default. Propagates only the last computed element to the subsequent steps when the loop terminates. + - Propagates a single array with all output values to the subsequent steps when the loop terminates. +- name: ShmSize + type: record + extends: cwl:ProcessRequirement + inVocab: false + fields: + class: + type: string + doc: 'cwltool:ShmSize' + jsonldPredicate: + "_id": "@type" + "_type": "@vocab" + shmSize: + type: string + doc: | + Size of /dev/shm. The format is ``. must be greater + than 0. Unit is optional and can be `b` (bytes), `k` (kilobytes), `m` + (megabytes), or `g` (gigabytes). If you omit the unit, the default is + bytes. If you omit the size entirely, the value is `64m`."