Skip to content

build

build #860

Workflow file for this run

name: build
on:
workflow_dispatch:
push:
branches: ['*']
tags:
- v*
pull_request:
type: [opened, reopened, edited]
schedule:
# run every night at midnight
- cron: '0 0 * * *'
jobs:
unit:
name: 'unit - ${{matrix.name}} - puppet (${{matrix.puppet}})'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# note: actions/setup-ruby only allows using a major.minor release of ruby
- ruby: '2.7'
puppet: "7.0"
check: "check:symlinks check:git_ignore check:dot_underscore check:test_file rubocop syntax lint metadata_lint"
name: 'static'
- ruby: '2.5'
puppet: "6.0"
check: "parallel_spec"
name: 'spec'
- ruby: '2.7'
puppet: "7.0"
check: "parallel_spec"
name: 'spec'
- ruby: '2.7'
puppet: "7.0"
check: 'strings:generate[,,,,,,"--fail-on-warning"]'
name: "documentation"
env:
CHECK: '${{ matrix.check }}'
PUPPET_GEM_VERSION: '~> ${{ matrix.puppet }}'
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: '${{ matrix.ruby }}'
- name: Bundle prep
run: |
gem install bundler
bundle -v
rm -f Gemfile.lock
# Update system gems if requested. This is useful to temporarily workaround troubles in the test runner"
# See https://github.com/puppetlabs/pdk-templates/commit/705154d5c437796b821691b707156e1b056d244f for an example of how this was used"
# Ignore exit code of SIGPIPE'd yes to not fail with shell's pipefail set"
[ -z "$RUBYGEMS_VERSION" ] || (yes || true) | gem update --system $RUBYGEMS_VERSION
gem --version
bundle -v
bundle config path vendor/bundle
bundle config without 'system_tests'
bundle lock
# restore cache AFTER doing 'bundle lock' so that Gemfile.lock exists
- uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-${{ matrix.puppet }}-${{ matrix.ruby }}-gems-unit-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.puppet }}-${{ matrix.ruby }}-gems-unit-
- name: Bundle install
run: |
bundle install --jobs $(nproc) --retry 3
- name: Test
run: |
bundle exec rake $CHECK
unit-python:
name: 'unit - ${{matrix.name}} - python (${{matrix.python}})'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# note: actions/setup-python only allows using a major.minor releases
- python: '3.8'
make_target: 'python3'
name: 'bolt tasks'
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v1
with:
python-version: '${{ matrix.python }}'
- uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-${{ matrix.python }}-pip-unit-${{ hashFiles('**/requirements*.txt') }}
restore-keys: |
${{ runner.os }}-${{ matrix.python }}-pip-unit-
- name: Python prep
run: |
pip install virtualenv
- name: Test
run: |
make ${{ matrix.make_target }}
integration:
name: 'integration - ${{matrix.name}}'
needs:
- unit
- unit-python
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# note: actions/setup-ruby only allows using a major.minor release of ruby
- ruby: '2.7'
name: 'centos7-puppet6'
- ruby: '2.7'
name: 'centos7-puppet7'
- ruby: '2.7'
name: 'rocky8-puppet6'
- ruby: '2.7'
name: 'rocky8-puppet7'
- ruby: '2.7'
name: 'ubuntu18-puppet6'
- ruby: '2.7'
name: 'ubuntu18-puppet7'
- ruby: '2.7'
name: 'ubuntu20-puppet6'
- ruby: '2.7'
name: 'ubuntu20-puppet7'
env:
CHECK: '${{ matrix.check }}'
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: '${{ matrix.ruby }}'
- name: Bundle prep
run: |
gem install bundler
bundle -v
rm -f Gemfile.lock
# Update system gems if requested. This is useful to temporarily workaround troubles in the test runner"
# See https://github.com/puppetlabs/pdk-templates/commit/705154d5c437796b821691b707156e1b056d244f for an example of how this was used"
# Ignore exit code of SIGPIPE'd yes to not fail with shell's pipefail set"
[ -z "$RUBYGEMS_VERSION" ] || (yes || true) | gem update --system $RUBYGEMS_VERSION
gem --version
bundle -v
# note: this path is relative to the Gemfile path below
bundle config path vendor/bundle
bundle config without 'system_tests'
# note: using custom gemfile for kitchen tests
bundle config gemfile build/kitchen/Gemfile
bundle lock
# restore cache AFTER doing 'bundle lock' so that Gemfile.lock exists
- uses: actions/cache@v2
with:
# note: this path is the Gemfile + path from above, so it's different than the base level Gemfile cache
path: build/kitchen/vendor/bundle
key: ${{ runner.os }}-${{ matrix.name }}-${{ matrix.ruby }}-gems-integration-v3-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.name }}-${{ matrix.ruby }}-gems-integration-v3-
- name: Bundle install
run: |
bundle install --jobs $(nproc) --retry 3
- name: Test
run: |
bundle exec kitchen test --debug ${{ matrix.name }}
deploy:
name: 'deploy - forge'
needs:
- unit
- unit-python
- integration
runs-on: ubuntu-latest
# only run deploy on tags that start with 'v'
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
# define a "strategy" here so we can use ruby/puppet as variables below
strategy:
fail-fast: false
matrix:
include:
# note: actions/setup-ruby only allows using a major.minor release of ruby
- ruby: '2.5'
puppet: "6.0"
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: '${{ matrix.ruby }}'
- name: Bundle prep
run: |
gem install bundler
bundle -v
rm -f Gemfile.lock
# Update system gems if requested. This is useful to temporarily workaround troubles in the test runner"
# See https://github.com/puppetlabs/pdk-templates/commit/705154d5c437796b821691b707156e1b056d244f for an example of how this was used"
# Ignore exit code of SIGPIPE'd yes to not fail with shell's pipefail set"
[ -z "$RUBYGEMS_VERSION" ] || (yes || true) | gem update --system $RUBYGEMS_VERSION
gem --version
bundle -v
bundle config path vendor/bundle
bundle config without 'system_tests'
bundle lock
# restore cache AFTER doing 'bundle lock' so that Gemfile.lock exists
- uses: actions/cache@v2
with:
# note: we are using the gems-unit cache here since it's the same and can take
# advantage for the cache we already have from the previous 'unit' job
path: vendor/bundle
key: ${{ runner.os }}-${{ matrix.puppet }}-${{ matrix.ruby }}-gems-unit-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.puppet }}-${{ matrix.ruby }}-gems-unit-
- name: Bundle install
run: |
bundle install --jobs $(nproc) --retry 3
- name: Build and Deploy
env:
# configure secrets here:
# https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets
BLACKSMITH_FORGE_USERNAME: '${{ secrets.PUPPET_FORGE_USERNAME }}'
BLACKSMITH_FORGE_PASSWORD: '${{ secrets.PUPPET_FORGE_PASSWORD }}'
# use puppet-blacksmith rake tasks to build and deploy the module
run: |
bundle exec rake module:build
bundle exec rake module:push
slack-notification:
name: Slack notification for failed master builds
if: always()
needs:
- unit
- unit-python
- integration
runs-on: ubuntu-latest
steps:
- name: Workflow conclusion
# this step creates an environment variable WORKFLOW_CONCLUSION and is the most reliable way to check the status of previous jobs
uses: technote-space/workflow-conclusion-action@v2
- name: CI Run Failure Slack Notification
if: ${{ env.WORKFLOW_CONCLUSION == 'failure' && github.ref == 'refs/heads/master' }}
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
uses: voxmedia/github-action-slack-notify-build@v1
with:
channel: puppet
status: FAILED
color: danger