Question: I'm working on a CWL v1.0 workflow, using the GGR-cwl trimmomatic tool (https://github.com/Duke-GCB/GGR-cwl/blob/master/trimmomatic/trimmomatic.cwl) as one of the steps. That tool is a draft-3 specification one, which I understand is still parsed by `cwltool`.

Here is my current workflow file:

class: Workflow
requirements:
- class: StepInputExpressionRequirement
inputs:
reads1: File
reads2: File
slidingw:
type: string
default: "30"
minl:
type: int
default: 20
outputs:
trimmed_reads:
type: File
outputSource: trim_reads/output_read1_trimmed_file

steps:
trim_reads:
run: { $import: "../../tools/trimmomatic/trimmomatic.cwl" }
in:
input_read1_fastq_file: reads1
input_read2_fastq_file: reads2
slidingwindow: slidingw
minlen: minl
end_mode:
valueFrom: "PE"

out: [output_read1_trimmed_file]

This, however, fails to validate, I *think* because the `$import` results in mixing **draft-3** and **v1.0** CWL. Is there any way to use **draft-3** CWL with **v1.0**?

#### More detail:

The errors are extensive but start as follows:

/cip0/software/x86_64/miniconda-3.19.0/bin/cwltool 1.0.20160714182449
Tool definition failed validation:
Validation error in object file:///net/ceph-mon1.sanbi.ac.za/sanbi/scratch/pvh/cwl/workflows/trim/trim.cwl
Could not validate as `CommandLineTool` because
could not validate field `outputs` because
At position 0
could not validate field `outputSource` because it is not recognized and strict is True, valid fields are: label, secondaryFiles, format, streamable, doc, id, outputBinding, type

missing required field `baseCommand`
could not validate field `steps` because it is not recognized and strict is True, valid fields are: id, inputs, outputs, requirements, hints, label, doc, cwlVersion, class, baseCommand, arguments, stdin, stderr, stdout, successCodes, temporaryFailCodes, permanentFailCodes
Could not validate as `ExpressionTool` because
could not validate field `outputs` because
At position 0
could not validate field `outputSource` because it is not recognized and strict is True, valid fields are: label, secondaryFiles, format, streamable, doc, id, outputBinding, type

missing required field `expression`
could not validate field `steps` because it is not recognized and strict is True, valid fields are: id, inputs, outputs, requirements, hints, label, doc, cwlVersion, class, expression
Could not validate as `Workflow` because
could not validate field `steps` because
the value `[{'id': 'file:///net/ceph-mon1.sanbi.ac.za/sanbi/scratch/pvh/cwl/workflows/trim/trim.cwl#trim_reads',
'in': [{'id': u'file:///net/ceph-mon1.sanbi.ac.za/sanbi/[...]`
is not a valid type in the union, expected one of:
- array of , but
At position 0
could not validate field `run` because
the value `{'arguments': [{'position': 1,
'shellQuote': False,
'valueFrom': '$("-Djava.io.tmpdir="+runtime.tmpdir)'},
{'posi[...]`
is not a valid type in the union, expected one of:
- string, but
the value `{'arguments': [{'position': 1,
'shellQuote': False,
'valueFrom': '$("-Djava.io.tmpdir="+runtime.tmpdir)'},
{'posi[...]` is not string
- CommandLineTool, but
could not validate field `inputs` because
At position 0
could not validate field `description` because it is not recognized and strict is True, valid fields are: label, secondaryFiles, format, streamable, doc, id, inputBinding, default, type

could not validate field `outputs` because
At position 4
could not validate field `description` because it is not recognized and strict is True, valid fields are: label, secondaryFiles, format, streamable, doc, id, outputBinding, type

could not validate field `description` because it is not recognized and strict is True, valid fields are: id, inputs, outputs, requirements, hints, label, doc, cwlVersion, class, baseCommand, arguments, stdin, stderr, stdout, successCodes, temporaryFailCodes, permanentFailCodes

Note the reference to field *description* that is valid in **draft-3** but not **v1.0**. The equivalent **draft-3** workflow seems to be accepted as valid:

cwlVersion: cwl:draft-3
class: Workflow
requirements:
- class: StepInputExpressionRequirement

inputs:
- id: reads1
type: File
- id: reads2
type: File
- id: slidingw
type: string
default: "30"
- id: minl
type: int
default: 20
outputs:
- id: trimmed_reads
type: File
source: "#trim_reads/output_read1_trimmed_file"

steps:
- id: trim_reads
run: { $import: "../../tools/trimmomatic/trimmomatic.cwl" }
inputs:
- id: input_read1_fastq_file
source: "#reads1"
- id: input_read2_fastq_file
source: "#reads2"
- id: slidingwindow
source: "#slidingw"
- id: minlen
source: "#minl"
- id: end_mode
valueFrom: "PE"
outputs:
- id: output_read1_trimmed_file

Answer: The `run: { $import ... }` idiom is from the `draft-2` era. `draft-3` onwards you can just give the path to the CWL tool description.

cwlVersion: v1.0
[...]
steps:
trim_reads:
run: "../../tools/trimmomatic/trimmomatic.cwl"