dxCompiler icon indicating copy to clipboard operation
dxCompiler copied to clipboard

What does this mean?

Open BJWiley233 opened this issue 4 years ago • 8 comments

I ran code just to test converting CWL pipeline below:

java -jar dxCompiler-2.4.7.jar compile /Users/****/****/UKBB/analysis-workflows/definitions/pipelines/CH_exome_Final2.cwl -language CWL -project UKBB_Exome_2021 -folder /CH_Exome/

And I get this error. What do I have to do/create/make/add to clear this error? Any advice is welcomed.

[error] Error creating translator for /Users/****/****/UKBB/analysis-workflows/definitions/pipelines/CH_exome_Final2.cwl
java.lang.RuntimeException: missing definition for schema file:///Users/****/****/UKBB/analysis-workflows/definitions/types/labelled_file.yml#labelled_file
	at dx.cwl.CwlType$.inner$1(CwlType.scala:117)
	at dx.cwl.CwlType$.translate(CwlType.scala:137)
	at dx.cwl.CwlArray$.translate(CwlType.scala:451)
	at dx.cwl.CwlSchema$.translateSchema(CwlType.scala:326)
	at dx.cwl.CwlType$.inner$1(CwlType.scala:96)
	at dx.cwl.CwlType$.translate(CwlType.scala:137)
	at dx.cwl.CwlType$.apply(CwlType.scala:144)
	at dx.cwl.CommandInputParameter$.apply(CommandLineTool.scala:65)
	at dx.cwl.CommandLineTool$.$anonfun$apply$19(CommandLineTool.scala:202)
	at scala.collection.Iterator$$anon$9.next(Iterator.scala:575)
	at scala.collection.mutable.Growable.addAll(Growable.scala:62)
	at scala.collection.mutable.Growable.addAll$(Growable.scala:59)
	at scala.collection.mutable.ArrayBuffer.addAll(ArrayBuffer.scala:147)
	at scala.collection.mutable.ArrayBuffer.addAll(ArrayBuffer.scala:40)
	at scala.collection.mutable.ArrayBuffer$.from(ArrayBuffer.scala:265)
	at scala.collection.mutable.ArrayBuffer$.from(ArrayBuffer.scala:253)
	at scala.collection.IterableOps.map(Iterable.scala:671)
	at scala.collection.IterableOps.map$(Iterable.scala:671)
	at scala.collection.AbstractIterable.map(Iterable.scala:920)
	at dx.cwl.CommandLineTool$.apply(CommandLineTool.scala:201)
	at dx.cwl.Parser.parse(Parser.scala:64)
	at dx.cwl.Parser.parseFile(Parser.scala:92)
	at dx.translator.cwl.CwlTranslatorFactory.create(CwlTranslator.scala:160)
	at dx.translator.TranslatorFactory$$anonfun$createTranslator$6.applyOrElse(Translator.scala:97)
	at dx.translator.TranslatorFactory$$anonfun$createTranslator$6.applyOrElse(Translator.scala:97)
	at scala.collection.IterableOnceOps.collectFirst(IterableOnce.scala:1086)
	at scala.collection.IterableOnceOps.collectFirst$(IterableOnce.scala:1078)
	at scala.collection.AbstractIterable.collectFirst(Iterable.scala:920)
	at dx.translator.TranslatorFactory$.createTranslator(Translator.scala:97)
	at dxCompiler.Main$.compile(Main.scala:394)
	at dxCompiler.Main$.dispatchCommand(Main.scala:765)
	at dxCompiler.Main$.main(Main.scala:870)
	at dxCompiler.MainApp$.delayedEndpoint$dxCompiler$MainApp$1(Main.scala:875)
	at dxCompiler.MainApp$delayedInit$body.apply(Main.scala:874)
	at scala.Function0.apply$mcV$sp(Function0.scala:39)
	at scala.Function0.apply$mcV$sp$(Function0.scala:39)
	at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
	at scala.App.$anonfun$main$1(App.scala:73)
	at scala.App.$anonfun$main$1$adapted(App.scala:73)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:553)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:551)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:920)
	at scala.App.main(App.scala:73)
	at scala.App.main$(App.scala:71)
	at dxCompiler.MainApp$.main(Main.scala:874)
	at dxCompiler.MainApp.main(Main.scala)

BJWiley233 avatar Jul 07 '21 19:07 BJWiley233

