This repository contains reusable workflows to reduce duplication in actions in the Foreman project.
At this moment it's considered experimental.
To call Rubocop within your CI, use the following workflow:
name: CI
on: pull_request
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
rubocop:
name: Rubocop
uses: theforeman/actions/.github/workflows/rubocop.yml@v0
To run the Foreman tests once Rubocop has passed, use the following workflow:
name: CI
on:
pull_request:
push:
branches:
- 'develop'
- '*-stable'
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
rubocop:
name: Rubocop
uses: theforeman/actions/.github/workflows/rubocop.yml@v0
test:
name: Ruby
needs: rubocop
uses: theforeman/actions/.github/workflows/foreman_plugin.yml@v0
with:
plugin: MY_PLUGIN
By default, this will run with the Ruby/NodeJS combination that is configured in Foreman's .github/matrix.json
.
The Foreman version is specified using foreman_version
, which defaults to develop
.
To test out pull request number 1234, you can use:
jobs:
test:
name: Ruby
uses: theforeman/actions/.github/workflows/foreman_plugin.yml@v0
with:
plugin: MY_PLUGIN
foreman_version: refs/pull/1234/head
You can adjust this matrix by setting the matrix_include
and matrix_exclude
inputs to the workflow:
name: CI
on:
pull_request:
push:
branches:
- 'develop'
- '*-stable'
jobs:
test:
name: Ruby
uses: theforeman/actions/.github/workflows/foreman_plugin.yml@v0
with:
plugin: MY_PLUGIN
matrix_include: '[{"ruby": "3.0", "node": "20"}]'
matrix_exclude: '[{"ruby": "2.5", "node": "10"}, {"ruby": "2.5", "node": "12"}]'
You can run tests against multiple Foreman versions by using a matrix:
name: CI
on:
pull_request:
push:
branches:
- 'develop'
- '*-stable'
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
test:
name: Ruby
strategy:
fail-fast: false
matrix:
foreman:
- 3.9-stable
- develop
uses: theforeman/actions/.github/workflows/foreman_plugin.yml@v0
with:
plugin: MY_PLUGIN
foreman_version: ${{ matrix.foreman }}
If you need to set additional environment variables (e.g. to handle specific dependencies in your Gemfile), you can provide them via environment_variables
:
name: CI
on:
pull_request:
push:
branches:
- 'develop'
- '*-stable'
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
rubocop:
name: Rubocop
uses: theforeman/actions/.github/workflows/rubocop.yml@v0
test:
name: Ruby
needs: rubocop
uses: theforeman/actions/.github/workflows/foreman_plugin.yml@v0
with:
plugin: MY_PLUGIN
environment_variables: |
CUSTOM_ENV_VARIABLE_ONE=FOO
CUSTOM_ENV_VARIABLE_TWO=BAR
To run the Foreman plugin JavaScript/React tests, use the following workflow:
name: JavaScript
on:
pull_request:
push:
branches:
- 'develop'
- '*-stable'
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
test:
name: JavaScript
uses: theforeman/actions/.github/workflows/foreman_plugin_js.yml@v0
with:
plugin: MY_PLUGIN
By default, this will run with the NodeJS versions that is configured in Foreman's .github/matrix.json
.
You can alter the behavior the same way as with the Ruby tests.
Similar to the Foreman plugin test, this is aimed at Smart Proxy plugins.
Conceptually it verifies certain Ruby versions are supported and using test-gem.yml
to run the tests.
name: CI
on: pull_request
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
test:
name: Tests
uses: theforeman/actions/.github/workflows/smart_proxy_plugin.yml@v0
It's possible to provide foreman_proxy_version
via a parameter, but your Gemfile
needs to respect this:
gem 'smart_proxy', github: "theforeman/smart-proxy", branch: ENV.fetch('SMART_PROXY_BRANCH', 'develop')
To test a simple gem that only needs Ruby and bundler, use the following workflow:
name: CI
on: pull_request
concurrency:
group: ${{ github.ref_name }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
test:
name: Tests
uses: theforeman/actions/.github/workflows/test-gem.yml@v0
By default it uses bundle exec rake spec
but it's possible to override the command:
jobs:
test:
name: Tests
uses: theforeman/actions/.github/workflows/test-gem.yml@v0
with:
command: bundle exec rake test
To release a gem, use the following workflow
name: Release
on:
push:
# Pattern matched against refs/tags
tags:
- '**'
jobs:
release:
name: Release gem
uses: theforeman/actions/.github/workflows/release-gem.yml@v0
with:
allowed_owner: MY_USERNAME
secrets:
api_key: ${{ secrets.RUBYGEM_API_KEY }}