Skip to content

Continuous Integration

Application Package Software Configuration Management

The SCM has the task of tracking and controlling changes in the software as a part of the larger cross-disciplinary field of configuration management.

SCM practices include revision control and the establishment of baselines.

The Application Package code is hosted on a repository publicly accessible (Github, Bitbucket, a GitLab instance, an institutional software forge, etc.) using one of the version control systems supported by (Subversion, Mercurial and Git)

The Application Package code include, at the top level of the source code tree, the following files:

  • README containing a description of the software (name, purpose, pointers to website, documentation, development platform, contact, and support information, …)
  • AUTHORS, a list of all the persons to be credited for the software.
  • LICENSE, the project license terms. For Open Source Licenses, the standard SPDX license names are used. For large software projects and developers, the REUSE (https://reuse.software/) process and tools can be an option to look at.
  • codemeta.json, a linked data metadata file that helps index the source code in the Software Heritage archive and provides an easy way to link to other related research outputs.

The codemeta.json includes metadata information to support the Continuous Integration phase and it is shown below:

codemeta.json
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{
    "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
    "@type": "SoftwareSourceCode",
    "license": "https://spdx.org/licenses/CC-BY-NC-SA-4.0",
    "codeRepository": "https://github.com/eoap/inference-eoap.git",
    "dateCreated": "2023-05-16",
    "datePublished": "2023-05-16",
    "dateModified": "2023-05-16",
    "name": "Tile based classification",
    "version": "1.0.0",
    "description": "The tile based classification is a software package that allows to classify a Sentinel-2 Level 1C using a pre-trained model.",
    "developmentStatus": "active",
    "downloadUrl": "https://github.com/eoap/inference-eoap/releases/tag/1.0.0",
    "relatedLink": [
        "https://eoap.github.io/inference-eoap"
    ],
    "funder": {
        "@type": "Organization",
        "name": "Terradue"
    },
    "keywords": [
        "EUROSAT", "Sentinel-2", "Classification"
    ],
    "programmingLanguage": [
        "Python", "CWL"
    ],
    "softwareRequirements": [
        "container runtime",
        "cwl runner"
    ],
    "author": [
        {
            "@type": "Person",
            "givenName": "Jane",
            "familyName": "Doe",
            "email": "jane.doe@acme.earth",
            "affiliation": {
                "@type": "Organization",
                "name": "ACME"
            }
        },
        {
            "@type": "Person",
            "givenName": "John",
            "familyName": "Doe",
            "email": "john.doe@acme.earth",
            "affiliation": {
                "@type": "Organization",
                "name": "ACME"
            }
        }
    ]
}

Application Package Continuous Integration

A typical Continuous Integration scenario for an Application Package includes the release of the CWL document(s) and publishing the container images to a container registry.

This is depicted below:

graph TB SCM[(software repository)] SCM -- CWL Workflow --> A SCM -- codemeta.json --> B A(validate CWL Workflow) --> B(extract version) B --> C subgraph Build containers SCM -- Dockerfiles --> C C(build container) --> D(push container) end D -- push --> CR[(Container Registry)] D -- container sha256 --> F("update Dockerpull/metadata in CWL Workflows") F -- push --> AR[(Artifact Registry)] SCM -- codemeta.json --> F

Below an example of a GitHub CI configuration implementing the scenario:

.github/workflows/build.yaml
1

Artefacts

The released application package is published here: https://github.com/eoap/inference-eoap/releases/tag/1.0.0

The container is available at: https://github.com/eoap/inference-eoap/pkgs/container/inference-eoap%2Finference