Issues and pull requests are welcome. Open an issue first for anything large, so we can agree the approach before you write it.
You need uv, just and podman. Then:
just deps # pinned Python tools and the test collections
just lint # yamllint, ansible-lint (production profile), zizmor
just test default rhel8just on its own lists every recipe.
- Every variable is in
defaults/main.yml,meta/argument_specs.ymland the README variables table, with the same default and description in all three. - Internal variables start with
__python_and live invars/main.ymlor are registered in tasks. - The bootstrap (
tasks/bootstrap.yml,tasks/push.yml) runs before the host has a usable Python, so it may only useraw,script, and tasks that run on the control node (set_fact,assert, delegated tasks). Delegated tasks setansible_python_interpretertoansible_playbook_python. - Use fully qualified module names, name every task, and keep
ansible-linton the production profile clean. Anoqaneeds a comment saying why. - Tasks must be idempotent:
just testruns an idempotence check on every platform. - Never commit a real host name, internal URL or credential. Tests use public mirrors and throwaway users.
- Docs and comments are in British English.
Write commit subjects in the imperative, wrapped at 72 characters. Add an entry under Unreleased in CHANGELOG.md.
Maintainers release with just release 1.2.3, which tags and pushes. The Release workflow then creates the GitHub release and imports the tag into Galaxy.