Files
matrix-docker-ansible-deploy/.github/workflows/molecule.yml
T

104 lines
3.1 KiB
YAML

# SPDX-FileCopyrightText: 2026 Slavi Pantaleev
#
# SPDX-License-Identifier: AGPL-3.0-or-later
---
name: Molecule
# Unlike the MASH role repositories, where one repository holds one role, every
# role here lives in the same repository. Running every scenario on every push
# would be unaffordable, so a first job works out which roles the push actually
# touched and the matrix is built from that. A push that changes documentation,
# or a role with no scenario yet, runs nothing at all.
on: # yamllint disable-line rule:truthy
push:
paths:
- "roles/custom/**"
- "molecule-shared/**"
- ".github/workflows/molecule.yml"
- "bin/molecule-select-roles.py"
- "bin/test-molecule-select-roles.py"
pull_request:
paths:
- "roles/custom/**"
- "molecule-shared/**"
- ".github/workflows/molecule.yml"
- "bin/molecule-select-roles.py"
- "bin/test-molecule-select-roles.py"
workflow_dispatch:
inputs:
role:
description: "Single role to test (directory name under roles/custom), or empty for all roles that have a scenario"
required: false
type: string
permissions:
contents: read
jobs:
detect:
name: Work out which roles to test
runs-on: ubuntu-latest
# Same rule as the MASH repositories: a pull request from a branch of this
# repository would otherwise run everything twice, once for the push and
# once for the pull request.
if: >-
github.event_name != 'pull_request'
|| github.event.pull_request.head.repo.full_name != github.repository
outputs:
roles: ${{ steps.detect.outputs.roles }}
steps:
- name: Check out
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
- name: Test scenario selection
run: python3 bin/test-molecule-select-roles.py
- name: Detect roles with a Molecule scenario that this change touches
id: detect
env:
EVENT_NAME: ${{ github.event_name }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
BEFORE_SHA: ${{ github.event.before }}
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
INPUT_ROLE: ${{ inputs.role }}
run: python3 bin/molecule-select-roles.py
molecule:
name: "Molecule: ${{ matrix.role }}"
runs-on: ubuntu-latest
needs: detect
if: needs.detect.outputs.roles != '[]'
strategy:
matrix:
role: ${{ fromJson(needs.detect.outputs.roles) }}
fail-fast: false
env:
MOLECULE_DISTRO: ubuntu2604
PY_COLORS: "1"
ANSIBLE_FORCE_COLOR: "1"
steps:
- name: Check out
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: "3.x"
- name: Install test dependencies
run: python3 -m pip install -r molecule-shared/requirements.txt
- name: Run Molecule
working-directory: roles/custom/${{ matrix.role }}
run: molecule test --scenario-name default