|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- # -*- 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/chrony-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/chrony-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`
- default-debian-10-master-py3: {extends: '.test_instance'}
- # default-ubuntu-1804-master-py3: {extends: '.test_instance'}
- # default-centos-8-master-py3: {extends: '.test_instance'}
- # default-fedora-31-master-py3: {extends: '.test_instance'}
- # default-opensuse-leap-151-master-py3: {extends: '.test_instance'}
- # default-amazonlinux-2-master-py3: {extends: '.test_instance'}
- # default-debian-10-2019-2-py3: {extends: '.test_instance'}
- # default-debian-9-2019-2-py3: {extends: '.test_instance'}
- default-ubuntu-1804-2019-2-py3: {extends: '.test_instance'}
- # default-centos-8-2019-2-py3: {extends: '.test_instance'}
- # default-fedora-31-2019-2-py3: {extends: '.test_instance'}
- default-opensuse-leap-151-2019-2-py3: {extends: '.test_instance'}
- # default-centos-7-2019-2-py2: {extends: '.test_instance'}
- default-amazonlinux-2-2019-2-py3: {extends: '.test_instance'}
- # default-arch-base-latest-2019-2-py2: {extends: '.test_instance'}
- default-fedora-30-2018-3-py3: {extends: '.test_instance'}
- # default-debian-9-2018-3-py2: {extends: '.test_instance'}
- # default-ubuntu-1604-2018-3-py2: {extends: '.test_instance'}
- # default-centos-7-2018-3-py2: {extends: '.test_instance'}
- # default-opensuse-leap-151-2018-3-py2: {extends: '.test_instance'}
- # default-amazonlinux-1-2018-3-py2: {extends: '.test_instance'}
- default-arch-base-latest-2018-3-py2: {extends: '.test_instance'}
- # default-debian-8-2017-7-py2: {extends: '.test_instance'}
- # default-ubuntu-1604-2017-7-py2: {extends: '.test_instance'}
- # default-centos-6-2017-7-py2: {extends: '.test_instance'}
- # default-fedora-30-2017-7-py2: {extends: '.test_instance'}
- # default-opensuse-leap-151-2017-7-py2: {extends: '.test_instance'}
- # default-amazonlinux-1-2017-7-py2: {extends: '.test_instance'}
- # default-arch-base-latest-2017-7-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'
|