Understand CIAO

_images/ciao.jpg

This section will introduce you to the Continuous Integration of Application Onboarding framework (CIAO), which is our tooling to create in a simple and quick way FAIR applications. CIAO extends Docker containers technology to be able to integrate all FAIR elements, adding layers for requirements, identification and portability. A CIAO app contains:

  • CIAOfile. This is a YAML file which contains the app information, list of requirements and parameters.

  • Dockerfile. A regular Docker definition file, at execution the container will run any defined task as ENTRYPOINT or CMD, the container will terminate after that execution.

  • Makefile. This is provided by the app template or the app you forked from the repository, this file is mandatory and should not be modified.

  • Source code and other required data needed to run the application.

  • compose.yml is only required for multicontainer applications.

  • bitbutcket-pipelines.yml is required if you are using BitBucket Pipelines to build and deploy your app, no changes are required to this file.

When the user selects an application, add input files and parameters, the process is then orchestrated by Databiology, the platform will take care of data and container transportation to the destination, execute the container and retrieve any generated results. Developers can expect the following consideration inside the container during execution:

  • The inbound data is mounted in the /scratch directory inside the container, you don’t need to create it in your Docker image.

  • Input files are in /scratch/input with the same relative path, the files are also linked in /scratch/inputresources for easy access.

  • Metadata is projected in /scratch/projection.json. This file will contains the metadata in JSON format as defined in the projection template for the application.

  • At the end of the container, only files written inside /scratch/results will be exported as output from the Workunit, all other files created outside that directory will be lost when the container finishes.

  • Any error or an empty /scratch/results directory will mark the Workunit as Failed.

The projection definition allows the developer to specify the required data for the app, also it allows to filter the inputs, for example, an application which only works with BAM files can use a filter like:

resources (validate: "name match '*.bam'") {
  id
  name
  relativePath
}

In this example, the template defines a requirement of using files ending in “.bam”, resource metadata is then projected in projection.json with resource id, name and relative path.

The projection template can be created in the Admin→Applications Admin→Projections page, after creation, the projection is linked to the app in the Edit App page.