GitHub Action
Test Ansible roles with Molecule
A GitHub action to test your Ansible role using Molecule.
This action can work with Molecule scenarios that use the docker
driver.
This action expects the following (default Ansible role) structure:
.
├── defaults
│ └── main.yml
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── molecule
│ └── default
│ ├── molecule.yml
│ ├── playbook.yml
│ └── prepare.yml
├── requirements.yml
├── tasks
│ └── main.yml
├── tox.ini # OPTIONAL
└── vars
└── main.yml
If you are missing the molecule
directory, please have a look at this skeleton role or one of the many examples listed on my website.
When tox.ini
is found, tox is used to test the role. Tox will install all dependecies found in tox.ini
itself, meaning tox.ini
determines the version of molecule that is used.
The Docker Hub namespace where the image is in. Default "robertdebock"
.
The image you want to run on. Default "fedora"
.
The tag of the container image to use. Default "latest"
.
The options to pass to tox
. For example parallel
. Default ""
. (empty)
The molecule command to use. For example create
. Default "test"
.
The molecule scenario to run. Default "default"
Here is a default configuration that tests your role on namespace: robertdebock
, image: fedora
, tag: latest
.
---
on:
- push
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: checkout
uses: actions/checkout@v3
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/[email protected]
NOTE: the
checkout
action needs to place the file in${{ github.repository }}
in order for Molecule to find your role.
If you want to test your role against multiple distributions, you can use this pattern:
---
name: CI
on:
- push
jobs:
lint:
runs-on: ubuntu-20.04
steps:
- name: checkout
uses: actions/checkout@v3
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/[email protected]
with:
command: lint
test:
needs:
- lint
runs-on: ubuntu-20.04
strategy:
matrix:
image:
- alpine
- amazonlinux
- debian
- centos
- fedora
- opensuse
- ubuntu
steps:
- name: checkout
uses: actions/checkout@v3
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/[email protected]
with:
image: "${{ matrix.image }}"
options: parallel
scenario: my_specific_scenario
You can enable Molecule debugging by using this pattern:
# Stuff omitted.
- name: molecule
uses: robertdebock/[email protected]
with:
image: ${{ matrix.config.image }}
tag: ${{ matrix.config.tag }}
command: "--debug test"