OfflineKit Export CI Contract

Currency check 2026-10-07: owner paths/source placement verified against 3238bd511a37e199ae99d4f17be2f13eabec8dd7. The supported boundary is src/OfflineKit (src/OfflineKit/StellaOps.OfflineKit.Worker/Program.cs). Re-verify the host mount and owning endpoint extension together. This is source verification; deployment and broader audit coverage are separate evidence. Other dated findings retain their stated dates. Re-verify: rg -n "MapGroup|Map.*Endpoints|AddHostedService" src/OfflineKit/StellaOps.OfflineKit.Worker/Program.cs, then inspect the endpoint extension or library pointer cited at the operation.

Supported implementation

The deployable family is src/OfflineKit/: web and worker hosts plus owned libraries and tests. The predecessor ExportCenter build commands and MinIO pipeline specification below are historical design, not a declared running CI pipeline. This document does not establish completed CI liveness.

Build/test the current projects using the repository’s configured restore sources and targeted test wrapper:

dotnet build src/OfflineKit/StellaOps.OfflineKit.WebService/StellaOps.OfflineKit.WebService.csproj -c Release
dotnet build src/OfflineKit/StellaOps.OfflineKit.Worker/StellaOps.OfflineKit.Worker.csproj -c Release
pwsh -NoProfile -File tools/scripts/test-targeted-xunit.ps1 -Project src/OfflineKit/__Tests/StellaOps.ExportCenter.Tests/StellaOps.ExportCenter.Tests.csproj -All

Host-composition and persistence suites use PostgreSQL/Testcontainers; provision Docker and obey the disk-floor gate before invoking them. Use the actual projects under src/OfflineKit/__Tests/, rather than the historical MinIO fixture.

Checked-in assembly/federation-contract definitions are .gitea/workflows/offline-kit-assembly.yml and .gitea/workflows/airgap-federation-e2e.yml. Definition presence establishes source configuration only. Completed push-to-main evidence is required before claiming that a CI lane ran or passed.

Operator references

Historical Predecessor ExportCenter CI design 2026-05-30 (superseded 2026-09-14)

The remainder records the predecessor implementation or unlanded design at the dates stated in its text. All routes, host names, source paths, DTOs, metrics and examples in this section are historical comparison, including sentences that originally said “current” or “today”. They are not instructions for the consolidated estate. The supported section and owner source above supersede them. Do not rebuild or deploy a predecessor from these examples.

Audience: DevOps engineers maintaining the Export Center build pipeline. Tracking: DEVOPS-EXPORT-35-001. Related: Console CI contract · DevOps overview.

Goal: deterministic, offline-friendly CI for the Stella Ops Export Center services (WebService + Worker) with storage fixtures, smoke/perf gates, and observability artefacts.

Pipeline stages

  1. Setup
    • .NET SDK 10.x (cached); Node 20.x only if UI assets present.
    • Restore NuGet from local-nugets/ + cache; fail on external fetch (configure RestoreDisableParallel and source mapping).
    • Spin up MinIO (minio/minio:RELEASE.2024-10-08T09-56-18Z) via docker-compose fixture ops/devops/export/minio-compose.yml with deterministic credentials (exportci/exportci123).
  2. Build & lint
    • dotnet format --verify-no-changes on src/ExportCenter/**.
    • dotnet build src/ExportCenter/StellaOps.ExportCenter.WebService/StellaOps.ExportCenter.WebService.csproj -c Release /p:ContinuousIntegrationBuild=true.
  3. Unit/integration tests
    • dotnet test src/ExportCenter/__Tests/StellaOps.ExportCenter.Tests/StellaOps.ExportCenter.Tests.csproj -c Release --logger "trx;LogFileName=export-tests.trx"
    • Tests must use the MinIO fixture with bucket export-ci and deterministic seed objects (see Fixtures).
  4. Perf/smoke (optional, gated)
    • dotnet test ... --filter Category=Smoke against live MinIO; cap runtime < 90 s.
  5. Artifacts
    • Publish TRX to .artifacts/export-tests.trx.
    • Collect coverage to .artifacts/coverage (coverlet; lcov + summary).
    • Export the appsettings used for the run to .artifacts/appsettings.ci.json.
    • Syft SBOM: syft dir:./src/ExportCenter -o spdx-json=.artifacts/exportcenter.spdx.json.
  6. Dashboards (seed)
    • Produce starter Grafana JSON covering request rate, p95 latency, MinIO error rate, queue depth, and export-job duration histogram. Store under .artifacts/grafana/export-center-ci.json for import.

Fixtures

Determinism & Offline

Acceptance criteria