Skip to content

Scope

When developers package and EO, they are in fact packaging their own software, written in a specific programming language, as a containerized application (or a set of containerized applications), to be described as an EO Application Package using the Common Workflow Language as described in the OGC proposed best practices.

To achieve this, developers follow the steps described below.

  • Prepare one or more container images containing the execution dependencies of the software.
  • Prepare the CWL CommandLineTool document(s) wrapping the command line tool available in container(s).
  • Prepare the CWL Workflow orchestrating CWL CommandLineTool document(s) wrapping the command line tool available container(s).
  • Test the application package in one or more execution scenarios.

This section shows how to do the step:

  • Prepare the CWL Workflow orchestrating CWL CommandLineTool document(s) wrapping the command line tool available container(s).

Orchestrating CWL CommandLineTools

The CWL CommandLineTools wrapping the water bodies detection command-line tools had a single CWL class.

An Application Package must include at least one CWL Workflow class orchestrating the CWL CommandLineTool above.

We will need a CWL document with a list of process objects: a Workflow class and CWL CommandLineTool wrapping the Python command line tool.

A $graph document does not have a process object at the root. Instead there is a $graph field which consists of a list of process objects.

Each process object must have an id field:

cwlVersion=1.0

$graph:
- class: Workflow
  id: main
  ...

- class: CommandLineTool
  id: detect-water-body
  ...

Workflow run fields cross-reference other processes in the document $graph using the id of the process object:

cwlVersion=1.0

$graph:
- class: Workflow
  id: main
  steps:
    node_detect:
      run: "#detect-water-body"
      ...
  ...

- class: CommandLineTool
  id: detect-water-body
  ...

We propose the Workflow app-water-body-cloud-native.cwl reading a STAC Item as input and orchestrating the Python command line tool.