2.4 KiB
Isolated public-candidate acceptance
The Gitea workflow .gitea/workflows/public-candidate-acceptance.yml moves the expensive release
proof off a developer workstation and onto a Docker-capable server runner. It is manual-only and
accepts an exact canonical commit SHA. It does not invoke unraid-deploy.yml, the deploy controller
or the production Compose project.
The job creates a curated public export, validates its content manifest, scans it with Gitleaks, then creates a temporary parentless Git commit so release provenance describes the exact exported tree. From that tree it:
- builds API, Console, Node Agent and Runtime Worker images with OCI identity;
- produces the release manifest, checksums, CycloneDX inventory and image provenance;
- scans every exact image ID with checksum-pinned Trivy and rejects ambiguous reports or any HIGH/CRITICAL finding;
- starts API, Console, PostgreSQL and Redis with the production overlay under a unique
modelforge-rc-*Compose project; - uses newly generated secrets, loopback-only ephemeral host ports and project-scoped volumes;
- proves liveness, readiness, version identity, Console serving and both sides of the operator authentication boundary; and
- always removes the temporary containers, networks, volumes and four candidate image tags. An
independent
if: always()workflow cleanup repeats the exact project-label cleanup after a failure, cancellation or timeout; it never runs a host-wide Docker prune.
No Node Agent or Runtime Worker is started by this clean-install gate. Consequently it creates no
compute identity and cannot interact with the production GPU node. A later GPU qualification must
enrol a disposable rc-canary identity with production_eligible=false and retain that separate
evidence.
After the workflow exists on the default branch, dispatch it directly and enter the exact pushed
commit. Before merge, dispatch the existing Managed validation workflow on the candidate branch
with profile build; that profile calls the same acceptance workflow with gitea.sha. Use the
actual intended Console API origin for a publishable artifact; the managed-branch route uses
https://modelforge.example.test and therefore produces non-publishable infrastructure rehearsal
artifacts. Evidence is retained for 90 days. A failed scan or install is evidence of a blocker, not
permission to bypass the gate.