# -*- coding: utf-8 -*- # vim: ft=yaml --- ############################################################################### # Define all YAML node anchors ############################################################################### .node_anchors: # `only` (also used for `except` where applicable) only_branch_master_parent_repo: &only_branch_master_parent_repo - 'master@saltstack-formulas/sysctl-formula' # `stage` stage_cache: &stage_cache 'cache' stage_lint: &stage_lint 'lint' stage_release: &stage_release 'release' stage_test: &stage_test 'test' # `image` # yamllint disable rule:line-length image_commitlint: &image_commitlint 'techneg/ci-commitlint:v1.1.144@sha256:17a84d5fe3f9debb55efa93387d0286d0c9ca4451efa8a08d58e417db0b12805' image_dindruby: &image_dindruby 'techneg/ci-docker-python-ruby:v2.2.114@sha256:9eb3c93cd2c495b64c9f9776a9053d529a07460506b0b684ef3ca8220632e034' image_dindrubybionic: &image_dindrubybionic 'techneg/ci-docker-python-ruby:v2.2.114@sha256:9eb3c93cd2c495b64c9f9776a9053d529a07460506b0b684ef3ca8220632e034' image_precommit: &image_precommit 'techneg/ci-pre-commit:v2.5.47@sha256:d73cd0b63eb950a8b8bac3e5a20ec06c4224597681d921dd7ce803fbf5924465' image_rubocop: &image_rubocop 'pipelinecomponents/rubocop:latest@sha256:a2abed57112d1931b77b30138d8f6a211303f10f2d03d42513cfbe7de1e25963' image_semantic-release: &image_semanticrelease 'techneg/ci-semantic-release:v1.2.45@sha256:39e80afd903fd70dbeb8c9dc455a58acdf97e39d0283c15af126ecc34facfcfc' # `services` services_docker_dind: &services_docker_dind - 'docker:29.5.3-dind@sha256:7278248384185bcbb54c7a76b2f0a7d354c4aac920605cc1ab48968d961052fb' # yamllint enable rule:line-length # `variables` # https://forum.gitlab.com/t/gitlab-com-ci-caching-rubygems/5627/3 # https://bundler.io/v2.3/man/bundle-config.1.html variables_bundler: &variables_bundler BUNDLE_PATH: '${CI_PROJECT_DIR}/.cache/bundler' BUNDLE_DEPLOYMENT: 'true' bundle_install: &bundle_install - 'bundle version' - 'bundle config list' # `--no-cache` means don't bother caching the downloaded .gem files - 'time bundle install --no-cache' cache_bundler: &cache_bundler key: files: - 'Gemfile.lock' prefix: 'bundler' paths: - '${BUNDLE_PATH}' # https://pre-commit.com/#gitlab-ci-example variables_pre-commit: &variables_pre-commit PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit' cache_pre-commit: &cache_pre-commit key: files: - '.pre-commit-config.yaml' prefix: 'pre-commit' paths: - '${PRE_COMMIT_HOME}' ############################################################################### # Define stages and global variables ############################################################################### stages: - *stage_cache - *stage_lint - *stage_test - *stage_release variables: DOCKER_DRIVER: 'overlay2' ############################################################################### # `cache` stage: build up the bundler cache required before the `test` stage ############################################################################### build-cache: stage: *stage_cache image: *image_dindruby variables: *variables_bundler cache: *cache_bundler script: *bundle_install ############################################################################### # `lint` stage: `commitlint`, `pre-commit` & `rubocop` (latest, failure allowed) ############################################################################### .lint_job: stage: *stage_lint needs: [] commitlint: extends: '.lint_job' image: *image_commitlint script: # Add `upstream` remote to get access to `upstream/master` - 'git remote add upstream https://gitlab.com/saltstack-formulas/sysctl-formula.git' - 'git fetch --all' # Set default commit hashes for `--from` and `--to` - 'export COMMITLINT_FROM="$(git merge-base upstream/master HEAD)"' - 'export COMMITLINT_TO="${CI_COMMIT_SHA}"' # Run `commitlint` - 'commitlint --from "${COMMITLINT_FROM}" --to "${COMMITLINT_TO}" --verbose' pre-commit: extends: '.lint_job' image: *image_precommit # https://pre-commit.com/#gitlab-ci-example variables: *variables_pre-commit cache: *cache_pre-commit script: - 'pre-commit run --all-files --color always --verbose' - 'pre-commit run --color always --hook-stage manual commitlint-ci' # Use a separate job for `rubocop` other than the one potentially run by `pre-commit` # - The `pre-commit` check will only be available for formulas that pass the default # `rubocop` check -- and must continue to do so # - This job is allowed to fail, so can be used for all formulas # - Furthermore, this job uses all of the latest `rubocop` features & cops, # which will help when upgrading the `rubocop` linter used in `pre-commit` rubocop: extends: '.lint_job' allow_failure: true image: *image_rubocop script: - 'rubocop -d -P -S --enable-pending-cops' ############################################################################### # Define `test` template ############################################################################### .test_instance: &test_instance stage: *stage_test image: *image_dindruby services: *services_docker_dind variables: *variables_bundler cache: <<: *cache_bundler policy: 'pull' before_script: *bundle_install script: - 'echo "Starting test job: ${CI_JOB_NAME}"' - 'bin/kitchen verify "${CI_JOB_NAME}"' ############################################################################### # Define `test` template (`allow_failure: true`) ############################################################################### .test_instance_failure_permitted: <<: *test_instance allow_failure: true ############################################################################### # `test` stage: each instance below uses the `test` template above ############################################################################### ## Define the rest of the matrix based on Kitchen testing # Make sure the instances listed below match up with # the `platforms` defined in `kitchen.yml` # yamllint disable rule:line-length # Fedora 41+ will permit failure until this PR is merged into kitchen-docker # https://github.com/test-kitchen/kitchen-docker/pull/427 is merged # OpenSUSE master branch will fail until zypperpkg module is back in salt core # https://github.com/saltstack/great-module-migration/issues/14 # almalinux-9-master: {extends: '.test_instance_failure_permitted'} almalinux-8-master: {extends: '.test_instance_failure_permitted'} amazonlinux-2023-master: {extends: '.test_instance_failure_permitted'} amazonlinux-2-master: {extends: '.test_instance_failure_permitted'} centos-stream9-master: {extends: '.test_instance_failure_permitted'} debian-12-master: {extends: '.test_instance_failure_permitted'} debian-11-master: {extends: '.test_instance_failure_permitted'} fedora-41-master: {extends: '.test_instance_failure_permitted'} fedora-40-master: {extends: '.test_instance_failure_permitted'} opensuse-leap-156-master: {extends: '.test_instance_failure_permitted'} opensuse-tmbl-latest-master: {extends: '.test_instance_failure_permitted'} oraclelinux-9-master: {extends: '.test_instance_failure_permitted'} oraclelinux-8-master: {extends: '.test_instance_failure_permitted'} rockylinux-9-master: {extends: '.test_instance_failure_permitted'} rockylinux-8-master: {extends: '.test_instance_failure_permitted'} ubuntu-2404-master: {extends: '.test_instance_failure_permitted'} ubuntu-2204-master: {extends: '.test_instance_failure_permitted'} ubuntu-2004-master: {extends: '.test_instance_failure_permitted'} almalinux-9-3008: {extends: '.test_instance'} almalinux-8-3008: {extends: '.test_instance'} amazonlinux-2023-3008: {extends: '.test_instance'} amazonlinux-2-3008: {extends: '.test_instance_failure_permitted'} centos-stream9-3008: {extends: '.test_instance'} debian-12-3008: {extends: '.test_instance'} debian-11-3008: {extends: '.test_instance'} fedora-41-3008: {extends: '.test_instance_failure_permitted'} fedora-40-3008: {extends: '.test_instance'} opensuse-leap-156-3008: {extends: '.test_instance'} opensuse-tmbl-latest-3008: {extends: '.test_instance'} oraclelinux-9-3008: {extends: '.test_instance'} oraclelinux-8-3008: {extends: '.test_instance'} rockylinux-9-3008: {extends: '.test_instance'} rockylinux-8-3008: {extends: '.test_instance'} ubuntu-2404-3008: {extends: '.test_instance'} ubuntu-2204-3008: {extends: '.test_instance'} ubuntu-2004-3008: {extends: '.test_instance'} almalinux-9-3007: {extends: '.test_instance'} almalinux-8-3007: {extends: '.test_instance'} amazonlinux-2023-3007: {extends: '.test_instance'} amazonlinux-2-3007: {extends: '.test_instance_failure_permitted'} centos-stream9-3007: {extends: '.test_instance'} debian-12-3007: {extends: '.test_instance'} debian-11-3007: {extends: '.test_instance'} fedora-41-3007: {extends: '.test_instance_failure_permitted'} fedora-40-3007: {extends: '.test_instance'} opensuse-leap-156-3007: {extends: '.test_instance'} opensuse-tmbl-latest-3007: {extends: '.test_instance'} oraclelinux-9-3007: {extends: '.test_instance'} oraclelinux-8-3007: {extends: '.test_instance'} rockylinux-9-3007: {extends: '.test_instance'} rockylinux-8-3007: {extends: '.test_instance'} ubuntu-2404-3007: {extends: '.test_instance'} ubuntu-2204-3007: {extends: '.test_instance'} ubuntu-2004-3007: {extends: '.test_instance'} almalinux-9-3006: {extends: '.test_instance'} almalinux-8-3006: {extends: '.test_instance'} amazonlinux-2023-3006: {extends: '.test_instance'} amazonlinux-2-3006: {extends: '.test_instance_failure_permitted'} centos-stream9-3006: {extends: '.test_instance'} debian-12-3006: {extends: '.test_instance'} debian-11-3006: {extends: '.test_instance'} fedora-41-3006: {extends: '.test_instance_failure_permitted'} fedora-40-3006: {extends: '.test_instance'} opensuse-leap-156-3006: {extends: '.test_instance'} opensuse-tmbl-latest-3006: {extends: '.test_instance'} oraclelinux-9-3006: {extends: '.test_instance'} oraclelinux-8-3006: {extends: '.test_instance'} rockylinux-9-3006: {extends: '.test_instance'} rockylinux-8-3006: {extends: '.test_instance'} ubuntu-2404-3006: {extends: '.test_instance'} ubuntu-2204-3006: {extends: '.test_instance'} ubuntu-2004-3006: {extends: '.test_instance'} # yamllint enable rule:line-length ############################################################################### # `release` stage: `semantic-release` ############################################################################### semantic-release: stage: *stage_release image: *image_semanticrelease variables: MAINTAINER_TOKEN: '${GH_TOKEN}' script: # Run `semantic-release` - 'semantic-release'