Thank you for your interest in contributing. This document is the onboarding entry point for development setup, testing, and pull requests.
Before you start, install the runtime tools listed in the README:
| Tool | Notes |
|---|---|
| Python 3.10+ | CLI runtime |
| Docker | Container execution (Linux containers) |
| act | Run GitHub Actions locally |
| mikefarah/yq v4+ | Required — see below |
Local CI requires mikefarah/yq v4+. Disambiguation, per-OS install commands, and verification: README — yq (mikefarah/yq v4 or newer).
All Python work happens under cli/:
cd cli
pip install -e ".[dev]"The [dev] extra installs pytest, ruff, mypy, pre-commit, and type stubs (cli/pyproject.toml).
Optional — install git hooks so lint and typecheck run before each commit:
pre-commit installHooks are defined in .pre-commit-config.yaml and mirror the CI lint and typecheck jobs.
From cli/:
pytestThis runs unit tests under tests/ and excludes tests/integration/ by default (norecursedirs in pyproject.toml). CI runs the same default set with coverage:
pytest --cov=localci --cov-report=term-missing -m "not integration"Integration tests exercise real act and Docker subprocesses. They require both tools installed and a running Docker daemon. When unavailable, the suite skips automatically.
To run them locally:
pytest tests/integration -m integration -vCI runs integration tests in a separate job after lint, typecheck, and unit tests pass (see .github/workflows/ci.yml).
From cli/:
ruff check localci/ tests/
ruff format localci/ tests/Ruff configuration lives in cli/pyproject.toml ([tool.ruff]).
From cli/:
mypy localci/Mypy runs in strict mode. Legacy CLI modules are temporarily suppressed via per-module overrides; localci.core.* and localci.utils.* must pass strict typing. Do not add new modules to the ignore_errors list.
Run all hooks against the full tree (useful before pushing):
pre-commit run -a- Branch from
develop(ormainfor release fixes). - Keep changes focused; link related issues in the PR description.
- Ensure CI is green — lint, typecheck, unit tests, and integration tests must pass.
- Request review from at least one maintainer. PRs need at least one approving review before merge.
Current maintainer: @bradjin8 (see .github/CODEOWNERS).
For usage questions and configuration, see the User Guide.