--- /dev/null
+# -*- 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/arvados-formula'
+ # `stage`
+ stage_lint: &stage_lint 'lint'
+ stage_release: &stage_release 'release'
+ stage_test: &stage_test 'test'
+ # `image`
+ image_commitlint: &image_commitlint 'myii/ssf-commitlint:11'
+ image_dindruby: &image_dindruby 'myii/ssf-dind-ruby:2.7.1-r3'
+ image_precommit: &image_precommit
+ name: 'myii/ssf-pre-commit:2.9.2'
+ entrypoint: ['/bin/bash', '-c']
+ image_rubocop: &image_rubocop 'pipelinecomponents/rubocop:latest'
+ image_semantic-release: &image_semanticrelease 'myii/ssf-semantic-release:15.14'
+ # `services`
+ services_docker_dind: &services_docker_dind
+ - 'docker:dind'
+ # `variables`
+ # https://forum.gitlab.com/t/gitlab-com-ci-caching-rubygems/5627/3
+ # https://bundler.io/v1.16/bundle_config.html
+ variables_bundler: &variables_bundler
+ BUNDLE_CACHE_PATH: '${CI_PROJECT_DIR}/.cache/bundler'
+ BUNDLE_WITHOUT: 'production'
+ # `cache`
+ cache_bundler: &cache_bundler
+ key: '${CI_JOB_STAGE}'
+ paths:
+ - '${BUNDLE_CACHE_PATH}'
+
+###############################################################################
+# Define stages and global variables
+###############################################################################
+stages:
+ - *stage_lint
+ - *stage_test
+ - *stage_release
+variables:
+ DOCKER_DRIVER: 'overlay2'
+
+###############################################################################
+# `lint` stage: `commitlint` & `pre-commit`
+###############################################################################
+commitlint:
+ stage: *stage_lint
+ image: *image_commitlint
+ script:
+ # Add `upstream` remote to get access to `upstream/master`
+ - 'git remote add upstream
+ https://gitlab.com/saltstack-formulas/arvados-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}"'
+ # `coqbot` adds a merge commit to test PRs on top of the latest commit in
+ # the repo; amend this merge commit message to avoid failure
+ - |
+ if [ "${GITLAB_USER_LOGIN}" = "coqbot" ] \
+ && [ "${CI_COMMIT_BRANCH}" != "master" ]; then
+ git commit --amend -m \
+ 'chore: reword coqbot merge commit message for commitlint'
+ export COMMITLINT_TO=HEAD
+ fi
+ # Run `commitlint`
+ - 'commitlint --from "${COMMITLINT_FROM}"
+ --to "${COMMITLINT_TO}"
+ --verbose'
+
+pre-commit:
+ stage: *stage_lint
+ image: *image_precommit
+ # https://pre-commit.com/#gitlab-ci-example
+ variables:
+ PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit'
+ cache:
+ key: '${CI_JOB_NAME}'
+ paths:
+ - '${PRE_COMMIT_HOME}'
+ script:
+ - 'pre-commit run --all-files --color always --verbose'
+
+# 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:
+ allow_failure: true
+ stage: *stage_lint
+ image: *image_rubocop
+ script:
+ - 'rubocop -d -P -S --enable-pending-cops'
+
+###############################################################################
+# Define `test` template
+###############################################################################
+.test_instance:
+ stage: *stage_test
+ image: *image_dindruby
+ services: *services_docker_dind
+ variables: *variables_bundler
+ cache: *cache_bundler
+ before_script:
+ # TODO: This should work from the env vars above automatically
+ - 'bundle config set path "${BUNDLE_CACHE_PATH}"'
+ - 'bundle config set without "${BUNDLE_WITHOUT}"'
+ - 'bundle install'
+ script:
+ # Alternative value to consider: `${CI_JOB_NAME}`
+ - 'bin/kitchen verify "${DOCKER_ENV_CI_JOB_NAME}"'
+
+###############################################################################
+# `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`
+# api-debian-10-tiamat-py3: {extends: '.test_instance'}
+# keepstore-debian-10-tiamat-py3: {extends: '.test_instance'}
+# shell-debian-10-tiamat-py3: {extends: '.test_instance'}
+# workbench-debian-10-tiamat-py3: {extends: '.test_instance'}
+# api-debian-9-tiamat-py3: {extends: '.test_instance'}
+# keepstore-debian-9-tiamat-py3: {extends: '.test_instance'}
+# shell-debian-9-tiamat-py3: {extends: '.test_instance'}
+# workbench-debian-9-tiamat-py3: {extends: '.test_instance'}
+# api-ubuntu-2004-tiamat-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-2004-tiamat-py3: {extends: '.test_instance'}
+# shell-ubuntu-2004-tiamat-py3: {extends: '.test_instance'}
+# workbench-ubuntu-2004-tiamat-py3: {extends: '.test_instance'}
+# api-ubuntu-1804-tiamat-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-1804-tiamat-py3: {extends: '.test_instance'}
+# shell-ubuntu-1804-tiamat-py3: {extends: '.test_instance'}
+# workbench-ubuntu-1804-tiamat-py3: {extends: '.test_instance'}
+# api-centos-7-tiamat-py3: {extends: '.test_instance'}
+# keepstore-centos-7-tiamat-py3: {extends: '.test_instance'}
+# shell-centos-7-tiamat-py3: {extends: '.test_instance'}
+# workbench-centos-7-tiamat-py3: {extends: '.test_instance'}
+# api-debian-10-master-py3: {extends: '.test_instance'}
+# keepstore-debian-10-master-py3: {extends: '.test_instance'}
+# shell-debian-10-master-py3: {extends: '.test_instance'}
+# workbench-debian-10-master-py3: {extends: '.test_instance'}
+# api-ubuntu-2004-master-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-2004-master-py3: {extends: '.test_instance'}
+# shell-ubuntu-2004-master-py3: {extends: '.test_instance'}
+# workbench-ubuntu-2004-master-py3: {extends: '.test_instance'}
+# api-ubuntu-1804-master-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-1804-master-py3: {extends: '.test_instance'}
+# shell-ubuntu-1804-master-py3: {extends: '.test_instance'}
+# workbench-ubuntu-1804-master-py3: {extends: '.test_instance'}
+# api-debian-10-3001-py3: {extends: '.test_instance'}
+# keepstore-debian-10-3001-py3: {extends: '.test_instance'}
+# shell-debian-10-3001-py3: {extends: '.test_instance'}
+# workbench-debian-10-3001-py3: {extends: '.test_instance'}
+# api-debian-9-3001-py3: {extends: '.test_instance'}
+# keepstore-debian-9-3001-py3: {extends: '.test_instance'}
+# shell-debian-9-3001-py3: {extends: '.test_instance'}
+# workbench-debian-9-3001-py3: {extends: '.test_instance'}
+# api-ubuntu-2004-3001-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-2004-3001-py3: {extends: '.test_instance'}
+# shell-ubuntu-2004-3001-py3: {extends: '.test_instance'}
+# workbench-ubuntu-2004-3001-py3: {extends: '.test_instance'}
+# api-ubuntu-1804-3001-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-1804-3001-py3: {extends: '.test_instance'}
+# shell-ubuntu-1804-3001-py3: {extends: '.test_instance'}
+# workbench-ubuntu-1804-3001-py3: {extends: '.test_instance'}
+# api-centos-7-3001-py3: {extends: '.test_instance'}
+# keepstore-centos-7-3001-py3: {extends: '.test_instance'}
+shell-centos-7-3001-py3: {extends: '.test_instance'}
+# workbench-centos-7-3001-py3: {extends: '.test_instance'}
+# api-debian-10-3000-3-py3: {extends: '.test_instance'}
+# keepstore-debian-10-3000-3-py3: {extends: '.test_instance'}
+# shell-debian-10-3000-3-py3: {extends: '.test_instance'}
+# workbench-debian-10-3000-3-py3: {extends: '.test_instance'}
+# api-debian-9-3000-3-py3: {extends: '.test_instance'}
+# keepstore-debian-9-3000-3-py3: {extends: '.test_instance'}
+# shell-debian-9-3000-3-py3: {extends: '.test_instance'}
+# workbench-debian-9-3000-3-py3: {extends: '.test_instance'}
+# api-ubuntu-1804-3000-3-py3: {extends: '.test_instance'}
+# keepstore-ubuntu-1804-3000-3-py3: {extends: '.test_instance'}
+# shell-ubuntu-1804-3000-3-py3: {extends: '.test_instance'}
+# workbench-ubuntu-1804-3000-3-py3: {extends: '.test_instance'}
+# api-centos-7-3000-3-py3: {extends: '.test_instance'}
+keepstore-centos-7-3000-3-py3: {extends: '.test_instance'}
+# shell-centos-7-3000-3-py3: {extends: '.test_instance'}
+# workbench-centos-7-3000-3-py3: {extends: '.test_instance'}
+# api-ubuntu-1804-3000-3-py2: {extends: '.test_instance'}
+# keepstore-ubuntu-1804-3000-3-py2: {extends: '.test_instance'}
+# shell-ubuntu-1804-3000-3-py2: {extends: '.test_instance'}
+# workbench-ubuntu-1804-3000-3-py2: {extends: '.test_instance'}
+
+###############################################################################
+# `release` stage: `semantic-release`
+###############################################################################
+semantic-release:
+ only: *only_branch_master_parent_repo
+ stage: *stage_release
+ image: *image_semanticrelease
+ variables:
+ MAINTAINER_TOKEN: '${GH_TOKEN}'
+ script:
+ # Update `AUTHORS.md`
+ - '${HOME}/go/bin/maintainer contributor'
+ # Run `semantic-release`
+ - 'semantic-release'