Closed
Description
Part of common-workflow-language/common-workflow-language#219 , for post common-workflow-language/common-workflow-language#220
Supersedes common-workflow-language/common-workflow-language#5 (I've gone through its items and added them here).
Our user guide currently follows a Software Carpentry model, that is not ideal for a wider audience. This issue contains an initial brain dump for a new structure, but it will be refined after feedback in meetings and here on GitHub 👍
Table of Contents
- Quick start
- An under 10 minutes intro to CWL, for users who may have no idea what are CWL, cwltool, workflows, etc.
- We can use text from the episodes 1 and 2 from the current User Guide - https://www.commonwl.org/user_guide/01-introduction/index.html & https://www.commonwl.org/user_guide/02-1st-example/index.html
- Mention that we can write
CommandLineTool
orWorkflow
as entry point (not sure if other Processes are allowed too? But I think we should focus on cwltool in this user guide). I remember this was confusing for me at first. - Explain what is a Job Order file. I remember not having a clue when I saw that text the first time.
- Shorter version of https://www.synapse.org/#!Synapse:syn2813589/wiki/401467 ?
- Point that we use JSON and YAML, maybe add a link to docs to clarify some of the syntax gotchas, like
-
- Tutorial inconcistencies common-workflow-language#318- Maybe add the existing episode YAML from the current User Guide - https://www.commonwl.org/user_guide/yaml/index.html
- Prerequisites
- Install cwltool - Highlight major features of cwltool #166
- Install Docker
- Clarify local vs container execution - Clarity in "Running Tools Inside Docker" #119
- Use cwl-runner, explain about it, and the virtualenv's - be explicit about using a new virtualenv with the reference runner #64 & simple explanation in https://www.synapse.org/#!Synapse:syn2813589/wiki/401462 too
- Basic Concepts
- What is CWL, what is an implementation (show or point to a list of implementations), workflow, tool, steps
- Core Concepts
4.1. CommandLineTool- Spaces in commands Add discussion about how command lines work; spaces in options #39
- Arguments (tell the reader the different use cases for arguments and inputs, tell them there is a section about inputs)
4.2. Expressions (maybe not before other concepts?) - External libraries and expressionLib - Advanced CWL expression JavaScript, using external libraries and
expressionLib
#126
4.3. Inputs - We can use the episode 3 from the current User Guide - https://www.commonwl.org/user_guide/03-input/index.html
- Explain its fields, such as default, valueFrom, etc - better document the 'default' and 'valueFrom' fields on WorkflowStepInput common-workflow-language#359
- The episode 9 covers Array Inputs - https://www.commonwl.org/user_guide/09-array-inputs/index.html
- The episode 11 covers Advanced Inputs (records and type unions) - https://www.commonwl.org/user_guide/11-records/index.html
- Exclusive parameters Example for using expressions with exclusive parameters #162
- Optional Inputs work around for "self" based input bindings for optional inputs #44
- Several ways of defining inputs/arguments to tools and workflows - intermediate lesson: workflow design choices and the 7 levels of configuration #33
- The episode 8 of the current User Guide covers it - https://www.commonwl.org/user_guide/08-arguments/index.html
- Using an input output in another input - advanced lesson: adapt the type of an output for a WorkflowStep input #90
- How to use linkMerge - advanced: extended discussion about linkMerge #117 (or maybe move to Advanced?)
- Secondary files - secondaryFiles are undocumented common-workflow-language#270
4.4. Outputs - The episodes 4, 5, and 6 (?) of the current User Guide covers it - https://www.commonwl.org/user_guide/04-output/index.html & https://www.commonwl.org/user_guide/05-stdout/index.html & https://www.commonwl.org/user_guide/06-params/index.html
- The episode 10 of the current User Guide covers Array Outputs - https://www.commonwl.org/user_guide/10-array-outputs/index.html
- Creating files at runtime - build on lesson 14 "Creating Files at Runtime", but for directories #134
4.5. Records - rework Record inputs, dependent and mutually exclusive parameters #386 - Document corner cases & workarounds - document how to reuse custom record types (what to do about inputBindings?) common-workflow-language#241
4.6. Enums - more about enums #155 - Maybe show an example with booleans, pros and cons - document how to model a one-or-the-other parameter #89
4.7. Steps
4.8. Operations - Examples of Operations #218
4.9. ExpressionTool
4.10. Workflows - The current User Guide covers it in the episode 21 - https://www.commonwl.org/user_guide/21-1st-workflow/index.html
- Scatter
- ScatterMethod Explain ScatterMethod #29
- Also in the episode 23 of the current User Guide - https://www.commonwl.org/user_guide/23-scatter-workflow/index.html
- Subworkflows/nested workflows
- Covered in the episode 22 from the current User Guide - https://www.commonwl.org/user_guide/22-nested-workflows/index.html
- Conditionals todos for conditional workflow documentation #191 & add CWL v1.1, v1.2 features #188
- Also in the episode 24 of the current User Guide - https://www.commonwl.org/user_guide/24_conditional-workflow/index.html
4.11. Environment Variables
- Also in the episode 24 of the current User Guide - https://www.commonwl.org/user_guide/24_conditional-workflow/index.html
- Covered by the episode 12 of the current User Guide - https://www.commonwl.org/user_guide/12-env/index.html
4.12. Requirements and Hints - InlineJavascriptRequirement
- Maybe list cases where it is not really necessary? e.g. document in user guide that multiple parameter references and string concatenation are possible without InlineJavascript common-workflow-language#389
- Covered by the episode 13 of the current User Guide - https://www.commonwl.org/user_guide/13-expressions/index.html
- InitialWorkDirRequirement
- Staging Files (a common topic, and appears in questions on discourse/element... maybe it deserves a more prominent location?)
- Writable inputs - advanced file staging: writable inputs #36
- Creating files at runtime, from episode 14 of the current User Guide - https://www.commonwl.org/user_guide/14-runtime/index.html
- There is a whole episode 15 in the current User Guide about it - https://www.commonwl.org/user_guide/15-staging/index.html
- Staging Files (a common topic, and appears in questions on discourse/element... maybe it deserves a more prominent location?)
- DockerRequirement
- Covered in the episode 7 of the current User Guide - https://www.commonwl.org/user_guide/07-containers/index.html
- SchemaDefRequirement and input schemas
- The episode 19 from the current User Guide covers it - https://www.commonwl.org/user_guide/19-custom-types/index.html
- ShellCommandRequirement - Explain ShellCommandRequirement #159
- SoftwareRequirement - From the 20 from the current User Guide - episode https://www.commonwl.org/user_guide/20-software-requirements/index.html
- MultipleInputFeatureRequirement
- Also in episode 24 of the current User Guide - https://www.commonwl.org/user_guide/24_conditional-workflow/index.html
- SubworkflowFeatureRequirement
- Also in episode 22 of the current User Guide - https://www.commonwl.org/user_guide/22-nested-workflows/index.html
- ScatterFeatureRequirement
- Also in episode 23 of the current User Guide - https://www.commonwl.org/user_guide/23-scatter-workflow/index.html
4.13. Advanced Topics
- Also in episode 23 of the current User Guide - https://www.commonwl.org/user_guide/23-scatter-workflow/index.html
- File Formats. Move the episode 16 about File Formats from the current User Guide here? - https://www.commonwl.org/user_guide/16-file-formats/index.html
- Metadata and Authors - from the episode 17 from the current User Guide - https://www.commonwl.org/user_guide/17-metadata/index.html
- Testing and Debugging CWL Workflows
- Parallelism (or another title, showing scatter, independent steps, scatter+pickValue, conditionals, etc) - proper lesson on parallelism #104
- Data creation / manipulation at runtime (for example at specific mounth paths)
- Consume & Produce CWL objects - advanced lesson: teaching scripts how to consume & produce CWL objects directly #32
- Using containers - https://www.synapse.org/#!Synapse:syn2813589/wiki/401462 & clarify on a common question about using non-docker tools, like singularity
- Features offered by other runners (or runner-specific features)
- Using TypeScript for JS Expressions - https://github.com/umccr/cwl-ica/wiki/TypeScript
4.14. Best Practices
- Writing CWL workflows (include existing docs from https://github.com/common-workflow-library/cwl-patterns/blob/main/README.md)
- FAIR best practices with CWL
- Docker best practices with CWL - capture docker+CWL best practices from Denis Yuen et al. common-workflow-language#347
- Add the episode Recommended Practices from the current User Guide here? - https://www.commonwl.org/user_guide/rec-practices/index.html
- How-Tos
- Use VSCode for writing CWL workflows - https://github.com/arvados/arvados-vscode-cwl-training
- Tutorials
- A listing of existing tutorials, in the CWL website, or other repositories/sites
- Develop an Introductory CWL tutorial #160
- Running CWL in Production (on Linux, HPC, with containers, k8s, etc? We can link existing docs)
- rnaseq with CWL - https://github.com/arvados/rnaseq-cwl-training (maybe we could have sections, like bioinformatics+cwl, or use tags, etc?)
- FAQ
- Create a FAQ #6
- Maybe adapt some of these (or move to a workaround?) https://www.synapse.org/#!Synapse:syn2813589/wiki/401464
- A common question is whether users/devs can use singularity or other containers
- Mutually exclusive parameters? arvbox: Pipeline fails with pip/python errors? common-workflow-language#229
- Extras
- Conformance Tests
- Add the episode Miscellaneous from the current User Guide here? - https://www.commonwl.org/user_guide/misc/index.html
Notes, and remember-to's
- Have the logo, and meaning of CWL. Also links to the main website, and to the specification. We must be clear what version of the specification this user guide is talking about (1.2 at the time of writing this)
- Include links to the specification, so users can read the formal definition
- Port as much of what we have as possible, avoiding creating new text unnecessarily
- Use arguments instead of inputBinding when possible - switch from inputBinding to arguments: based syntax #34
- Use cwl-runner - be explicit about using a new virtualenv with the reference runner #64
- Leave docker for later in the docs, start focusing on cwl/cwltool - Re-ordering and splitting the User Guide #141
- How to reference local scripts - write up how to reference a local script #158
- Multiple tools writing to output.txt, or how to rename it? - User Guide: Capturing Standard Output should include example of renaming output file #161
pulling out a single item from an array - pulling out a specific member of an array #184 - Use small containers, and try to use an up to date tag - "Custom Types" & "Specifying Software Requirements" should use a smaller tool #63
- i18n - multi-lingual CWL guide #91
- Explain CWL's objects and general terms, clarify on how JS is used to manipulate inputs/outputs/objects - List of user guide issues #5 (comment)
- Bloom's taxonomy? - Learning objectives should use Bloom's Taxonomy #150 & https://en.wikipedia.org/wiki/Bloom%27s_taxonomy#/media/File:Bloom%E2%80%99s_Taxonomy_Verbs.png
Questions
- Should we document cwltool specific behavior too? cwltool:InplaceUpdateRequirement advanced lesson: inplace editing of existing files #49
Extras
- Either document the process for a new conformance test, or link to the cwl-v1.2 or latest repository's document - advanced lesson: turning a bug report into a CWL conformance test #115
Feel free to send any suggestions, critics, ideas, etc., update this issue, or link pull requests and issues to this one or to the parent placeholder (#219).
-Bruno
Metadata
Metadata
Assignees
Labels
No labels