The BitzOrcas pipeline is implemented; it is no longer a future plan. It has two independent evidence chains. Regular CI decides whether source code meets merge and release-candidate standards. Commercial GA decides whether one immutable commercial release batch is safe to deliver.
Critical path diagram
Follow the main path to identify responsibility handoffs, then use the prose to inspect failure branches and evidence.
Five regular CI job groups
| Job | PR | main push | Manual/nightly | Budget | Main evidence |
|---|---|---|---|---|---|
| Portability gate | ✓ | ✓ | ✓ | 30 min | ubuntu/windows/macos restore + Release build + architecture gates |
| Fast gate | ✓ | ✓ | ✓ | 15 min | Secrets, format, build, fast tests, local Consumer contract, XML |
| Release candidate | — | ✓ | ✓ | 30 min | Template matrix and non-Docker integration tests |
| Publish trim | — | — | ✓ | 15 min | Trim publish across linux-x64 / win-x64 / osx-arm64 |
| Docker contracts | — | — | ✓ | 30 min per shard | Thirteen Testcontainers contract shards (dispatch/nightly only) |
Fast gate
The Fast gate catches frequent, reproducible failures first:
Gitleaks → restore → format --verify-no-changes + IDE0005 unused-usings zeroed → OpenAPI drift check (check-openapi-drift.sh) → Release build → non-Integration tests → local PackageReference Consumer Contract → XML file and XML documentation checksThe Consumer Contract runs separately because it packs candidate NuGet packages, creates a temporary feed and isolated caches, and then restores, builds, tests, and trim-publishes an external project. It proves that packages are consumable; it does not prove that they have been formally released.
Release candidate
This job verifies canonical template combinations and upgrade behavior, then runs Category!=Docker integration tests. It stays off pull requests to avoid repeating the heavier template matrix during every review. Main pushes, manual runs, and nightly runs provide this evidence.
Publish trim
The trim job restores assets and runs -p:PublishTrimmed=true publish across the linux-x64, win-x64, and osx-arm64 matrix.
Docker contracts
Real-infrastructure contracts are split into thirteen shards inside docker-integration-contracts.yml: shared-port-a/b/c/d, shared-repository, shared-readmodel-queryshape, shared-generic, website, webhooks, messaging, authorization-capacity, core, and workflow. The workflow is invoked by release flows or nightly schedules rather than on every main push.
What Commercial GA verifies
Commercial GA is manual-only. It checks out the commit recorded by provenance, downloads an immutable artifact from a trusted release workflow, and verifies that:
- package IDs and versions match the commercial catalog;
- package SHA-256 values, Git commit, and provenance agree;
dotnet nuget verify --allaccepts signatures and trusted timestamps;- signer fingerprints exactly match the controlled set;
- the SBOM covers release packages and dependencies;
- vulnerability and third-party license policies pass;
- an external Consumer restores from the authenticated HTTPS feed with short-lived read-only credentials, then builds, tests, and publishes with empty caches.
Missing inputs produce external prerequisite unavailable and fail the gate. The workflow never repacks vendor source and never substitutes a local feed for the production feed.
Reproduce locally
Quality-gate entrypoints live in scripts/build/. GitHub Actions workflows live in .github/workflows/. The systemd Jenkinsfiles used by customer hosts live at repo-root ci/ and must not be folded into scripts/. Those check scripts are bash-first and run on Linux CI or Git Bash / WSL; they have no PowerShell counterparts.
Run the full local merge gate with:
scripts/build/verify-all.shFor workflow or build-script changes, start with the focused contract:
# ① Run from the repository root; each command is an independently verifiable step.dotnet test tests/BitzOrcas.Architecture.Tests \ --configuration Release \ --filter "FullyQualifiedName~CiQualityGateTests"
git diff --checkCheck whether Commercial GA inputs exist:
scripts/build/verify-commercial-ga.sh --check-prerequisitesCommon failures
| Area | Typical cause | First response |
|---|---|---|
| Gitleaks | A committed credential or test-value false positive | Revoke real credentials first; allow-list only confirmed false positives |
| Consumer Contract | Package closure, source mapping, or cache isolation | Start at the first restore error and temporary NuGet.Config |
| Release candidate | Template combination or upgrade drift | Run scripts/build/verify-template.sh directly |
| Docker shard | Image, resource, readiness, or parity assertion | Separate infrastructure failures from semantic failures |
| Trim | New reflection, RID assets, or incompatible dependency | Consult trim status; do not suppress warnings globally |
| Commercial GA | Missing external input or inconsistent release evidence | Supply missing infrastructure inputs; withdraw inconsistent releases |