Merge pull request #7 from corvus-migratorius/ci-molecule
Add a CI workflow for Molecule
This commit is contained in:
87
.github/workflows/molecule.yml
vendored
Normal file
87
.github/workflows/molecule.yml
vendored
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
name: molecule
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
detect:
|
||||||
|
name: Detect changed roles
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.make-matrix.outputs.matrix }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Get PR files and build role matrix
|
||||||
|
id: make-matrix
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
if (!context.payload.pull_request?.number) {
|
||||||
|
core.setFailed('This workflow must be triggered by a pull_request event. No pull_request found in context.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// List files changed in the PR and extract top-level role folders under `roles/`
|
||||||
|
const files = await github.paginate(github.rest.pulls.listFiles, {
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: context.payload.pull_request.number,
|
||||||
|
per_page: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
const roles = Array.from(new Set(files.map(f => {
|
||||||
|
const m = f.filename.match(/^roles\/([^/]+)/);
|
||||||
|
return m ? `roles/${m[1]}` : null;
|
||||||
|
}).filter(Boolean)));
|
||||||
|
|
||||||
|
// If nothing changed, use a sentinel so the matrix is never empty (empty matrices fail the runner)
|
||||||
|
if (roles.length === 0) {
|
||||||
|
roles.push('__no_role__');
|
||||||
|
}
|
||||||
|
|
||||||
|
const matrix = { include: roles.map(r => ({ role: r })) };
|
||||||
|
core.setOutput('matrix', JSON.stringify(matrix));
|
||||||
|
|
||||||
|
console.log(matrix);
|
||||||
|
|
||||||
|
|
||||||
|
molecule:
|
||||||
|
name: Run Molecule
|
||||||
|
needs: detect
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix: ${{ fromJson(needs.detect.outputs.matrix) }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout the repo
|
||||||
|
if: ${{ matrix.role != '__no_role__' }}
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: "Set up micromamba"
|
||||||
|
uses: mamba-org/setup-micromamba@4d84239119b14cba1690b971f05c0bab912bea04
|
||||||
|
if: ${{ matrix.role != '__no_role__' }}
|
||||||
|
with:
|
||||||
|
micromamba-version: '2.4.0-0'
|
||||||
|
environment-file: ci/conda.yml
|
||||||
|
init-shell: bash
|
||||||
|
post-cleanup: 'all'
|
||||||
|
cache-environment: true
|
||||||
|
|
||||||
|
- name: "Install collection dependencies"
|
||||||
|
if: ${{ matrix.role != '__no_role__' }}
|
||||||
|
run: ansible-galaxy install -r requirements.yml
|
||||||
|
shell: micromamba-shell {0}
|
||||||
|
|
||||||
|
- name: "Run Molecule tests"
|
||||||
|
if: ${{ matrix.role != '__no_role__' }}
|
||||||
|
working-directory: ${{ matrix.role }}
|
||||||
|
run: molecule test
|
||||||
|
shell: micromamba-shell {0}
|
||||||
|
env:
|
||||||
|
PY_COLORS: '1'
|
||||||
|
ANSIBLE_FORCE_COLOR: '1'
|
||||||
|
# MOLECULE_DISTRO: ${{ matrix.distro }}
|
||||||
@@ -23,16 +23,7 @@ None
|
|||||||
Example Playbook
|
Example Playbook
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
```yaml
|
See: [converge.yml](molecule/default/converge.yml)
|
||||||
- role: mount_device
|
|
||||||
devices:
|
|
||||||
- what: /dev/vdb
|
|
||||||
where: "/somewhere"
|
|
||||||
fstype: ext4
|
|
||||||
opts:
|
|
||||||
- noatime
|
|
||||||
state: mounted
|
|
||||||
```
|
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|||||||
Reference in New Issue
Block a user