crim-ca / weaver

Weaver: Workflow Execution Management Service (EMS); Application, Deployment and Execution Service (ADES); OGC API - Processes; WPS; CWL Application Package
https://pavics-weaver.readthedocs.io
Apache License 2.0
23 stars 6 forks source link

CLI should auto-resolve CWL Workflow steps with deploy URL #630

Closed fmigneault closed 1 month ago

fmigneault commented 1 month ago

Describe the bug

Weaver allows auto-inference of CWL Workflow step IDs to references to a local process. For example, a workflow containing run: some-step.cwl infers that the process ID some-step should be used for that sub-operation. If that process is found locally during deployment, the Workflow definition is permitted.

However, when using the CLI (or python client) to deploy a new Workflow, this inference does not work. Using WeaverClient.deploy, a pre-check of the CWL is performed to quickly generate an error if the input CWL is invalid. Since in that context, the client is not the remote server, it does not contain the self reference to its own URL, which causes local process lookup o fail. Steps require having an explicit URL to the remote process to succeed. However, this defeats the purpose of the auto-inference of the process ID location.

How to Reproduce

  1. Pick any workflow from the test suite, or define your own with a remote process as sub-step.
  2. Use only run: <process-id>.cwl in the step definition.
  3. Pass this CWL definition to WeaverClient.deploy(cwl=...).

As a counter-example, replacing by run: https://full-path.to/processes/{process-id} should succeed.

Expected behavior

The CLI/client should inject the settings for the targeted URL instance. Since a deployment is performed, this information can be known in advance. Using only the ID of the process in the steps should resolve the same way as using the full URL to the same server instance where the workflow is being deployed to.