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 |