As stated in the readme, CWL support is under active development. You can consider it "alpha" right now. Your pipeline likely uses some features that are not yet supported.

jdidion avatar Jul 09 '21 15:07 jdidion

Thanks, what stage is WDL on? And also what maybe the best resource to look at for directly creating DNAnexus applet workflows using scripting and not through the interface? Thanks for your help.

BJWiley233 avatar Jul 09 '21 16:07 BJWiley233

WDL is ready for use. Is the example at https://github.com/dnanexus/dxCompiler/#example-workflow enough to get you started?

emiloslavsky avatar Jul 10 '21 03:07 emiloslavsky

Yes I know WDL, I was referring to writing straight DNAnexus workflow applets using coding, i.e. skip the WDL or CWL conversion step.

BJWiley233 avatar Jul 10 '21 03:07 BJWiley233

xVantage Care Support team sent the following response via ticket tracking system (SF27964):

Based on our investigation, it appears that your CWL workflow is designed for CWL 1.0. And as it has been already mentioned here (https://github.com/dnanexus/dxCompiler/issues/149) - CWL 1.2 support are under active development.

"WDL draft-2 and versions 1.0 and 1.1 are fully supported, while WDL 2.0 (aka 'development') and CWL 1.2 support are under active development." [https://github.com/dnanexus/dxCompiler/]

As our dxCompiler-2.4.7.jar testing example, we were able to successfully build a CWL workflow (written in version 1.2.):

https://github.com/common-workflow-language/cwl-v1.2/blob/main/tests/dynresreq-workflow-inputdefault.cwl

using the following command

java -jar dxCompiler-2.4.7.jar compile /Users/oklempir-cf/Downloads/cwl-v1.2-main/tests/dynresreq-workflow-inputdefault.cwl -project SF27964 -folder /cwl_test/

In order to convert your code from 1.0 to 1.2, you may find the following conversion/normalizer tool useful (it is created by the main developer of CWL language Michael R. Crusoe).

https://github.com/common-workflow-language/cwl-utils

Please note that this is an untested suggestion and we have not tested this conversion tool on any workflow available at https://github.com/genome/analysis-workflows/

If you wish to write your custom straight DNAnexus workflow applets using coding, we recommend using the following doc page on how to start writing custom made app(let)s. There are several ways how to implement your applets, e.g. with Python or Bash:

https://documentation.dnanexus.com/developer/apps

https://documentation.dnanexus.com/developer/apps/intro-to-building-apps

oklempir-cf avatar Jul 12 '21 12:07 oklempir-cf

So I updated my pipeline to v1.2 and still get same issue missing definition for schema. Does this have to do with update to SchemaDefRequirement? Since my issue fails with all of these types:

requirements:
- class: SchemaDefRequirement
  types:
  - $import: ../types/labelled_file.yml
  - $import: ../types/sequence_data.yml
  - $import: ../types/trimming_options.yml
  - $import: ../types/vep_custom_annotation.yml

We have the four types here: https://github.com/genome/analysis-workflows/tree/master/definitions/types

Can you test if dxCompiler works for a schemadef as in: https://github.com/common-workflow-language/cwl-v1.2/blob/main/tests/anon_enum_inside_array_inside_schemadef.cwl

UPDATE, this anon_enum_inside_array_inside_schemadef.cwl worked so I am must be missing something for custom types

BJWiley233 avatar Jul 12 '21 20:07 BJWiley233

So I figured out what the issue is. As in the spec for CWL v1.2 you are allowed to list import types and use them as arrays with the syntax:

type: labelled_file.yml#labelled_file[]

where #labelled_file represents the name of the type in the imported .yml file but the dxCompiler thinks the entire string labelled_file.yml#labelled_file[] is the type when in CWL the # symbols for the name of the input.

See https://www.commonwl.org/v1.2/Workflow.html#SchemaDefRequirement and here is example (type: biom-convert-table.yaml#table_type) of v1.0 but this has not changed for v1.2

Additionally answer see here on biostars: https://www.biostars.org/p/259322/

BJWiley233 avatar Jul 12 '21 21:07 BJWiley233

Thanks @BJWiley233, we've been working on a stable version of CWL (v2.10) and have fixed a couple of issues related parsing of identifiers. We'll incorporate the example you posted into our test suite and check if it this can be considered fixed.

commandlinegirl avatar Apr 04 '22 18:04 commandlinegirl