Merge branch 'master' into 9998-no-count-items-available
[arvados.git] / doc / user / cwl / cwl-style.html.textile.liquid
index a99c7bc86db8252d0c3c61157b82817806d78323..0debd16a15cfae5a5bad1aa7279494837cdc19de 100644 (file)
@@ -4,11 +4,13 @@ navsection: userguide
 title: Best Practices for writing CWL
 ...
 
-* Build a reusable library of components.  Share tool wrappers and subworkflows between projects.  Make use of and contribute to community resources such as https://github.com/common-workflow-language/workflows and http://dockstore.org
+* To run on Arvados, a workflow should provide a @DockerRequirement@ in the @hints@ section.
+
+* Build a reusable library of components.  Share tool wrappers and subworkflows between projects.  Make use of and contribute to "community maintained workflows and tools":https://github.com/common-workflow-language/workflows and tool registries such as "Dockstore":http://dockstore.org .
 
 * When combining a parameter value with a string, such as adding a filename extension, write @$(inputs.file.basename).ext@ instead of @$(inputs.file.basename + 'ext')@.  The first form is evaluated as a simple text substitution, the second form (using the @+@ operator) is evaluated as an arbitrary Javascript expression and requires that you declare @InlineJavascriptRequirement@.
 
-* Avoid including @InlineJavascriptRequirement@ or @ShellCommandRequirement@ unless you specifically need them.  Don't include them "just in case" because they change the default behavior and may imply extra overhead.
+* Avoid declaring @InlineJavascriptRequirement@ or @ShellCommandRequirement@ unless you specifically need them.  Don't include them "just in case" because they change the default behavior and may imply extra overhead.
 
 * Don't write CWL scripts that access the Arvados SDK.  This is non-portable; a script that access Arvados directly won't work with @cwltool@ or crunch v2.
 
@@ -42,6 +44,8 @@ outputs:
 
 * You can get the designated temporary directory using @$(runtime.tmpdir)@ in your CWL file, or from the @$TMPDIR@ environment variable in your script.
 
+* Similarly, you can get the designated output directory using $(runtime.outdir), or from the @HOME@ environment variable in your script.
+
 * Use @ExpressionTool@ to efficiently rearrange input files between steps of a Workflow.  For example, the following expression accepts a directory containing files paired by @_R1_@ and @_R2_@ and produces an array of Directories containing each pair.
 
 <pre>
@@ -76,7 +80,7 @@ expression: |
   }
 </pre>
 
-* Don't specifying resource requirements in CommandLineTool.  Prefer to specify them in the workflow.  You can provide a default resource requirement in the top level @hints@ section, and individual steps can override it with their own resource requirement.
+* Avoid specifying resource requirements in CommandLineTool.  Prefer to specify them in the workflow.  You can provide a default resource requirement in the top level @hints@ section, and individual steps can override it with their own resource requirement.
 
 <pre>
 cwlVersion: v1.0
@@ -106,7 +110,7 @@ steps:
 
 * Instead of scattering separate steps, prefer to scatter over a subworkflow.
 
-With the following pattern, @step1@ has to complete for all samples to complete before @step2@ can start on any samples.  This means a single long-running sample can prevent the rest of the workflow from moving on:
+With the following pattern, @step1@ has to wait for all samples to complete before @step2@ can start computing on any samples.  This means a single long-running sample can prevent the rest of the workflow from moving on:
 
 <pre>
 cwlVersion: v1.0
@@ -131,7 +135,7 @@ steps:
     run: tool3.cwl
 </pre>
 
-Instead, scatter over a subworkflow.  In this pattern, a sample can proceed from to @step2@ as soon as @step1@ is done, independently of any other samples.
+Instead, scatter over a subworkflow.  In this pattern, a sample can proceed to @step2@ as soon as @step1@ is done, independently of any other samples.
 Example: (note, the subworkflow can also be put in a separate file)
 
 <pre>