Export Center CI Contract

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