mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2026-09-21 15:20:08 +00:00
104 lines
3.1 KiB
YAML
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
|