Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow for overriding individual steps in a workflow #3315

Open
geoffjentry opened this issue Feb 23, 2018 · 1 comment
Open

Allow for overriding individual steps in a workflow #3315

geoffjentry opened this issue Feb 23, 2018 · 1 comment

Comments

@geoffjentry
Copy link
Contributor

Initially suggested by @yfarjoun

Imagine a world where one could submit a WDL but then in the workflow options tell Cromwell to replace the call to task foo with the task bar in some other WDL file. This would allow users to experiment with modifications to a workflow w/o a) needing to make a full copy of the original WDL and b) needing the original WDL author to have allowed for this (a flaw in many proposals for similar use cases). One could even imagine a world where one could swap in a CWL step for a WDL call or vice versa.

For now let's KISS and see how it goes:

  • WDL only
  • The replacement call must have the same shape as the original call (i.e. same input and output types)
@yfarjoun
Copy link

yfarjoun commented Feb 23, 2018

To elaborate the idea a bit further...

I'd like to be able to make the following transformations:

Easiest (add a dependent step):

workflow foo{
call A{}
}

and
"Add B to FOO"
Becomes:

workflow FOO{
call A{}

call B{ inputs:
foo=A.foo}
}
  1. Harder (replace a task)
workflow FOO{
call A{}

call B{inputs: foo=A.foo}

call C{inputs: bar=B.bar}
} 

and
"override B in FOO by B_Prime"

Becomes:

workflow FOO{
call A{}

call B_Prime{inputs: foo=A.foo}

call C{inputs: bar=B_Prime.bar}
}
  1. even harder (replace a single call by multiple calls)
workflow FOO{
call A{}

call B{inputs: foo=A.foo}

call C{inputs: bar=B.bar}
} 

and
"override B in FOO by B_Prime_one and B_Prime_two"

Becomes:

workflow FOO{
call A{}

call B_Prime_one{inputs: foo=A.foo}
call B_Prime_two{inputs: baz=B_prime.baz}
call C{inputs: bar=B_Prime_two.bar}
}

3 might be solvable by implementing B_Prime_one and B_Prime_two as a workflow, and then invoking 2) and replacing call B by a call to that workflow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants