An inventory group web-app-cst-<name> with applications.<id>.custom: true and
a pinned source {url, version, path} is pulled into roles/ before the play,
read raw (Jinja, Ansible tags and credential URLs refused), placed through a
staging directory under an exclusive lock, and owned by a marker that names
its own directory, so a pull or roles-clean never replaces or removes a
directory it did not place and a failed pull leaves roles/ as it was.
Directory inventories, host lists and non-UTF-8 files behave as Ansible
reads them; generated test deploys pass --skip-pull. make roles-pull,
roles-clean and roles list, INFINITO_EXTRA_MOUNTS for local sources, the
web-app-cst category, the reserved prefix lint and a central
repository_files() that also yields the gitignored custom roles let every
lint scan them like in-tree roles. Supersedes the uncommitted 045 External
Roles draft and reuses its fetch, sync and mount design.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Lint Scripts
This directory contains scripts that run repository lint checks.
- 🧹 Execute focused lint checks for workflows, Ansible, Python, and shell scripts
- 🔎 Keep lint entry points small, explicit, and callable from
make - ✅ Separate lint execution from tool installation and environment bootstrap
Changed files only 🎯
Outside CI, wrapper.sh lists every file changed since the merge-base of HEAD and INFINITO_LINT_DIFF_BASE (default origin/main, untracked files included) and hands the list to the container as LINT_DIFF_FILES. The ansible, javascript, markdown, mermaid, shellcheck and sql lints, and the matching workers of autoformat, then check only those files. They check every file again when the list names their own configuration or a shared lint script, when INFINITO_LINT_DIFF_BASE is empty or has no merge-base, and in CI. The rules live in diff/files.sh.
lint-ansible additionally skips ansible-lint while the tree matches the last green run, which autoformat records after a clean ansible-lint --fix (ansible/stamp.sh); the playbook syntax check always runs.
The scope of this folder is lint execution.
Tool installation belongs in scripts/install, while build and test workflows should stay in their dedicated script directories.