CI/CD Infrastructure Overview
This page is the entry point to the StellaOps CI/CD documentation. It explains how the pipeline is organized — the trigger tiers, workflow categories, environment promotion flow, and the determinism and supply-chain guarantees that the pipeline enforces. It is written for engineers who need to understand what runs when, and how to trigger releases.
Altitude note. Workflow names, schedules, and counts drift as the pipeline evolves; the authoritative definitions live in the workflow files under
.gitea/workflows/. Treat the tables below as orientation and verify specifics against the workflow sources. Where this page cites a count or time, it is a snapshot, not a contract.
Quick links
- Workflow Triggers & Dependencies
- Release Pipelines
- Security Scanning
- Test Strategy
- CI Recipes
- CI Architecture
- Path Filters Reference
Architecture Overview
The StellaOps CI/CD infrastructure uses Gitea Actions (GitHub Actions compatible) with a sophisticated multi-tier triggering strategy designed for:
- Determinism & Reproducibility - Identical builds across runs
- Offline-First Operation - Air-gap compatible pipelines
- Supply Chain Security - SLSA Level 2-3 compliance
- Developer Velocity - Fast PR feedback with comprehensive nightly testing
Pipeline Tiers
┌─────────────────────────────────────────────────────────────────────────┐
│ TRIGGER HIERARCHY │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ TIER 1: PR GATING (Every Pull Request) │
│ ├── test-matrix.yml (Unit, Architecture, Contract, Integration, │
│ │ Security, Golden) │
│ ├── build-test-deploy.yml (Build verification) │
│ ├── policy-lint.yml (Policy file validation) │
│ ├── sast-scan.yml (Static security analysis) │
│ └── docs.yml (Documentation validation) │
│ │
│ TIER 2: MAIN BRANCH (Post-Merge) │
│ ├── All Tier 1 workflows │
│ ├── build-test-deploy.yml → Deploy stage (staging environment) │
│ ├── integration-tests-gate.yml → Extended coverage │
│ └── coverage-report (Full coverage analysis) │
│ │
│ TIER 3: SCHEDULED (Nightly/Weekly) │
│ ├── nightly-regression.yml (2:00 AM UTC daily) │
│ ├── test-matrix.yml → Extended tests (5:00 AM UTC daily) │
│ ├── dependency-security-scan.yml (2:00 AM UTC Sunday) │
│ ├── renovate.yml (3:00 AM & 3:00 PM UTC daily) │
│ ├── sast-scan.yml (3:30 AM UTC Monday) │
│ └── migration-test.yml (4:30 AM UTC daily) │
│ │
│ TIER 4: RELEASE (Tag-Triggered) │
│ ├── release-suite.yml (suite-YYYY.MM tags) │
│ ├── release.yml (v* tags) │
│ └── module-publish.yml (module-*-v* tags) │
│ │
│ TIER 5: MANUAL (On-Demand) │
│ ├── cli-build.yml, scanner-determinism.yml │
│ ├── rollback.yml, promote.yml │
│ └── 20+ specialized test/debug workflows │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Workflow Categories
1. Core Build & Test (12 workflows)
| Workflow | Purpose | Triggers |
|---|---|---|
build-test-deploy.yml | Main build pipeline | PR, main push, daily, manual |
test-matrix.yml | Unified test execution | PR, main push, daily, manual |
integration-tests-gate.yml | Extended integration testing | PR, main push, manual |
nightly-regression.yml | Comprehensive nightly suite | Daily 2 AM UTC |
migration-test.yml | Database migration validation | PR (migrations), daily |
2. Release Automation (8 workflows)
| Workflow | Purpose | Triggers |
|---|---|---|
release-suite.yml | Ubuntu-style suite releases | suite-* tags, manual |
release.yml | Version bundle releases | v* tags, manual |
module-publish.yml | Per-module publishing | module-*-v* tags, manual |
cli-build.yml | Multi-platform CLI builds | Manual only |
promote.yml | Environment promotion | Manual only |
rollback.yml | Emergency rollback | Manual only |
3. Security Scanning (6 workflows)
| Workflow | Purpose | Triggers |
|---|---|---|
sast-scan.yml | Static code analysis | PR, main push, weekly |
secrets-scan.yml | Credential detection | PR, main push |
container-scan.yml | Image vulnerability scanning | Dockerfile changes, daily |
dependency-security-scan.yml | NuGet/npm vulnerability audit | Weekly, PR (deps) |
dependency-license-gate.yml | License compliance | PR (deps) |
4. Quality Assurance (15 workflows)
| Workflow | Purpose | Triggers |
|---|---|---|
policy-lint.yml | Policy file validation | PR, main push |
docs.yml | Documentation linting | docs/** changes |
scanner-determinism.yml | Output reproducibility | Manual only |
determinism-gate.yml | Build determinism | Manual only |
cross-platform-determinism.yml | Multi-OS verification | Manual only |
5. Module-Specific (30+ workflows)
Specialized workflows for individual modules (Scanner, Concelier, Authority, etc.)
Trigger Quick Reference
Branch Patterns
| Pattern | Example | Workflows Triggered |
|---|---|---|
Push to main | Direct commit or merge | All Tier 1 + Tier 2 |
Push to develop | Feature integration | Selected gating workflows |
| Pull Request | Any PR to main/develop | All Tier 1 (gating) |
Push to feature/* | Feature branches | None (PR required) |
Push to release/* | Release prep branches | Selected validation |
Tag Patterns
| Pattern | Example | Workflow |
|---|---|---|
v* | v2025.12.1 | release.yml |
suite-* | suite-2026.04 | release-suite.yml |
module-*-v* | module-authority-v1.2.3 | module-publish.yml |
Schedule Summary
| Time (UTC) | Frequency | Workflow |
|---|---|---|
| 2:00 AM | Daily | nightly-regression.yml |
| 2:00 AM | Sunday | dependency-security-scan.yml |
| 3:00 AM | Daily | renovate.yml |
| 3:30 AM | Monday | sast-scan.yml |
| 4:30 AM | Daily | migration-test.yml |
| 5:00 AM | Daily | build-test-deploy.yml, test-matrix.yml |
| 3:00 PM | Daily | renovate.yml |
Environment Flow
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ PR │───▶│ Staging │───▶│ Stable │───▶│ LTS │
│ (Preview)│ │ (Edge) │ │ (Tested) │ │(Long-Term)│
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
│ │ │ │
▼ ▼ ▼ ▼
PR tests Auto-deploy promote.yml promote.yml
(gating) on main merge (manual) (manual)
Environment Matrix
| Environment | Branch/Tag | Auto-Deploy | Rollback |
|---|---|---|---|
| Preview | PR | Yes (ephemeral) | N/A |
| Staging (Edge) | main | Yes | rollback.yml |
| Stable | v* tags | Manual | rollback.yml |
| LTS | suite-* tags | Manual | rollback.yml |
Key Features
1. PR-Gating Tests
Required tests that must pass before merge:
- Unit Tests - Fast, isolated tests
- Architecture Tests - Dependency rule enforcement
- Contract Tests - API compatibility
- Integration Tests - PostgreSQL integration
- Security Tests - Security-focused assertions
- Golden Tests - Corpus-based validation
2. Determinism Verification
All builds produce identical outputs:
- Binary checksums compared across runs
- UTC timezone enforcement (
TZ: UTC) - Stable JSON serialization
- Reproducible SBOM generation
3. Supply Chain Security
- SBOM Generation - Syft for CycloneDX/SPDX
- Artifact Signing - Cosign/Sigstore integration
- Provenance - in-toto/DSSE attestations
- Dependency Scanning - Automated vulnerability detection
4. Rollback Automation
Emergency rollback via rollback.yml:
- Target: < 5 minute SLA
- Helm-based deployment rollback
- Health check verification
- Notification integration
Directory Structure
.gitea/
├── workflows/ # workflow definitions
│ ├── build-test-deploy.yml
│ ├── test-matrix.yml
│ ├── release-suite.yml
│ └── ...
├── scripts/ # CI/CD scripts
│ ├── build/ # Build orchestration
│ ├── test/ # Test execution
│ ├── release/ # Release automation
│ ├── sign/ # Signing operations
│ └── validate/ # Validation scripts
└── docs/ # CI-specific docs
├── architecture.md
├── scripts.md
└── troubleshooting.md
devops/
├── scripts/
│ └── lib/ # Shared bash libraries
│ ├── logging.sh
│ ├── exit-codes.sh
│ ├── git-utils.sh
│ ├── path-utils.sh
│ └── hash-utils.sh
├── compose/ # Docker Compose profiles
├── helm/ # Helm charts
└── docker/ # Dockerfiles
Getting Started
Running Workflows Locally
# Run test matrix locally
./devops/scripts/test-local.sh
# Validate compose files
./devops/scripts/validate-compose.sh
# Run a specific test category
./.gitea/scripts/test/run-test-category.sh Unit
Triggering Manual Workflows
# Via Gitea UI: Actions → Workflow → Run workflow
# Or via API:
curl -X POST \
-H "Authorization: token $GITEA_TOKEN" \
"$GITEA_URL/api/v1/repos/owner/repo/actions/workflows/rollback.yml/dispatches" \
-d '{"ref":"main","inputs":{"environment":"staging","version":"v2025.12.0"}}'
Creating a Release
Module Release:
git tag module-authority-v1.2.3 git push origin module-authority-v1.2.3Suite Release:
git tag suite-2026.04 git push origin suite-2026.04Bundle Release:
git tag v2025.12.1 git push origin v2025.12.1
Related Documentation
- Workflow Triggers Deep Dive
- Release Pipeline Details
- Security Scanning Guide
- SARIF Integration Guide
- Build-Time DSSE Attestation Walkthrough
- Test Strategy
- CI Recipes
- CI Architecture
- Path Filters Reference
- Smart-Diff Scoring Configuration
- CI Quality Gates
Metrics & Monitoring
The targets below are the pipeline’s service-level objectives. Live workflow runs, test artifacts, and coverage reports are surfaced in the Gitea Actions UI for the repository (.gitea/workflows/); they are not part of this documentation tree.
| Metric | Target | Measurement |
|---|---|---|
| PR build time | < 15 min | Workflow duration |
| Main build time | < 20 min | Workflow duration |
| Test flakiness | < 1% | Flaky test detection |
| Security scan coverage | 100% | SAST/DAST coverage |
| Rollback SLA | < 5 min | Rollback workflow duration |
