...
- Added DIY Docker image instructions. This replaces the Docker image published to Docker Hub, which is now deprecated.
- Added exponential backoff and retry, including attempt to get password from AWS, in ECR docker script template
- Update dxda to 0.6.2 and dxfuse to 1.4.0
- Optimize with bulk file describe during scatter collect, also for files inside arrays and structs.
dxApi 0.13.10
- Updated wdlTools and its dependencies
- Updated dxApi
- WDL workflows allow
headJobOnDemand
for the tasks if this spec is passed throughextras
viarunSpec.headJobOnDemand
.
wdlTools 0.17.17
- ANTLR4 version bump to 4.13.1
cwlScala 0.8.5
- ANTLR4 version bump to 4.13.1
dxApi 0.13.9
- adds
headJobOnDemand
attribute to jobNew call
- changes to allow compiling with
treeTurnaroundTimeThreshold
attribute which facilitates platform to send the email notifications for the root jobs/analyses with a run time (akatreeTurnatoundTime
) exceeding the specified threshold. The attributetreeTurnaroundTimeThreshold
can be specified for tasks and workflows viaextras.json
. This feature is not exclusive for dxCompiler and more information is available in the platform documentation.
- WDL: eliminates inefficient
file-XXX/describe
API calls and replaces them with a bulk describe (i.e `system/findDataObjects)
dxApi 0.13.6
dxFileAccessProtocols 0.5.6
- changes to facilitate the optimizations of number of
file-xxx/describe
API calls upon (de)localization of input/output files
- fixes awscli dependency
- dxda version update to v0.6.0 to address occasional filesystem errors seen in DNAnexus jobs.
- Fixes for the
-pretty
flag in thedescribe
command. - WDL: fix for the tasks wrapped in a frag with optional inputs. Those inputs get forcibly evaluated to explicit
null
and cause inconsistencies with applet inputs. This is fixed and all implicitnull
(None
) values of optionals are remaining implicit.
- Option
delayWorkspaceDestruction
was deprecated and will be ignored when included inextras.json
. To preserve the workspace,--delay-workspace-destruction
flag should be included indx run workflow-XXX
. - Minor fixes.
- dxda update to
v0.5.12
which adds a retry for file download. This fixes the "context canceled" error which was thrown due to thedxda
behavior.
dxApi 0.13.5
- WDL: fixes a runtime error when a scatter over an empty array tries to return an empty array. Error occurred specifically when a task wrapped in a scatter fragment had an array among the outputs. Currently, evaluation of a task over an empty array returns an empty array, and the wrapped task is not executed.
- WDL: fixes a runtime error when a private variable is accessed by index then by key (e.g.
my_var[0].left
). - Minor: error message now suggests to compile with
-archive
flag instead of the deprecated-a
flag when an applet with duplicate name exists. - Minor. WDL: removed obsolete warning messages when compiling with
parameter_meta
section in WDL source.
dxApi 0.13.4
- Fixes handling of
suggestions
field for IO specs when only project ID is specified. Now instead of exception a warning is thrown.
dxda
update tov0.5.10
which adds a retry for file download. This fixes the "context canceled" error which was thrown due to thedxda
behavior.- Added support for new region in Azure London, specifically for OFH projects
wdlTools 0.17.15
- Minor fixes and refactoring
- Initial support for
Directory
outputs in the WDLdevelopment
version. Note that the dxCompiler support for thedevelopment
version of WDL is under development and not yet production-ready. - Minor fixes of type coercion. It includes a fix to the "Value V_String(1.0 GiB) could not be coerced to one of Vector(T_Int)" error when setting
Runtime.memory
as a string in adevelopment
version task, for example:
task {
...
runtime {
memory: "1 GiB"
}
}
wdlTools 0.17.14
- Support for Directory outputs in the WDL
development
version - Minor fixes of type coercion
- Fix for callable recompilation if the Struct composition was changed
wdlTools 0.17.13
- Fix for V_Directory in Struct to Directory input
- CWL: fixed target tool id when overriding docker requirement. File ID of an image provided in
DockerRequirement.dockerLoad
in a CWL workflow is now correctly mapped and detected upon override. - WDL: manifest mode correctly handles non-fully qualified file IDs (updated dxScala: api)
dxApi 0.13.3
- Handling of non-fully qualified file IDs for bulk search/describe. Now for the files provided without the project ID,
the
describe
response will be returned only for current workspace/project. If a file was cloned to other projects, they will be ignored. Non-fully qualified file IDs are not allowed when searching files in other projects. - Regression tests for API calls to platform
dxCommon 0.11.4
- Fix for handling 503 error in dx CLI when API requests are throttled
dxFileAccessProtocols 0.5.5
- Dependency update
wdlTools 0.17.12
- Optional types are preserved when using outputs from the standard library functions without explicit declaration.
- WDL: (WDL >= 1.1) Fix for nested workflows when compiled in the unlocked mode: optional inputs with
None
as default are coerced correctly. - CWL: Fix for merging optional source inputs. If an input is a collection (e.g. an array), where some items are the type of
"null"
, it is correctly merged when MultipleInputFeatureRequirement is specified. - CWL: Fix for making target step argument for cwltool.
- CWL: Added support for "metadata" field for input files in CWL under development (pending inclusion in CWL standard).
- CWL: fix casting cwl types from scatter to scatter.
- CWL: Fix for parameter mapping for output stage of the workflow.
cwlScala 0.8.4
- For duplicated calls - prepends a process name to make the name unique, avoiding exception "two different processes with the same name"
- Added support for "metadata" field for input files in CWL under development (pending inclusion in CWL standard).
- WDL: Fix to native app(let)s instance override with system requirements (cpu/memory/disks) in case of the direct calls and executions within fragments. Only
-instanceTypeSelection static
(default) is supported. If compiled withdynamic
- default instances will be used. - CWL: Partial implementation of task/fragment applets and workflows reuse. Same as in WDL, the
DocContents
attribute, which is the part of source code that defines each executable, is now used for checksum calculation and comparison. However, since the CWL source code is packed as a nested JSON file (instead of standalone blocks in WDL), fragment applets and workflows will also include the code of all underlying processes in theirDocContents
, and they will not be reused if the wrapped applets/subworkflows have changed. - CWL: Fix evaluating scatter inputs during workflow execution. It would no longer raise an error if optional inputs of the underlying task are not declared at the scatter level.
- CWL & WDL: Keep the Docker container after a task finishes running, so users can debug Docker related job failures.
- CWL: Fix to the
pattern
handling fromsecondaryFiles
at workflow level during compilation
wdlTools 0.17.11
- Keep the Docker container after a task finishes running, so users can debug Docker related job failures.
- Runtime object is aware if it was created with default system requirements
dxCommon 0.11.3
- Fix
JsUtils.makeDeterministic
to handleJsArrays
sorting
cwlScala 0.8.3
- Updated cwljava with fixes to secondaryFiles with pattern field when parsing workflow-level parameters and the helper function utils.Uris.shortname to generate enum symbols without namespaces
- Updated cwljava to 1.0
- WDL: Fragments and blocks reuse applets as well, i.e. they are not rebuilt if the code corresponding to them hasn't been updated in the WDL source file. Previously only tasks were reused. Breaking: can break the logic of any App reuse for CWL (even tasks maybe are not reused), because
ApplicationCompiler
andWorkflowCompiler
now look at theDocContents
for checksum, andSourceCode
attribute is now ignored. - CWL:
NetworkAccess
,WorkReuse
andToolTimeLimit
hints are now supported - WDL: Update custom reorg applet (used for custom handling of your workflow outputs) example in documentation.
- WDL: Fix to the order of precedence for the different job reuse settings. The ignoreReuse setting specified in the
extras.json
file should override the dx_ignore_reuse setting specified in theruntime
section of the WDL file. - Updates to the documentation, esp. sections about delay workspace destruction, DNAnexus-specific runtime settings, and outputing DNAnexus files.
- WDL: Fix to configuring network access to tasks (applets). Now you can disable network access to your tasks with the
runSpec.access
setting in theextras.json
file:
{
"defaultTaskDxAttributes" : {
"runSpec": {
"access" : {
"network": []
}
}
}
}
However, if the task needs network access since it uses a Docker image from an external registry (e.g. DockerHub), the setting will be overwritten and full network access will be given to the task. You can prevent this by storing the Docker image as a file in your DNAnexus project.
Note that the setting above is under defaultTaskDxAttributes
, which means it will be the default setting for all tasks; follow these instructions to configure a specific task.
- Fixes CWL default requirement classnames
NetworkAccess
,WorkReuse
andToolTimeLimit
so the corresponding hints can be recognized by dxCompiler (instead of being defined asGenericHints
which are not interpreted during compilation).
TAT.Workflow
has asource
attribute in analogy toTAT.Document
to be used for checksum calculation for App/Job reuse- Fixes evaluation of structs as input parameters of workflow/scatter: hash inputs are coerced from object to struct, and their optional elements are assigned to Null if not specified in job inputs.
- CWL: All tasks and workflows conformance tests now pass
- CWL: Allow a valid CWL identifier that starts with a number or other characters disallowed by the DNAnexus platform
- Valid CWL IDs starting with disallowed characters will be padded with an extra "___" when generating the full encoded name, which will still be a valid CWL ID (as an URI) when decoded
- CWL: Fix to an error with execution of nested workflow step due to incorrect step identifiers. Previously it prevented running of workflows with the
--single-process
flag. - WDL: Minor fixes with directory path handling when passing
-separateOutputs
flag- When a workflow was compiled with the -separateOutputs flag, it would result in an error at runtime saying "InvalidInput: Folder path must start with /."
- WDL: Fix an issue with optional identifiers not found when they were a part of an unused expression
- Fix an issue where a
dbcluster
object stored in a project in which a workflow was run was causing a runtime error, if the workflow was compiled with the-reorg
flag.
- Added
database
anddbcluster
to the list of DNAnexus data objects that are recognized and can be described
- Fix to the issue where
-separateOutputs
option was causing a dx API runtime error due to a missing leading/
in folder path
- Input variables are now evaluated and added to the dependency graph, even when they are optional and not used. They need to be a part of the graph in the case when they are assigned to other (unused) variables for a proper expression evaluation.
- Exception messages of subprocesses are propagated to the exception message of the main process.
- Fixes a bug where inputs to a WDL block were being ignored if they were Optional
- CWL: run input default is now used when not declared in step
- Minor updates to Developing docs
- Minor changes to JSON formatting
- Command file is now echoed to stderr rather than stdout
- Fixes a bug where directory support was broken for WDL; directories in WDL are represented as strings
- Switches from using cwltool to cwlpack
- Fix an issue with default values in CWL
- Adds support for publishing global workflows from dxCompiler-generated WDL workflows; see documentation
- Fix an error message detecting unsupported CWL version
- Update sbt to 1.6.1
- Update dxda to 0.5.9 and dxfuse to 1.0.0
- Breaking
- Parser API has changed substantially, with parameters added, removed, and rearranged
Parser.parse
method is now private - useparseString
orparseFile
instead- Removes all options to modify IDs during parsing
- Handles workflows packed by cwlpack
- Adds
Process.simpleName
method to return simplified process name from ID automatically generated bycwlpack --add-ids
- Adds
Identifiable.copySimplifyIds
method to deep-copy objects with simplified IDs - Adds
CwlEnum.symbolNames
function for getting enum symbols without any namespace prefixes - Adds
coerce
option toEvaluator.evaluate
to actually perform type coercion, rather than just checking that the result is coercible to the specified type - Trims
StringValue
when coercing to primitive types - Fixes
Evaluator.finalizeInputValue
for compound and optional types Evaluator.finalizeInputValue
loads file contents from remote file source if file does not exist locallyCwlType.coerceTo
now returns both the coerced-to type and value- Added
CwlType.CwlGenericRecord
, which is coercible to eitherCwlInputRecord
orCwlOutputRecord
- Fixes evaluation of values with multiple possible types
- Update dxCommon and wdlTools - fixes forwarding of stdout/stderr to job log for commands run in docker
- Improves error message when input to call is missing/null
- Fix
SysUtils.runCommand
forwarding of stderr
- Correctly attaches to docker stdout/stderr
- Fixes issue where task without
runtime
section succeeds even when command block results in a failure code - Forwards command output to the job log rather than buffering it until after command completion
- Updates code to compile with JDK11
- Updates build environment to JDK11, Scala 2.13.7, and SBT 1.5.7
- Adds
SysUtils.runCommand
, which exposes options for how to handle stdin/stdout/stderr. - Adds
Paths.BaseEvalPaths.isLocal
attribute to differentiate local from remote paths. - Breaking removes
SysUtils.execScript
. UserunCommand
with the script path as the argument instead. - Adds validation of path characters to
FileUtils.getUriScheme
- Handles
ResourceNotFoundException
inDxFileSource.exists
- Fixes
stderr()
function - previously it was returning the file for stdout
- Excludes apps from
bundledDepends
- Localizes files declared in WDL task private variables
- Respects runtime definition in native task stub
- Fixes archiving of executables - tags them as "dxCompilerArchived" rather than renaming them
- Fixes error when parsing a field name with multiple
stage-*
prefixes (specifically with stage number >= 10) - Logs full output of command execution
- Adds
PosixPath
class for working with POSIX-style paths - Changes Paths to use
PosixPath
rather thanjava.nio.Path
- Prettifies truncated log messages
- Adds
DxApi.addTags
method - Fixes
DxFindDataObjects
when used withtags
constraint - Handles record results in
DxFindDataObjects
- Adds
systemRequirements
toDxWorkflowStageDesc
- Uses
PosixPath
rather thanjava.nio.Path
for manipulating remote paths
- Indicates whether static instance type selection was used in workflow description annotations and metadata
- Supports cloning workflows between projects, a prerequisite for publishing global workflows
- Fixes dxda manifest downloads for tasks
- Affected by a bug for workflows that include a native platform app via
dxni
. Bug fixed in v2.8.1.
- Uses manifest files for large subjob inputs
- Uses dxda to bulk-download manifest files
- Increases number of retries when downloading single manifest files
- Fixes error when parsing a field name with multiple
stage-*
prefixes - Allows file-to-string coercion for WDL inputs
- Affected by a bug for workflows that include a native platform app via
dxni
. Bug fixed in v2.8.1.
- Enables
retryLimit
to be set forDxApi.uploadFile
andDxApi.downloadFile
- Fixes issue where jobs fail due to out-of-disk error due to excessive logging
- Adds option to specify native app information in
runtime
section (orhints
for WDL 2.0) - Fixes regression where default instance type was overridden when calling a native app
- Affected by a bug for workflows that include a native platform app via
dxni
. Bug fixed in v2.8.1.
- Adds option to
Logger.trace*
to show beginning and/or end of log when limiting trace length
- Fixes
DxApi.resolveApp
to handle app name with with version (e.g.bwa_mem/1.0.0
) - Adds
version
field toDxAppDescribe
- Fixes
eval.Meta.get
to respect override values
- Handles empty scatters in WDL workflows
- Reserved parameters are now placed in the "Reserved for dxCompiler" parameter group (only affects the display of the app/workflow in the UI)
- Enables other metadata (title, description, version, etc.) to be set via extras.json
- When using manifests, passes any expression values from the helper applet to the called applet workflow so they are added to the output manifest
- When an applet calls executables, adds executables to
bundledDepends
to support cloning of workflows - Executor creates hard- rather than soft-links in the input directory, so that linked files are accessible from within containers
- Fixes bug where default input values were not overridden for task inside subworkflow
- Adds support for specifying native app(let) in
runtime
section - Fixes some type conversion bugs related to CWL
Any
type - Affected by a bug for workflows that include a native platform app via
dxni
. Bug fixed in v2.8.1. - Logs entire contents of WDL command at runtime
Warning: we discovered a regression in this release that may cause tasks to fail with out-of-disk errors due to excessive logging. Please update to 2.7.1 or later.
- Fixes
resolveProject
to handlecontainer-
objects - Improves error message when API call fails due to connection error
- Handles error when listing folder during path value finalization
- Fixes infinite loop when calling
wdlTools.eval.Runtime.contains
with "docker" or "container"
- Implements
Directory
support for CWL and for WDL development/2.0 - Implements CWL
secondaryFiles
support - Implements CWL workflow support
- Breaking Change: the inputs folder is now modified to be read-only for non-streaming files (this has always been the case for streaming files). This means that tasks that create files in the inputs folder will no longer work. For example, a task that creates an index file in place for an input BAM file should be changed from:
to
command <<< samtools index ~{mybam} >>>
command <<< mkdir bams ln -s ~{mybam} bams/~{basename(mybam)} samtools index bams/~{basename(mybam)} >>>
- Fixes parsing of placeholder options in draft-2 and 1.0 such that
default
andsep
are no longer treated as reserved words
- Breaking Change:
Sink.linkMerge
is nowOption
al - Introduces
ParserResult
class, which is returned from allParser.parse*
methods - For packed workflows, parses out
$schemas
and$namespaces
- Updates to latest cwljava, which fixes several parsing errors
- Fixes
CwlType.flatten
to correctly handle duplicate types - Treats scatter sources as identifiers
- Automatically renames the
main
process if its name collides with another process - Fixes evalution of compound parameter references
- Set
CommandLineTool.successCodes
toSet(0)
if not specified - Fixes deserialization of optional fields
- Uses the source file name as the process name when processing a
$graph
where the top-level element ID is 'main' - Fixes evaluation for Directory-type values with listings
- Fixes parsing of LoadListingEnum values
- Adds option to
Parser.parseFile
andParser.parseString
to specify that the CWL file is in "packed" form - Updates to latest cwljava, which fixes parsing of anonymous schemas in packed documents
- Correctly handles identifiers with namespaces from imported documents
- Fixes error when trying to finalize a File value without location or path
- Updates dxCommon to 0.2.15-SNAPSHOT
- Uses
FileSource.listing
to determine directory listing during finalization - Updates to dxCommon 0.7.0
- Breaking change: schema types now have
id: Option[Identifier]
rather thanname: Option[String]
- Parser can now handle
$graph
style CWL documents - Adds dependency on
dxCommon
library - Improves finalization of file values
- Fixes coercion of StringValue to CwlEnum
- other bugfixes
- Adds
EvaluatorContext.createInputs
to create anEvaluatorContext
from input values - Performs "finalization" of input values (setting of missing attributes on File and Directory values) when using
EvaluatorContext.createInputs
orEvaluatorContext.createStaticInputs
- Parser bugfixes
- Incorporate
cwljava/39
, which fixes workflow parsing issues - Allow duplicate Requirements/Hints and specify priority rules
- Breaking change: added new
CwlMulti
type and removed all uses ofVector[CwlType]
- Docker image dependencies that are DNAnexus platform files are included in applet's bundledDepends
- Adds
-instanceTypeSelection
compiler option to allow disabling compile-type instance type selection - Adds
-defaultInstanceType
option - Adds support for new London region,
aws:eu-west-2-g
- Fixes
-projectWideReuse
- Fixes evaluation of
outputs
when one declaration depends on another
dxCommon 0.8.0
- Adds
getTargetDir
methods toLocalizationDisambiguator
- Fixes use of
localizationDir
together withforce
inSafeLocalizationDisambiguator
- Adds
FileSource.resolveDirectory
as a separate method fromresolve
dxApi 0.10.0
- Removes price-based selection of instance types in favor of rank-based selection
- Fixes parsing of non-file-type default values that are reference-type links
- Fixes parsing of parameter defaults/suggestions/choices that are of type
Hash
dxFileAccessProtocols 0.5.0
- Implements
resolveDirectory
method
wdlTools 0.17.0
- Breaking Change
Eval.applyMap
is changed toEval.applyAll
and takes aVector
rather thanMap
argument. This is done to ensure the expressions are evaluated in order in case there are dependencies between them. - Fixes parsing of
runtime.returnCodes
- Fixes issue with using
File
declarations in scatter/conditional blocks - Updates dxda to 0.5.7
- Handles empty scatters
- Files that are generated by calling functions in worklfow expressions are now uploaded to the platform
dxni
now makes optional any input parameter for which the native app(let) has a default value- Jobs now fail on out-of-disk errors
- Updated dxda and dxfuse to latest versions
- Updated dxCommon and dxApi dependencies
- Fixes issue where an optional variable inside a conditional could have an inferred type of
T??
, which is illegal and results in a runtime error - Specifies operating system when selecting optimal instance type
- Fixes issue with references between output variables
- Uses an output stage if there is an output parameter with a literal value (DNAnexus output parameters do not support default values)
- Fixes issue where compiling with
-execTree [pretty|json]
did not print the workflow tree - Adds support for specifying app metadata in the hints section in WDL development version
- All compile-time calls to
findDataObjects
now search the context project for any file with no project specified - All runtime
dxAPI.describeFilesBulk
calls, which invoke the platform'ssystem.findDataObjects
, now search in the job/analysis workspace first before searching the source project(s).- The call is used to search and describe input files for the analysis and to search and describe output files during the outputs reorganization of the analysis (in its default implementation, not the customized one). If the files cannot be found in the workspace container they are looked for in the project that qualifies file ID (e.g. in project_A if file_B's path is project_A:file_B)
- Better handles insufficient permissions when requesting instance type price list
dxApi 0.6.0
- Adds option to
DxApi.describeFilesBulk
to search first in the workspace container DxApi.resolveDataObject
now searches in the current workspace and/or project if the project is not specified explicitly. The call is used to find one data object at a time, it's not used in bulk resolution.- Refactors
DxFindDataObjects
to use separateDxFindDataObjectsConstraints
class for specifying constraints - Uses the currently select project ID as the workspace ID when not running in a job
- Better handles insufficient permissions when requesting instance type price list
- Fixes issue with using struct types in workflow outputs
- Fixes issue with array with optional item type
- Fixes regression in WDL code generator where long expressions within placeholders are line-wrapped incorrectly
- An applet that contains multiple scatter or conditional blocks will now have a name that is the concatenation of all the block names
- Fixes multiple issues with WDL code generator
- Fixes issue with referencing struct fields/call outputs in declarations within nested blocks
- Escapes WDL strings in generated code
- Fixes issues with using expressions in placeholder option values
- Fixes error when evaluating array element access for an optional value
- Fixes localization of files in identically named folders in different projects
- Fixes localization of files with the same name in the same folder
- Encodes/decodes
dx://
URIs to handle project/file names with spaces
- Fixes an issue where a file input from an different project than where the workflow is compiled is localized to an invalid path
- File downloads (including Docker images) no longer fail when retried after a previous failure
- Adds the
-waitOnUpload
compiler option, which causes all file uploads to block until they complete - Fixes an issue where tasks with outputs that are collections of files (e.g.
Array[File]
) are compiled with an incorrect default input value - Fixes an issue where using a field of a struct as a call input causes a runtime error, e.g.
struct MyStruct { String s } workflow wf { input { MyStruct my } call mytask { input: s = my.s } }
-imports
now works correctly -import
statements can reference files that are relative to an import directory rather than the main document- Coercion from
Object
toMap
is now allowed - this enables the result ofread_json
to be assigned to a variable of typeMap
- Strings with escape sequences are now processed correctly - to preserve escape sequences in a string, they need to be "double-escaped"
- For example, to pass a regular expression containing a tab character to the second argument of the
sub
function:String s1 = "hello\tBob" String s2 = sub(s1, "\\t", " ")
- Another common example is passing a read group to
bwa mem
. Whether the string is defined in WDL, in a JSON input file, or on the command line, it needs to be "double-escaped":String rg = "@RG\\tID:${sample_name}\\tSM:${sample_name}\\tLB:${sample_name}\\tPL:ILLUMINA" command <<< bwa -R "~{rg}" ... >>>
- For example, to pass a regular expression containing a tab character to the second argument of the
- Fixes an issue where indentation is stripped out of some commands
- The default reorg applet now polls the analysis until it is fully updated before proceeding. For custom reorg applets, see the updated code in the example.
- Fixes an issue with nested scatters that reference private variables from outer scopes, e.g.
workflow wf { input { Array[String] samples Array[File] files } scatter (i in range(length(samples))) { scatter (j in range(length(files))) { call mytask { input: sample = samples[i], file = files[j] } } } }
- Fixes AWS ECR issues: bundles AWS CLI with executor rather than installing at runtime
- Adds
-useManifests
option to generate applets and workflows whose inputs and outputs are manifest files - Fixes issue with using both streaming and non-streaming file inputs in the same task
- Fixes issue with scatter as the first element of a workflow
- Updates to wdlTools 0.12.7, which provides compatibility for some non-complaint syntax allowed by Cromwell
- Fixes
-separateOutputs
for scatter jobs
- Fixes issue with call arguments that access fields of private declarations
- Fixes issue with passing null to optional call parameters
- Fixes common applet naming issue with complex nested workflows
- Experimental: * adds
-useManifests
option to generate applets and workflows whose inputs and outputs are manifest files
- Adds
-separateOutputs
option to store output from each call in a separate folder - Fixes issue with referencing optional variables in the command block
- Ignores default values from native app stubs that can cause errors during compilation
- Fix: native tasks now use instance type from native app/let, not wrapper task
- DxNI handles native app(let)s with optional non-file object inputs
- Sevaral additions/changes to extras.json:
- Adds support for Amazon ECR repositories
- Adds support for configuring the chunk size for scatters (how many scatter jobs run concurrently)
- All top-level keys are now camel-case (old-style names are still recognized)
- Adds support for WDL v1.1
- Fixes errors due to expression evaluator not handling values wrapped in V_Optional
- Fixes errors related to compound references
- Updated wdlTools 0.12.3. This update enforces uniqueness of variable names within the same scope
- Avoids unnecessarily generating sub-workflow output applets
- Fixes issue with task command blocks that begin with a placeholder
- Upgraded dxfuse to 0.24.0
- Update CWL parser to fix compilation of WDL tools with imports
- Add CWL tool compilance tests to integration test suite
- Fixes a bug where structs were out of order in generated code. This bug was due to an unnecessary conversion of a Vector to Map in CodeGenerator, which disordered the items.
- Fixes an issue with resolving nested field references. There were two issues here: i. Unnecessarily including outputs that are direct pass-throughs of inputs in the closure when determining the inputs to an Output stage. ii. A bug in the resolution of deeply nested field references in wdlTools.eval.Eval that is fixed in 0.11.18.
- Added an implementation of the manifest format for WDL.
- Update wdlTools to 0.12.1, dxCommon to 0.2.5, dxApi to 0.1.8, cwlScala to 0.3.4
- Implement translator and executor for CWL (tools only)
- Fix map keys and values being out of order
- Fix to EvalException: identifier not found
- Fix to passing non-optional empty arrays
- Update and fix documentation and WDL examples
- Upgrade dxfuse to 0.23.3, which now mounts in a read-only mode by default
A summary of changes in the 2.0.0 version of dxCompiler comparing to the dxWDL version 1.47.2 (after which the first 2.0.0-rc version was introduced):
User-facing changes:
- Changed the name and all references from dxWDL to dxCompiler, dxCompiler-*.jar is now used to compile an application or a workflow
- Replaced Cromwell WOM (parser, type checker and evaluator) with wdlTools, a library maintained by DNAnexus
- Added support for per-workflow and per-scatter chunk size settings to extras.json
- Added
streamFiles
compile option - Updated the mechanism of comparing instance types to select the cheapest one for execution
- Improved file resolving and caching
- Optimized bulk description of files by replacing
system/describeDataObjects
withsystem/findDataObjects
API call and scoping file search to projects - Increased file name disambiguation directory size limit to 5000
- Increased number of retries for the DNAnexus API requests to 10
Development and codebase changes:
- Reorganized dxCompiler code into subprojects
- core: shared code between front-end and back-end
- compiler: the front-end
- executorCommon: shared code between executors
- executorWdl: the WDL executor
- executorCwl: the CWL executor
- Separated the compiler from executor packages
- Moved API code to a separate dxApi library
- Moved DxFileAccessProtocol to a separate protocols library
- Moved parts of the code to a separate dxCommon library
- Moved WDL type serialization code to wdlTools
- Added archive format and implemented UDFs (user-defined functions) for archiving and unarchiving inputs
- Changed the way the applet_resources folder is used: common binaries are stored in sub-folders by version, each executor is built in its own sub-folder
- Replaced Travis with Github Actions for unit and integration testing
- Reorganizes dxCompiler code into subprojects, splits codebase into 5 subprojects:
- core: shared code between front-end and back-end
- compiler: the front-end
- executorCommon: shared code between executors
- executorWdl: the WDL executor
- executorCwl: the CWL executor
- A few classes were moved into different packages to clear up invalid dependencies (e.g. code in core depending on a class in compiler)
- Changes (almost) all references from dxWDL to dxCompiler
- Updates build and test scripts to handle the new layout
- Changes the way the applet_resources folder is used: common binaries are stored in sub-folders by version, each executor is built in its own sub-folder
- Updates to latest wdlTools (0.11.8)
- Adds archive format
- Implements udfs for archive and unarchive
- Updates to dxApi 0.1.6 - fixes parsing of DxFindDataObjects workflow results
- Fixes errors encountered for repeated compilation
- Skips epilog if there are no applet outputs
- Fixes conversion of Map schema to WDL Map type - unwrap key and value array types
- Fixes comment parsing bug in WDL v2
- Upgrades wdlTools to 0.11.0
- Fixes the issue with type-checking struct-typed objects
- Adds hooks for user-defined functions, which is needed for the new archive/unarchive operations that will be added
- Uses file name when creating names for scatter jobs
- Uses dnanexus-executable.json to get type information about applet input/output parameters, and uses it to type-check the actual inputs/outputs. Ignores hash types, which might be JSON objects or schemas
- Adds
streamFiles
compile option - Moves API code to dxApi library
- Moves DxFileAccessProtocol to separate protocols library
- Moves WDL type serialization code to wdlTools
- Makes array type-checking less strict (to coerce between empty and non-empty array types)
- Upgrades wdlTools to 0.10.5
- Adds dxCommon dependency
- Sets either a default or null value for missing optional block inputs, and throws an exception if there are any missing required block inputs
- Addresses the situation where a call input references a field of the scatter variable
- Updates the mechanism of comparing instance types to select the cheapest one for execution
- Fixes to the "x appears with two different callable definitions" compilation error
- Increases disambiguation dir limit to 5000
- Simplifies job names
- Upgrade wdlTools to 0.6.1
- Upgrade dxda to 0.5.4
- Increase number of API retries to 10
- Fix to the "x appears with two different callable definitions" compilation error
- Add missing required fields to findXXX/describe
- Fix name regexp in DxFindDataObjects
- Additional fixes and improvements
- Major code reorganization to separate the compiler from executor
- Upgrade of dxda to v0.5.4 and dxfuse - to v0.22.4
- Mostly internal changes and code re-organization, in preparation for adding CWL support
- Replaced WOM with
wdlTools
- TODO:
- Publish wdlTools to MavenCentral and update
build.sbt
- Map
parameter_meta
output parameters, remove note in ExpertOptions - Update
Internals.md
- Publish wdlTools to MavenCentral and update
- Replaced Travis with Github Actions for unit testing
- Optimized bulk description of files by replacing
system/describeDataObjects
withsystem/findDataObjects
API call and scoping file search to projects
- Upgrade dx-download-agent (includes a fix to the early database close issue)
- Fix to describing billTo of a project
- Log dxda and dxfuse version in applet execution
- Improvements to
exectree
option - Upgrade dxfuse to v0.22.2
- Bug fix in dx-download-agent (dnanexus/dxda#34)
- Limit scatters to 500 elements. Running more than that risks causing platform problems.
- Uprade dxfuse to v0.22.1
- fixed bug when describing a live (non-archived) hidden file.
- Uprade dxfuse to v0.21
- Do not use any of the test instances, or any instance with less than 2 CPUs and 3GiB or RAM for auxiliarly WDL jobs.
- Do not use AWS nano instances for auxiliarly WDL jobs. They are not strong enough for the task.
- Recognize DNAnexus-specific keys in task and workflow metadata
- Recognize workflow parameter metadata
- Optionally load task and workflow descriptions from README files
- Updated dx-download-agent that reduces memory consumption. This is noticible on small instances with a limited amount of memory.
- Upgrade packages to:
- dxfuse v20
- dx-download-agent with support for symbolic links
- Cromwell v49
- Retry
docker login
if it fails - Allow DxNI to work with an app
- DNAx symbolic links can now be used as input files, the dx-download-agent is able to download them. You will need to specifically allow network access to applets that use symbolic links, otherwise they will won't be able to reach external URLs. For example, the
extras.json
file below sets the timeout policy to 8 hours and allows network access.
{
"default_task_dx_attributes" : {
"runSpec": {
"timeoutPolicy": {
"*": {
"hours": 8
}
},
"access" : {
"network": [
"*"
]
}
}
}
}
- Added support for additional parameter metadata:
- group
- label
- choices
- suggestions
- dx_type
- Fixed bug in project-wide-reuse option.
- Providing a tree structure representing a compiled workflow via
--execTree pretty
- For the json structure use
--execTree json
- Added support for the parameter_meta: patterns to take an object: docs/ExpertOptions
- Support the
ignoreReuse
anddelayWorkspaceDestruction
in the extras file. More details are in the expert options.
- Providing a JSON structure representing a compiled workflow. This can be done with the command line flag
--execTree
. For example:
java -jar dxWDL-v1.42.jar compile CODE.wdl --project project-xxxx --execTree
- Bug fix for case where the number of executions is large and requires multiple queries.
- Added support for
patterns
andhelp
in theparameter_meta
section of a WDL task. For more information, see docs/ExpertOptions - Upgrade to Cromwell v48
- Upgrade to dxfuse v0.17
- Added support for a
path
command line argument todxni
.
java -jar dxWDL-v1.41.jar dxni --path /MY_APPLETS/assemble --project project-xxxx --language wdl_v1.0 --output headers.wdl
- Using
scalafmt
to normalize code indentation. - Check if a file is archived prior to downloading or streaming it. Such a file cannot be read, and will cause a "403 forbidden" http error code.
- Replaced the dxjava package with scala code. The dnanexus calls now go through the low-level DXAPI java module.
- Bug fix for calling a task inside a scatter with an optional that is not provided.
- Fix issue with invalid WOM when compiling workflows containing sub-workflow with expression in output block while using custom reorg applet.
- Warning message for custom reorg applet will only show when
--verbosity
is set. - Minor changes.
- Upgraded to dxfuse version 0.13
- Making dxfuse startup script more robust
Added a mechanism for a custom reorganization applet, it can be used instead of the built in --reorg option. You can use it to reorganize workflow file results after it completes.
Please refer to docs/ExpertOptions.md
- Object form of streaming syntax. This allows several annotations for an input/output parameter. In addition to the previously supported:
parameter_meta {
foo: stream
}
You can also write:
parameter_meta {
foo: {
stream: true
}
}
- New version of dxfuse (v0.12)
- The checksum of an applet/workflow does not include the dxWDL version. This means that upgrading to a new dxWDL version does not require recompiling everything.
- Support for GPU instances.
If you want an instance that has a GPU chipset, set the gpu
attribute to true. For example:
runtime {
memory: "4 GB"
cpu : 4
gpu : true
}
- Bug fix for handling of structs when creating task headers
- Upgrade to Cromwell 47
- Protect 300MiB of memory for dxfuse, if it is running. We don't want it killed by the OOM if the user processes use too much memory. This works only when using docker images.
- Fixed bug with comparision of tasks.
- Upgrade to Cromwell 46.1
- Retrying docker pull at runtime.
- Improved release script. Copies to geographically distributed regions with an app.
- Fixed bug #313.
- Renaming dxfs2 to dxfuse. This is the official name for the DNAx FUSE filesystem.
- Prefer v2 instances over v1 instances.
- Improving marshalling of WDL values to JSON.
- Allow a WDL input that is a map where the key is a file.
- Using dxfs2 to stream files. This replaces
dx cat
, which was the previous solution.
- Upgrade to Cromwell version 46
- Removed a runtime assert that was too strict. It was checking that the type of a WDL value V had a static WDL type T. However, the real question was whether V could be casted type T.
- Writing out a better description when raising a runtime assertion because WOM types don't match.
- Documented syntax limitation for task/workflow bracket placement.
- Upgraded to sbt 1.3.0
- Improvements to the download agent
- The default timeout limit for tasks is 48 hours. It can be overriden by setting a different timeout in the extras file.
- Fixing a bug where the database is locked, in the dx-download-agent.
- An experimental version of dx-download-agent
- Upgrade to Cromwell 45.1
- Experimental version of the download-agent. Trying to reduce download failures at the beginning of a job. For internal use only.
- Bug fix for DxNI error
- Limit the size of the name of jobs in a scatter
- Upgrade to Cromwell v45
- Nested scatters are supported
- Correctly identify WDL calls with no arguments
- Dealing with the case where a WDL file imports a file, that imports another file
- Making checksums deterministic, this ensures that a compilation process will not be repeated unnecessarily.
- Added the dxWDL version number to the properties.
- Optimized queries that if a workflow/applet has already been compiled. This is done by limiting the possible names of the data object we are searching for. We add a regular expression to the query, bounding the legal names.
Fixed
- Setting recurse to false, when searching for existing applets and workflows. Fix contributed by Jeff Tratner.
- An optional output file, that does not exist, is returned as
None
. For example, examine taskfoo
.
version 1.0
task foo {
command {}
output {
File? f = "A.txt"
Array[File?] fa = ["X.txt", "Y.txt"]
}
}
Running it will return:
{
"fa" : [null, null]
}
Note that f
is missing. When passing through the DNAx
system, it is removed becaues it is optional and null.
Fixed
- Bug 284, dropping a default when calling a subworkflow.
Improved find-data-objects queries, reducing the time to check if an applet (or workflow) already exists on the platform. This is used when deciding if an applet should be built, rebuilt, or archived.
To speed the query so it works on large projects with thousands of
applets and workflows, we limited the search to data objects generated
by dxWDL. These have a dxWDL_checksum
property. This runs the risk
of missing cases where an applet name is already in use by a regular
dnanexus applet/workflow. We assume this is an unusual case. To fix this,
the existing applet can be moved or renamed.
Fixed
- Binary and decimal units are respected when specifying memory. For example, GB is 109 bytes, and GiB is 230 bytes. This follows the memory spec.
Added
- Initial support for the development WDL version, 1.1 (or 2.0). This does not include the directory type.
Fixed
- Bug 274, losing pipe symbols ('|') at the beginning of a line.
Changed
- Upgrade to Cromwell 44, with support for JSON-like values in meta sections
Added
- Ability to put a list of upstream projects into the extras file.
Fixed
- Tolerate platform applets/workflows with input/output specs that use non WDL types. For example, an array of applets.
- Bug when accessing call results that were not executed. For example, in
path_not_taken
thecompare
call is not made. This, incorrectly, causes an exception to be raised while evaluatingequality
.
version 1.0
workflow path_not_taken {
if (false) {
call compare
}
output {
Boolean? equality = compare.equality
}
}
task compare {
command {}
output {
Boolean equality = true
}
}
Changed
- Removed warning for variables that cannot be set from the inputs file. These are messages like this:
Argument unify.contig_shards, is not treated as an input, it cannot be set
Argument etl.shards, is not treated as an input, it cannot be set
Argument seq.iter_compare, is not treated as an input, it cannot be set
Top level call argument can now be set.
Fixed
- Default values specified for top-level calls using a JSON file.
- Bug 272
- Runtime error when using an array of WDL structs
Changed
- Upgrade to Cromwell v43
- Replaced internal implementation of finding source lines for calls, with Cromwell/WOM implementation.
Fixed
- Handling of pair type in a JSON input file
- Allow overriding default values in calls from the input file. For example, in a workflow like:
version 1.0
workflow override {
call etl { input: a = 3 }
output {
Int result = etl.result
}
}
task etl {
input {
Int a
Int b = 10
}
command {}
output {
Int result = a + b
}
}
We can now set b to a value other than 10, with an input file like this:
{
"override.etl.b" : 5
}
New
- Support for compressed docker images (gzip)
Changed
- Upgrade to Cromwell v42
Fixed
- The
-p
flag was not respected - Environment not passed correctly during compilation.
- Sorting structs by dependencies
Fixed
- bug 259. Unified the code for resolving platform paths.
- Error when downloading a file that resides in a container, rather than a project.
- Imports specified from the command line
Changed
- Merged
DxPath
andDxBulkResolve
modules.
- Upgrade to Cromwell v41
- Mark auxiliary workflows and applets as hidden. This is a step in the direction of supporting copying of a workflow from one project to another.
- Added unit tests for the
WomValueAnalysis
module, which checks if WOM expressions are constant. - Reducing reliance on the dxjava library, calling the DXAPI directly.
- Merged fork of the dxjava library back into the dx-toolkit.
- Use the dx-download-agent (dxda) instead of
dx download
in tasks. - Fix for bug (dnanexus/dxWDL#254)
- Fix for bug occurring when a
struct
is imported twice
- Got DxNI to work for DNAnexus apps, not just applets.
- Added links to applets that are referenced inside WDL fragments. This should allow, at some point, copying workflows between projects.
- Moved applet meta-information into the
details
field. This makes dx:applets more readable. - Wrote unit-tests for the
WdlVarLinks
module. - Batching file-describe, and file-resolve calls.
- Precalculate instance types. There are tasks that calculate the instance type they need in the runtime section. If the task call is made from a workflow fragment, we can calculate the instance type then and there. This allows launching directly in the correct instance type, instead of launching an additional job.
- Fixed bug in expression evaluation at runtime (dnanexus/dxWDL#240)
- Improved unit-test coverage
- Bug fixes related to optional arguments (dnanexus/dxWDL#235).
- Removed the instance-type database, and wom source code from the inputs of applets.
- Added the WDL source code to workflow and applet objects on the platform. It is stored in the details field, and can be easily retrieved. It has been removed from the generated applet bash script.
- Initial support for the
struct
type - Check that the reserved substring '___' is not used in the source WDL code. This sequence is used to translate dots ('.') into DNAx inputs and outputs. Dots are invalid symbols there.
- Bug fixes: dnanexus/dxWDL#224, dnanexus/dxWDL#227, dnanexus/dxWDL#228
- Ensure that native docker uses the machine's hostname (i.e., the job ID) as the hostname, matching the previous behavior of dx-docker. This allows setting the job ID in error messages, helping debugging. Contributed by Jeff Tratner.
- Support for WDL version 1.0, as well as draft-2. There are two features
that are not yet supported:
struct
, and nested scatters. Work is ongoing to address these omissions.
- Adding debug information to conversions from JSON to WDL variables. This helps track down runtime problems with missing variables that a task is expecting. Previously, we didn't know which variable was having a problem.
- Bug fix for complex cases where WDL files import each other.
- Bug fix for native docker. There was a problem when a docker image was using an internally defined user; it didn't have the necessary permissions to create output files on the worker.
- Support NTLM proxies. If your organization is configured with an NTLM proxy, you can use it like this:
$ export HTTP_PROXY_METHOD=ntlm
$ export HTTP_PROXY_DOMAIN = acme.com
$ export HTTP_PROXY = https://john_smith:welcome1@proxy.acme.com:8080
$ java -jar dxWDL.jar ...
- Supporting proxy configuration with user and password. For example:
$ export HTTPS_PROXY = https://john_smith:welcome1@proxy.acme.com:8080
- Proxy configuration. If your organization interposes a proxy between the internal machines and external hosts, you can set the environment variable
HTTP_PROXY
(orHTTPS_PROXY
) to point to the proxy. The compiler will pass all of its dnanexus API calls through that proxy. For example, if you perform the following on the command line shell:
$ export HTTP_PROXY = proxy.acme.com:8080
$ java -jar dxWDL.jar ...
the compiler will route all requests through the machine proxy.acme.com
on port 8080
.
-
Native docker is now the default. If you still want to use dx-docker, the
-useDxDocker
flag is available. In order to store a docker image on the platform, you can dodocker save
, and upload the tarball to a file. More details are provided in the Expert options. -
The compiler emits a warning for partialy defined workflow outputs. For example, in workflow
foo
, the outputadd.result
is partial, because it is not assigned to a variable. Partial definitions are discarded during compilation, hence the warning.
workflow foo {
call add { ... }
output {
add.result
}
}
To avoid this problem, rewrite like this:
workflow foo {
call add { ... }
output {
Int r = add.result
}
}
- Update test scripts for python3
- Version docker-based runner script
- Do not call sudo in runner script, in case system is set up not to require sudo to run Docker.
- Rename run script to
run-dxwdl-docker
$ export DXWDL_VERSION=0.79.1
$ sudo run-dxwdl-docker compile /path/to/foo.wdl -project project-xxx
- Support per task dx-attributes.
- Report a warning for a non-empty runtime section in a native applet, instead of throwing an error. Note that the WDL runtime section will be ignored, the native definitions will be used instead.
- Fix bug when using spaces in output files
- Eliminate a job-describe API call from all tasks. This reduces overall platform load, which is important in volume workflows.
- Support for private docker registries
- A docker image for
running the compiler without needing to install dependencies. You can
use the
dxwdl
script to compile file
foo.wdl
like this:
$ runc.sh compile /path/to/foo.wdl -project project-xxxx
- Instructions for how to replace the built in reorganize workflow outputs applet, with your own.
- Support the
restartableEntryPoints
applet option in theextras
file.
- Clone the dxWDL runtime asset to local project, to allow sub-jobs access to it.
- Improve user message when pretty printing an erroneous WDL file.
- New command line flag
--leaveWorkflowsOpen
, that leaves the toplevel workflow open. This option is intended for power users, it allows modifying the workflow after the compiler is done. - Figure out the smallest instance from the current price list,
avoid the use of a hardcoded instance type. On the Azure cloud, an
applet failed because it tried using the hardcoded
mem1_ssd1_x4
instance, which does not exist there (only on AWS).
- Handle using an asset that lives in another project by creating a local record for it.
- Upgrade to Ubuntu 16.04
- Preparatory work for supporting WOM as a compilation intermediate representation.
- Removed inlining of tasks code into auxiliary applets. This was causing a workflow to change when a task was modified, violating separate compilation, and not allowing executable cloning to work.
- Improving test and release scripts.
- Adding printout for the dxWDL version to running applets and workflows
- Check and throw an exception if an asset is not in the current project. It needs to be cloned.
- Supporting Amsterdam (azure:westeurope) and Berlin (aws:eu-central-1) regions.
- Fixed error in collecting results from an optional workflow branch.
- Put the project-wide reuse of applets under a special flag
projectWideReuse
. - Improved the queries to find dx:executables on the target path.
- Improvements to the algorithm for splitting a WDL code block into parts.
- In an unlocked workflow, compile toplevel calls with no subexpressions to dx stages. The expert options page has a full description of the feature.
- Allow the compiler to reuse applets that have been archived. Such
applets are moved to a
.Archive
directory, and the creation date is appended to the applet name, thereby modifying the applet name. The name changes causes the search to fail. This was fixed by loosening the search criterion.
- Upgrade to Cromwell 33.1
- Reuse applets and workflows inside a rpoject. The compiler now looks for an applet/workflow with the correct name and checksum anywhere in the project, not just in the target directory. This resolved issue (dnanexus/dxWDL#154).
- Support importing http URLs
- Simplified handling of imports and workflow decomposition
- Fixed issue (dnanexus/dxWDL#148). This was a bug occuring when three or more files with the same name were downloaded to a task.
- Fixed issue (dnanexus/dxWDL#146). This
occurred when (1) a workflow called a task, and (2) the task and the workflow had
an input with the same name but different types. For example, workflow
w
calls taskPTAsays
, both use inputfruit
, but it has typesArray[String]
andString
.
workflow w {
Array[String] fruit = ["Banana", "Apple"]
scatter (index in indices) {
call PTAsays {
input: fruit = fruit[index], y = " is good to eat"
}
call Add { input: a = 2, b = 4 }
}
}
task PTAsays {
String fruit
String y
...
}
- Fixing build and release scripts.
- Allowing non-priviliged users to find the dxWDL runtime asset in the public repository.
- Throw an exception if a wrapper for a native platform call has a non-empty runtime section.
- Use an SSD instance for the collect sub-jobs.
- Remove the runtime check for calling a task with missing values, fix issue (dnanexus/dxWDL#112). The check is overly restrictive. The task could have a default, or, be able to tolerate the missing argument.
- Color coding outputs, yellow for warnings, red for errors.
- Indenting information output in verbose mode
- Removing the use of
dx pwd
. The user needs to specify the destination path on the command line. A way to avoid this, is to compile from the dx-toolkit, with the upcomingdx compile
command.
- Allow variable and task names to include the sub-string "last"
- Workflow fragment applets inherit access properties from the extras file.
- Ignoring unknown runtime attributes in the extras file.
- Decomposing a workflow when there is a declaration after a call. For example,
workflow
foo
needs to be decomposed. The workflow fragment runner does not handle dependencies, and cannot wait for theadd
call to complete.
workflow foo {
Array[Int] numbers
scatter (i in numbers) {
call add { input: a=i, b=1}
Int m = add.result + 2
}
output {
Array[Int] ms = m
}
}
-
Setting debug levels at runtime. The compiler flag
runtimeDebugLevel
can be set to 0, 1, or 2. Level 2 is maximum verbosity, level 1 is the default, zero is minimal outputs. -
Upgrade to Cromwell version 32.
-
Using headers to speed up the workflow decomposition step. The idea is to represent a WDL file with header. When a file is imported, we use the header, instead of pulling in the entire WDL code, including its own imports.
-
Support setting defaults in applets, not just workflows. This can be done with the
--defaults
command line option, and a JSON file of WDL inputs.
-
Optimization for the case of launching an instance where it is calculated at runtime.
-
Support dnanexus configuration options for tasks. Setting the execution policy, timeout policies, and access control can be achieved by specifying the default option in the
default_taskdx_attributes
section of theextras
file. For example:
{
"default_task_dx_attributes" : {
"runSpec": {
"executionPolicy": {
"restartOn": {
"*": 3
}
},
"timeoutPolicy": {
"*": {
"hours": 12
}
},
"access" : {
"project": "CONTRIBUTE",
"allProjects": "VIEW",
"network": [
"*"
],
"developer": true
}
}
}
}
-
Improved error message for namespace validation. Details are no longer hidden when the
-quiet
flag is set. -
Reduced logging verbosity at runtime. Disabled printing of directory structure when running tasks, as the directories could be very large.
-
Added support for calling native DNAx apps. The command
java -jar dxWDL.jar dxni -apps -o my_apps.wdl
instructs the compiler to search for all the apps you can call, and create WDL tasks for them.
- Support for setting defaults for all task runtime attributes has been added.
This is similar to the Cromwell style. The
extras
command line flag takes a JSON file as an argument. For example, iftaskAttrs.json
is this file:
{
"default_runtime_attributes" : {
"docker" : "quay.io/encode-dcc/atac-seq-pipeline:v1"
}
}
Then adding it to the compilation command line will add the atac-seq
docker image to all
tasks by default.
java -jar dxWDL-0.44.jar compile test/files.wdl -defaults test/files_input.json -extras taskAttrs.json
- Reduced the number of auxiliary jobs launched when a task specifies the instance type dynamically. A task can do this is by specifiying runtime attributes with expressions.
- Added the value iterated on in scatters
- Upgrade to cromwell-31 WDL/WOM library
- Report multiple validation errors in one step; do not throw an exception for the first one and stop.
- Reuse more of Cromwell's stdlib implementation
- Close generated dx workflows
- Bug fix for case where optional optional types were generated. For example,
Int??
.
- Nested scatters and if blocks
- Support for missing arguments has been removed, the compiler will generate an error in such cases.
- When a WDL workflow has an empty outputs section, no outputs will be generated.
- Decomposing a large block into a sub-workflow, and a call. For
example, workflow
foobar
has a complex scatter block, one that has more than one call. It is broken down into the top-level workflow (foobar
), and a subworkflow (foobar_add
) that encapsulates the inner block.
workflow foobar {
Array[Int] ax
scatter (x in ax) {
Int y = x + 4
call add { input: a=y, b=x }
Int base = add.result
call mul { input: a=base, n=x}
}
output {
Array[Int] result = mul.result
}
}
task add {
Int a
Int b
command {}
output {
Int result = a + b
}
}
task mul {
Int a
Int n
command {}
output {
Int result = a ** b
}
}
Two pieces are together equivalent to the original workflow.
workflow foobar {
Array[Int] ax
scatter (x in ax) {
Int y = x + 4
call foobar_add { x=x, y=y }
}
output {
Array[Int] result = foobar_add.mul_result
}
}
workflow foobar_add {
Int x
Int y
call add { input: a=y, b=x }
Int base = add.result
call mul { input: a=base, n=x}
output {
Int add_result = add.result
Int out_base = base
Int mul_result = mul.result
}
}
- A current limitation is that subworkflows, created in this way, give errors for missing variables.
- The allowed syntax for workflow outputs has been tightened. An output declaration must have a type and and a value. For example, this is legal:
output {
Int add_result = add.result
}
but this is not:
output {
add.result
}
- Minor bug fixes
- Bug fix release
- Split README into introduction, and advanced options. This should, hopefully, make the top level text easier for the beginner.
- A workflow can call another workflow (subworkflow). Currently, the UI support for this feature is undergoing improvements.
- The search path for import can be extended by using the
--imports
command line argument. This is useful when the source WDL files are spread across several directories.
- Improved handling of pricing list
- Upgraded to the new wdl4s library, that now lives in the cromwell repository under cromwell-wdl. The cromwell version is 30.2.
- Adhering to WDL spec: a declaration set to a constant is
treated as an input. In the example,
contamination
is compiled to a workflow input with a default of0.75
.
workflow w {
Float contamination = 0.75
}
- Improving naming of workflow stages, and how their appear in the UI.
- Fixed regression in compilation of stand-alone applets.
- Fixed bug when pretty-printing applets that use <<<,>>> instead of {,}
- Fixed bug in setting workflow defaults from JSON file
- Improved behavior of the
sub
andsize
stdlib functions - Improved naming convention for scatter/if workflow stages.
- Access to arguments in calls inside scatters. This feature was lost while supporting locked-down workflows.
task Add {
Int a
Int b
command {}
output {
Int result = a + b
}
}
workflow w {
scatter (i in [1, 10, 100]) {
call Add { input: a=i }
}
}
For example, in workflow w
, argument b
is missing from the Add
call. It is now possible to set it it from the command line with dx run w -iscatter_1.Add_b=3
. With an inputs file, the syntax is:
w.Add.b = 3
.
- Fixed bad interaction with the UI, where default values were omitted.
- Improved support for conditionals and optional values
- Automated tests for both locked and regular workflows
- Various minor bug fixes
- More accurate detection of the IO classes in dx:applets.
- Improved handling of WDL constants. For example, multi word
constants such as
["1", "2", "4"]
, and4 + 11
are recognized as such. When possible, they are evaluated at runtime. - Revert default compilation to a regular workflow. It is possible to
compile to a locked-down workflow by specifying
-locked
on the command line. To specify command workflow inputs from the command line use:
dx run foo -i0.N=19
- Not closing dx:workflow objects, this is too restrictive.
- Uplift the code to use DNAnexus workflow inputs and outputs.
Running a workflow now has slighly easier command line syntax.
For example, if workflow
foo
takes an integer argumentN
, then running it through the CLI is done like this:
dx run foo -iN=19
-
Revamp the conversions between dx:file and wdl:file. This allows specifying dx files in defaults.
-
Initial support for non-empty WDL array types, for example
Array[String]+
. -
Improved handling of optional values
-
An experimental new syntax for specifying inputs where the workflow is underspecified. WDL allows leaving required call inputs unassigned, and specifying them from the input file. For example, workflow
math
calls taskadd
, but does not specify argumentb
. It can then be specified from the input file as follows:{ "math.add.b" : 3}
.
task add {
Int a
Int b
output {
Int result = a + b
}
}
workflow math {
call add { input: a = 3 }
output {
add.result
}
}
The dx:workflow that is compiled from math
can set this variable from
the command line as follows:
dx run math -iadd___b=5
This command line syntax may change in the future.
- Adding a
-quiet
flag to suppress warning and informational messages during compilation. - Minor fixes
- Tasks that have an empty command section do not download files eagerly. For example,
if a task only looks at
size(file)
, it will not download the file at all.
task fileSize {
File in_file
command {}
output {
Float num_bytes = size(in_file)
}
}
- Support docker images that reside on the platform.
- Removed limitation on maximal hourly price per instance. Some bioinformatics pipelines regularly require heavy weight instances.
- Fixed several WDL typing issues
- Improving the internal representation of JSON objects given as input.
- Support string interpolation in workflow expressions
- Handle scatters where the called tasks return file arrays, and non-native platform types. This is done by spawning a subjob to collect all the outputs and bundle them.
- Azure us-west region is supported
- Support calling native DNAx applets from a WDL workflow. A helper utility
is
dxni
(Dx Native Interface), it creates task wrappers for existing dx:applets.
- Allow applet/workflow inputs that are optional, and have a default.
- More friendly command line interface
- Default workflow inputs. The
--defaults
command line argument embeds key-value pairs as workflow defaults. They can be overridden at runtime if necessary.
- Use hashes instead of files for non-native dx types
- Do not use the help field in applet input/output arguments to carry WDL typing information.
- Fold small text files into the applet bash script. This speeds up the 'dx build' command, and avoids uploading them as separate platform files.
- Replace 'dx build' with direct API calls, additional compilation speedup.
- Speed up the creation of a dx:workflow. With one API call create all the workflow stages, and add set the checksum property.
- Speeding up applet construction
- WDL objects: experimental
- Type coercion
- Faster compilation when applets already exist. Using bulk describe API, instead of looking up each applet separately.
- Adding checksum to dx:workflow objects, recompile only if it has not changed
- Specified behavior of input/output files in doc/Internals.md
- Minor fixes to streaming
- Upgrade to wdl4s version 0.15.
- Enable several compiler warnings, removing unused imports
- Bug fixes:
- Wrong dx project name when using multiple shells, and different projects
- Better handling of errors from background 'dx cat' processes.
- Streaming works with tasks that use docker
- Minor fixes, and better testing, for file streaming
- File download streaming
- Conditionals
- Support white space in destination argument
- Allow providing the dx instance type directly in the runtime attributes.
- Topological sorting of workflow. By default, check for circular dependencies, and abort in case there are cycles. Optionally, sort the calls to avoid forward references. This is useful for WDL scripts that were not written by hand.
- Create an
output_section
applet for a compiled workflow. If--reorg
is specified on the command line, the applet also reorganizes the output folder; it moves all intermediate results to subfolderintermediate
. Reorganization requiresCONTRIBUTE
level access, which the user needs to have. - Multi region support.
- Initial support for WDL pairs and maps
- Upgrade to wdl4s version 0.13
- Improve parsing for memory specifications
- Optionals can be passed as inputs and outputs from tasks.
- Support archive and force flags a la
dx build
. Applets and workflows are not deleted by default, the --force flag must be provided. - If there are insufficient permissions to get the instance price list, we have a reasonable fallback option.
- Added namespace concept to intermediate representation.
- WDL pretty printer now retains output section.
- The compiler is packed into a single jar file
- Fixed glob bug
Bug fix release.
Corrected the checksum algorithm, to recurse through the directory tree.
Improved support for scatters
- Support an expression in a scatter collection.
- Compile declarations before a scatter into the scatter applet. This optimization folds two applets into one.
- Use wdl4s native name resolution to calculate scatter collection type.
- Added documentation to doc/IR.md describing how scatters are compiled.
- Support for ragged file arrays
- Correctly handle an empty workflow output section
- Upgrade to wdl4s version 0.12
- Improvements to regression tests
- Support the import directive. This allows spreading definitions across multiple files.
- Using native wdl4s data structures, instead of pretty printing, for internal representation.
- Support passing unbound variables to calls inside scatters
- Implemented glob and size function for files
- Correctly handling empty arrays in task input/output
- Improved scatter linking. Got rid of runtime calls to get dx:applet descriptions.
- Allow a docker image to be specified as a parameter
- Use Travis containers for continuous integration
- Adding tests for instance type choice at runtime
- Support resource requirements (memory/disk) calculated from runtime variables.
- Rebuild an applet, only if the source code has changed. For example, if an applet's WDL code changed, it will be rebuilt in the next compilation.
- Files are lazily downloaded in auxiliary applets, such as scatters. In tasks/applets, they are always downloaded.
- Adding linking information to applets that call other applets. This ensures the correct applet-ids are invoked. No lookup by name is performed at runtime.
- Minor bug fixes
- Separate compilation of workflows and tasks. A task is compiled to single dx:applet, and a workflow is compiled to auxiliary applets and a dx:workflow.
- WDL files containing only tasks, and no workflow, are supported
- Many improvements all around
- Upgrade to wdl4s v0.10
- Improving version number handling
- Minor improvements in debugging printout and error reporting
- The GATK pipeline compiles and runs (result not validated yet)
- Bug fixes:
- Correct order of scatter output arrays
- Improved handling of optionals
- Better compilation error messages
- Version checking
- Compiler verbose mode
- Renamed initial workflow stage to Common