Skip to content

CI Targets

CI uses the same Make contracts as local verification. Workflows add event permissions, matrices, caches, artifact upload, and publication credentials; they do not create alternate definitions of testing, quality, security, API compatibility, or builds.

CI Model

flowchart TB
    workflow["workflow job"]
    target["ci-oriented make target"]
    owner["owning helper or fragment"]
    failure["same failure reason locally and in CI"]

    workflow --> target
    target --> owner
    owner --> failure

Two invocation levels are intentional. Repository jobs call root targets. Reusable package jobs select the same named profile used by root dispatch and invoke it with make -f <profile> -C <package> <target>.

Workflow invocation map

Workflow concern Make route CI-only responsibility
repository structure root check-shared-bijux-py, check-config-layout, check-make-layout, and help checkout and job reporting
package tests selected package profile install, then test package matrix and artifact upload
package lint, quality, security, API, build, or SBOM selected profile and named target matrix selection, cache, and runner environment
shared standards root standards check upstream reference and credentials
documentation root docs preparation and build target deployment environment and Pages publication
release artifacts selected package profile and release target tag validation, attestations, and publication credentials
flowchart TD
    workflow["workflow job"] --> event["permissions · matrix · cache"]
    event --> route{"proof scope"}
    route -->|repository| root["root Make target"]
    route -->|package| profile["named package profile and target"]
    root --> owner["same local owner"]
    profile --> owner
    owner --> verdict["same exit meaning and governed artifacts"]

The package profile path is derived from the selected package directory, not copied as a second capability inventory in workflow logic. A workflow failure should therefore be reproducible by the printed Make invocation once the same environment inputs are supplied.

CI rules

  • keep repository and package targets directly runnable outside Actions;
  • confine matrices, permissions, caches, and upload mechanics to workflows;
  • select packages through declared profiles and capabilities;
  • preserve the target’s nonzero exit and owner output;
  • upload evidence without treating upload success as proof success;
  • change Make ownership before changing a workflow to bypass a missing target.

First proof route

Read the workflow’s exact command, resolve its package profile or root target, and compare the environment variables and artifact paths with a local invocation. Inspect makes/bijux-py/ci/ only after the selected profile shows which shared target implementation is active.

Design Pressure

CI drift is present when a workflow replaces a failing target with direct tool calls, narrows a matrix without changing capability ownership, or uploads an artifact from a command whose failure was ignored. The fix belongs at the shared proof contract, not in workflow-only shell.