Skip to content

CI/CD

Every INVA repo runs GitHub Actions on push and pull request. CI is the enforcement layer for the coding standards; nothing merges red.

The gate set

Gate Tool Applies to
Docs build mkdocs build --strict any repo with a wiki (broken links/nav fail)
Secret scan gitleaks all repos (full history on PRs)
Markdown lint markdownlint-cli2 all repos
Lint + format ruff / eslint + prettier code repos
Types mypy / tsc --noEmit code repos
Tests + coverage unittest/pytest + coverage, vitest code repos
IaC ansible-lint, tofu fmt -check/validate, shellcheck inva-infrastructure

Action versions are pinned and reviewed. Jobs run with least-privilege permissions: — read-only by default, widened per job only where a step needs it (e.g. the secret-scan summary).

Local parity

make check mirrors CI exactly, and .pre-commit-config.yaml runs the fast gates before a commit is even created. A contributor should never discover a lint/type failure only in CI.

Publication (gated)

Documentation publishing (e.g. eng.inva.is behind Cloudflare Access) and any website deploy are separate, approval-gated steps — a green build never auto-publishes to a production surface. Deploys to managed hosts flow through Ansible over WireGuard and are permission-gated (P3); see the Operations runbooks.