Skip to content

Gitlab Ci

# This file is executed by the acceptance test suite (living documentation)
#
# Rules:
#   - Step definitions live in: <test-source-root>/steps/ (or equivalent per language)
#   - Keep scenarios focused: one behaviour per scenario.
#   - Use exact terms from specs/glossary.md.

Feature: Properties of GitLab CI/CD Pipelines
    As a software engineer
    I want all GitLab CI/CD pipelines to provide a certain set of functionalities
    So that I can efficiently and reproducably build, tests, deploy, etc.

    Scenario: Jobs of all GitLab pipelines, regardles of language or artifact type
        Given a generated .gitlab-ci.yml for:
            | Languange | Artifact Type |
            | cpp       | tool          |
            | cpp       | library       |
            | cpp       | service       |
            | go        | tool          |
            | go        | library       |
            | go        | service       |
            | java      | library       |
            | java      | service       |
        Then .gitlab-ci.yml contains at least the following jobs:
            | Job           | Purpose                                                             |
            | build         | Debug build                                                         |
            | release-build | Release build                                                       |
            | commit-lint   | Ensures commit messages follow recommendations                      |
            | lint          | Static code checks                                                  |
            | test          | Execute all unit/component tests on debug builds (JUnit XML report) |
            | scan          | Scans repository for secrets and vulnerabilities                    |
            | coverage      | Determines test coverage (Cobertura format)                         |
            | pages         | Builds documentation HTML site and publishes GitLab Pages           |


    Scenario: Jobs of GitLab pipelines specific to CLI tools and services
        Given a generated .gitlab-ci.yml for:
            | Languange | Artifact Type |
            | cpp       | tool          |
            | cpp       | service       |
            | go        | tool          |
            | go        | service       |
            | java      | service       |
        Then .gitlab-ci.yml contains at least the following jobs:
            | Job           | Purpose                                                    |
            | build-image   | Builds debuggable Docker image                             |
            | release-image | Builds non-debuggable Docker image                         |
            | scan-image    | Scans target Docker images for secrets and vulnerabilities |


    Scenario: Jobs of GitLab pipelines specific to C++ and Java libraries
        Given a generated .gitlab-ci.yml for:
            | Languange | Artifact Type |
            | cpp       | library       |
            | java      | library       |
        Then .gitlab-ci.yml contains at least the following jobs:
            | Job     | Purpose                                            |
            | package | Create Conan package (C++) or Maven package (Java) |
            | publish | Pushes package to GitLab Conan/Maven artifactory   |