|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +# vim: ft=yaml |
| 3 | +--- |
| 4 | +############################################################################### |
| 5 | +# Define all YAML node anchors |
| 6 | +############################################################################### |
| 7 | +.node_anchors: |
| 8 | + # `only` (also used for `except` where applicable) |
| 9 | + only_branch_master_parent_repo: &only_branch_master_parent_repo |
| 10 | + - 'master@saltstack-formulas/icinga2-formula' |
| 11 | + # `stage` |
| 12 | + stage_lint: &stage_lint 'lint' |
| 13 | + stage_release: &stage_release 'release' |
| 14 | + stage_test: &stage_test 'test' |
| 15 | + # `image` |
| 16 | + image_commitlint: &image_commitlint 'myii/ssf-commitlint:11' |
| 17 | + image_dindruby: &image_dindruby 'myii/ssf-dind-ruby:2.7.1-r3' |
| 18 | + image_precommit: &image_precommit |
| 19 | + name: 'myii/ssf-pre-commit:2.9.2' |
| 20 | + entrypoint: ['/bin/bash', '-c'] |
| 21 | + image_semantic-release: &image_semanticrelease 'myii/ssf-semantic-release:15.14' |
| 22 | + # `services` |
| 23 | + services_docker_dind: &services_docker_dind |
| 24 | + - 'docker:dind' |
| 25 | + # `variables` |
| 26 | + # https://forum.gitlab.com/t/gitlab-com-ci-caching-rubygems/5627/3 |
| 27 | + # https://bundler.io/v1.16/bundle_config.html |
| 28 | + variables_bundler: &variables_bundler |
| 29 | + BUNDLE_CACHE_PATH: '${CI_PROJECT_DIR}/.cache/bundler' |
| 30 | + BUNDLE_WITHOUT: 'production' |
| 31 | + # `cache` |
| 32 | + cache_bundler: &cache_bundler |
| 33 | + key: '${CI_JOB_STAGE}' |
| 34 | + paths: |
| 35 | + - '${BUNDLE_CACHE_PATH}' |
| 36 | + |
| 37 | +############################################################################### |
| 38 | +# Define stages and global variables |
| 39 | +############################################################################### |
| 40 | +stages: |
| 41 | + - *stage_lint |
| 42 | + - *stage_test |
| 43 | + - *stage_release |
| 44 | +variables: |
| 45 | + DOCKER_DRIVER: 'overlay2' |
| 46 | + |
| 47 | +############################################################################### |
| 48 | +# `lint` stage: `commitlint` & `pre-commit` |
| 49 | +############################################################################### |
| 50 | +commitlint: |
| 51 | + stage: *stage_lint |
| 52 | + image: *image_commitlint |
| 53 | + script: |
| 54 | + # Add `upstream` remote to get access to `upstream/master` |
| 55 | + - 'git remote add upstream ${CI_PROJECT_URL}.git' |
| 56 | + - 'git fetch --all' |
| 57 | + # Set default commit hashes for `--from` and `--to` |
| 58 | + - 'export COMMITLINT_FROM="$(git merge-base upstream/master HEAD)"' |
| 59 | + - 'export COMMITLINT_TO="${CI_COMMIT_SHA}"' |
| 60 | + # `coqbot` adds a merge commit to test PRs on top of the latest commit in |
| 61 | + # the repo; amend this merge commit message to avoid failure |
| 62 | + - | |
| 63 | + if [ "${GITLAB_USER_LOGIN}" = "coqbot" ] \ |
| 64 | + && [ "${CI_COMMIT_BRANCH}" != "master" ]; then |
| 65 | + git commit --amend -m \ |
| 66 | + 'chore: reword coqbot merge commit message for commitlint' |
| 67 | + export COMMITLINT_TO=HEAD |
| 68 | + fi |
| 69 | + # Run `commitlint` |
| 70 | + - 'commitlint --from "${COMMITLINT_FROM}" |
| 71 | + --to "${COMMITLINT_TO}" |
| 72 | + --verbose' |
| 73 | + |
| 74 | +pre-commit: |
| 75 | + stage: *stage_lint |
| 76 | + image: *image_precommit |
| 77 | + # https://pre-commit.com/#gitlab-ci-example |
| 78 | + variables: |
| 79 | + PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit' |
| 80 | + cache: |
| 81 | + key: '${CI_JOB_NAME}' |
| 82 | + paths: |
| 83 | + - '${PRE_COMMIT_HOME}' |
| 84 | + script: |
| 85 | + - 'pre-commit run --all-files --color always --verbose' |
| 86 | + |
| 87 | +############################################################################### |
| 88 | +# Define `test` template |
| 89 | +############################################################################### |
| 90 | +.test_instance: |
| 91 | + stage: *stage_test |
| 92 | + image: *image_dindruby |
| 93 | + services: *services_docker_dind |
| 94 | + variables: *variables_bundler |
| 95 | + cache: *cache_bundler |
| 96 | + before_script: |
| 97 | + # TODO: This should work from the env vars above automatically |
| 98 | + - 'bundle config set path "${BUNDLE_CACHE_PATH}"' |
| 99 | + - 'bundle config set without "${BUNDLE_WITHOUT}"' |
| 100 | + - 'bundle install' |
| 101 | + script: |
| 102 | + # Alternative value to consider: `${CI_JOB_NAME}` |
| 103 | + - 'bin/kitchen verify "${DOCKER_ENV_CI_JOB_NAME}"' |
| 104 | + |
| 105 | +############################################################################### |
| 106 | +# `test` stage: each instance below uses the `test` template above |
| 107 | +############################################################################### |
| 108 | +## Define the rest of the matrix based on Kitchen testing |
| 109 | +# Make sure the instances listed below match up with |
| 110 | +# the `platforms` defined in `kitchen.yml` |
| 111 | +# default-debian-10-master-py3: {extends: '.test_instance'} |
| 112 | +# default-ubuntu-1804-master-py3: {extends: '.test_instance'} |
| 113 | +# default-centos-8-master-py3: {extends: '.test_instance'} |
| 114 | +# default-fedora-31-master-py3: {extends: '.test_instance'} |
| 115 | +# default-opensuse-leap-151-master-py3: {extends: '.test_instance'} |
| 116 | +# default-amazonlinux-2-master-py3: {extends: '.test_instance'} |
| 117 | +# default-debian-10-2019-2-py3: {extends: '.test_instance'} |
| 118 | +# default-debian-9-2019-2-py3: {extends: '.test_instance'} |
| 119 | +# default-ubuntu-1804-2019-2-py3: {extends: '.test_instance'} |
| 120 | +# default-centos-8-2019-2-py3: {extends: '.test_instance'} |
| 121 | +# default-fedora-31-2019-2-py3: {extends: '.test_instance'} |
| 122 | +# default-opensuse-leap-151-2019-2-py3: {extends: '.test_instance'} |
| 123 | +# default-centos-7-2019-2-py2: {extends: '.test_instance'} |
| 124 | +# default-amazonlinux-2-2019-2-py3: {extends: '.test_instance'} |
| 125 | +# default-arch-base-latest-2019-2-py2: {extends: '.test_instance'} |
| 126 | +# default-fedora-30-2018-3-py3: {extends: '.test_instance'} |
| 127 | +# default-debian-9-2018-3-py2: {extends: '.test_instance'} |
| 128 | +# default-ubuntu-1604-2018-3-py2: {extends: '.test_instance'} |
| 129 | +# default-centos-7-2018-3-py2: {extends: '.test_instance'} |
| 130 | +# default-opensuse-leap-151-2018-3-py2: {extends: '.test_instance'} |
| 131 | +# default-amazonlinux-1-2018-3-py2: {extends: '.test_instance'} |
| 132 | +# default-arch-base-latest-2018-3-py2: {extends: '.test_instance'} |
| 133 | +# default-debian-8-2017-7-py2: {extends: '.test_instance'} |
| 134 | +# default-ubuntu-1604-2017-7-py2: {extends: '.test_instance'} |
| 135 | +# default-centos-6-2017-7-py2: {extends: '.test_instance'} |
| 136 | +# default-fedora-30-2017-7-py2: {extends: '.test_instance'} |
| 137 | +# default-opensuse-leap-151-2017-7-py2: {extends: '.test_instance'} |
| 138 | +# default-amazonlinux-1-2017-7-py2: {extends: '.test_instance'} |
| 139 | +# default-arch-base-latest-2017-7-py2: {extends: '.test_instance'} |
| 140 | + |
| 141 | +############################################################################### |
| 142 | +# `release` stage: `semantic-release` |
| 143 | +############################################################################### |
| 144 | +semantic-release: |
| 145 | + only: *only_branch_master_parent_repo |
| 146 | + stage: *stage_release |
| 147 | + image: *image_semanticrelease |
| 148 | + variables: |
| 149 | + MAINTAINER_TOKEN: '${GH_TOKEN}' |
| 150 | + script: |
| 151 | + # Update `AUTHORS.md` |
| 152 | + - '${HOME}/go/bin/maintainer contributor' |
| 153 | + # Run `semantic-release` |
| 154 | + - 'semantic-release' |
0 commit comments