flowchart LR
commit(["commit to main"]) --> build
subgraph ci["Continuous Integration"]
direction TB
build["build<br/><i>pinned deps, hermetic</i>"]
unit["unit tests<br/><i>< 4 min</i>"]
scan["SAST + dependency<br/>+ secret scan"]
sign["sign artifact<br/>+ emit SBOM"]
build --> unit --> scan --> sign
end
sign --> reg[("artifact registry<br/><i>immutable, digest-addressed</i>")]
subgraph cd["Continuous Delivery"]
direction TB
dev["deploy dev<br/><i>auto</i>"]
ctest["contract tests"]
stage["deploy staging<br/><i>auto</i>"]
nft["performance +<br/>resilience suite"]
dev --> ctest --> stage --> nft
end
reg --> dev
nft --> gate{"release gate<br/><i>automated checks +<br/>change record</i>"}
gate -->|"pass"| canary["canary 5%<br/><i>15 min bake</i>"]
gate -->|"fail"| stop(["blocked"])
canary --> analyse{"error rate and<br/>latency within SLO?"}
analyse -->|"yes"| full["progressive rollout<br/><i>25% → 50% → 100%</i>"]
analyse -->|"no"| rollback(["automatic rollback"])
CI/CD Pipeline Diagram
The path from commit to production as ordered stages, showing what each one proves, what it produces, and where a human is still in the loop.