CI/CD Pipeline (Swimlanes)
Five lanes — developer, CI, artefacts, CD and environments — carrying a change from a pull request through signed images and a manual gate to production, with canary smoke tests and automated rollback.
Rendering…
Make it your own.
{
"nodes": [
{ "id": "l1", "type": "swimlane", "label": "Developer", "x": 20, "y": 20, "width": 1020, "height": 150, "fill": "rgba(224,242,254,0.35)", "stroke": "#0369a1" },
{ "id": "l2", "type": "swimlane", "label": "CI — build & test", "x": 20, "y": 190, "width": 1020, "height": 150, "fill": "rgba(219,234,254,0.35)", "stroke": "#1d4ed8" },
{ "id": "l3", "type": "swimlane", "label": "Artefacts", "x": 20, "y": 360, "width": 1020, "height": 150, "fill": "rgba(254,243,199,0.35)", "stroke": "#b45309" },
{ "id": "l4", "type": "swimlane", "label": "CD — Argo CD", "x": 20, "y": 530, "width": 1020, "height": 150, "fill": "rgba(237,233,254,0.35)", "stroke": "#6d28d9" },
{ "id": "l5", "type": "swimlane", "label": "Environments", "x": 20, "y": 700, "width": 1020, "height": 150, "fill": "rgba(220,252,231,0.35)", "stroke": "#15803d" },
{ "id": "dev", "type": "laptop", "label": "Feature branch", "x": 70, "y": 45, "width": 150, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "pr", "type": "card", "label": "Pull request + review","x": 260, "y": 45, "width": 150, "height": 104, "fill": "#e0f2fe", "stroke": "#0369a1" },
{ "id": "merge", "type": "ribbon", "label": "Merge to main", "x": 450, "y": 65, "width": 150, "height": 64, "fill": "#fde68a", "stroke": "#b45309", "bold": true },
{ "id": "build", "type": "gear", "label": "Build + unit tests", "x": 70, "y": 215, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "lint", "type": "clipboard", "label": "Lint + type check", "x": 260, "y": 215, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "sast", "type": "bug", "label": "SAST + dep scan", "x": 450, "y": 215, "width": 160, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" },
{ "id": "itest", "type": "flask", "label": "Integration tests", "x": 640, "y": 215, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "img", "type": "docker-container", "label": "Build image", "x": 830, "y": 215, "width": 150, "height": 104, "fill": "#dbeafe", "stroke": "#1d4ed8" },
{ "id": "ecr", "type": "container-registry", "label": "ECR — tagged images", "x": 70, "y": 385, "width": 160, "height": 104, "fill": "#fff7ed", "stroke": "#f97316" },
{ "id": "helm", "type": "file-stack", "label": "Helm chart repo", "x": 270, "y": 385, "width": 150, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
{ "id": "sbom", "type": "certificate", "label": "SBOM + cosign signature", "x": 460, "y": 385, "width": 170, "height": 104, "fill": "#fef3c7", "stroke": "#b45309" },
{ "id": "argo", "type": "cog-cluster", "label": "Argo CD sync", "x": 70, "y": 555, "width": 150, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9", "bold": true },
{ "id": "appr", "type": "gate", "label": "Manual approval gate","x": 260, "y": 555, "width": 160, "height": 104, "fill": "#ede9fe", "stroke": "#6d28d9" },
{ "id": "rollbk", "type": "arrow-left", "label": "Rollback to previous","x": 460, "y": 575, "width": 170, "height": 64, "fill": "#fee2e2", "stroke": "#b91c1c" },
{ "id": "denv", "type": "kubernetes", "label": "dev cluster", "x": 70, "y": 725, "width": 140, "height": 104, "fill": "#dcfce7", "stroke": "#15803d" },
{ "id": "senv", "type": "kubernetes", "label": "staging cluster", "x": 250, "y": 725, "width": 150, "height": 104, "fill": "#dcfce7", "stroke": "#15803d" },
{ "id": "penv", "type": "kubernetes", "label": "production cluster", "x": 440, "y": 725, "width": 160, "height": 104, "fill": "#dcfce7", "stroke": "#15803d", "bold": true },
{ "id": "smoke", "type": "gauge-chart", "label": "Canary + smoke tests","x": 640, "y": 725, "width": 160, "height": 104, "fill": "#dcfce7", "stroke": "#15803d" },
{ "id": "alert", "type": "bell", "label": "SLO alert", "x": 840, "y": 725, "width": 140, "height": 104, "fill": "#fee2e2", "stroke": "#b91c1c" }
],
"edges": [
{ "id": "c1", "source": "dev", "target": "pr" },
{ "id": "c2", "source": "pr", "target": "merge", "label": "2 approvals" },
{ "id": "c3", "source": "merge", "target": "build", "label": "push to main", "thickness": 3 },
{ "id": "c4", "source": "build", "target": "lint" },
{ "id": "c5", "source": "lint", "target": "sast" },
{ "id": "c6", "source": "sast", "target": "itest" },
{ "id": "c7", "source": "itest", "target": "img" },
{ "id": "c8", "source": "img", "target": "ecr", "label": "push :sha", "thickness": 2 },
{ "id": "c9", "source": "img", "target": "helm", "label": "bump values" },
{ "id": "c10", "source": "img", "target": "sbom", "label": "sign + attest" },
{ "id": "c11", "source": "ecr", "target": "argo", "thickness": 2 },
{ "id": "c12", "source": "helm", "target": "argo" },
{ "id": "c13", "source": "sbom", "target": "argo", "label": "policy check", "style": "dashed" },
{ "id": "c14", "source": "argo", "target": "denv", "label": "auto-sync" },
{ "id": "c15", "source": "argo", "target": "senv", "label": "auto-sync" },
{ "id": "c16", "source": "senv", "target": "appr", "label": "promote" },
{ "id": "c17", "source": "appr", "target": "penv", "label": "sync tag", "thickness": 2 },
{ "id": "c18", "source": "penv", "target": "smoke" },
{ "id": "c19", "source": "smoke", "target": "alert", "label": "error budget burn" },
{ "id": "c20", "source": "alert", "target": "rollbk","style": "dashed" },
{ "id": "c21", "source": "rollbk","target": "penv", "label": "previous revision", "style": "dashed" }
]
}