CI Targets¶
The make surface is the local entrypoint to the same check families used in CI.
Every generated report, cache, and build product is routed under artifacts/
through the package or repository artifact root.
Choose the Narrowest Target¶
| Intent | Target | Evidence |
|---|---|---|
| render public docs strictly | make docs-check |
generated config, staged source, and site under artifacts/docs/ |
| check docs links during quality | make docs-links |
package-configured link-check result |
| run primary tests | make test |
coverage, JUnit, logs, and test state under package artifacts |
| run unit-focused tests | make test-unit |
unit selection or configured filtered fallback |
| lint one file or directory | make lint-file file=…, make lint-dir dir=… |
focused lint output |
| run package lint | make lint |
tool logs under the lint artifact directory |
| inspect maintainability | make quality |
complexity, dead-code, typing, and configured quality logs |
| audit security | make security |
Bandit and dependency audit reports |
| validate API contracts | make api |
schema lint, drift, and package API evidence |
| detect OpenAPI drift | make openapi-drift |
generated-versus-pinned schema comparison |
| build release files | make build |
wheel, source archive, and Twine report |
| produce dependency inventory | make sbom |
production/development CycloneDX documents and summary |
Use focused targets while developing. make check is the complete repository
flow—lock, lint, test, quality, security, docs, API, build, and SBOM—and is
appropriate for final integration evidence rather than every documentation
edit.
Target Composition¶
flowchart TD
root["root target"] --> dispatch["package catalog dispatch"]
dispatch --> profile["package make profile"]
profile --> shared["shared CI module"]
shared --> evidence["artifacts/<package>/<check>/"]
The root makefile discovers package groups from the package catalog and invokes the corresponding package profile. Profiles set package-specific paths, markers, thresholds, API strategy, and optional checks. Shared modules implement the common tool lifecycle and artifact conventions.
This division means the target name describes intent while the package profile describes scope. Before reproducing a CI command manually, inspect the package matrix and its make profile rather than assuming every package runs identical tools or Python versions.
Documentation Targets¶
docs-check prepares a generated MkDocs source tree and effective configuration,
runs a strict build, and applies documentation hygiene. It uses an isolated
cache and site directory under repository artifacts. docs produces a local
site through the same preparation path. docs-serve coordinates a lock and
status file so multiple server processes do not compete for the configured
address.
docs-hygiene rejects generated site or cache directories at the repository
root. A successful build with root pollution is therefore still a failed docs
contract.
Test Scope¶
test is the primary configured suite. test-unit, test-e2e,
test-regression, and test-evaluation select owned subsets when the package
defines them. test-all removes the default marker restriction, and
test-all-plus-run-time additionally reports every duration. Those exhaustive
targets are intentionally separate because they can include slow, evaluation,
and real-local work.
Build and Supply Chain¶
build creates wheel and source distributions in the artifact directory and
runs Twine validation. Temporary package outputs are removed after the governed
artifacts are retained. sbom creates production and development inventories;
sbom-validate verifies their CycloneDX structure. Security checks retain both
human-readable and machine-consumable output rather than relying only on a
terminal exit code.
See Repository Verification Workflow for the job graph that invokes these targets.