tribunal-kit 4.5.0 โ 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/README.md +4 -4
- package/.agent/ARCHITECTURE.md +279 -277
- package/.agent/GEMINI.md +127 -121
- package/.agent/agents/accessibility-reviewer.md +187 -187
- package/.agent/agents/ai-code-reviewer.md +199 -199
- package/.agent/agents/api-architect.md +71 -66
- package/.agent/agents/backend-specialist.md +219 -215
- package/.agent/agents/cloud-engineer.md +98 -0
- package/.agent/agents/code-archaeologist.md +168 -161
- package/.agent/agents/database-architect.md +184 -184
- package/.agent/agents/db-latency-auditor.md +213 -216
- package/.agent/agents/debugger.md +198 -191
- package/.agent/agents/dependency-reviewer.md +106 -103
- package/.agent/agents/devops-engineer.md +218 -218
- package/.agent/agents/documentation-writer.md +209 -201
- package/.agent/agents/explorer-agent.md +167 -160
- package/.agent/agents/frontend-reviewer.md +162 -160
- package/.agent/agents/frontend-specialist.md +257 -248
- package/.agent/agents/game-developer.md +48 -48
- package/.agent/agents/logic-reviewer.md +118 -116
- package/.agent/agents/mobile-developer.md +197 -200
- package/.agent/agents/mobile-reviewer.md +159 -162
- package/.agent/agents/orchestrator.md +187 -181
- package/.agent/agents/penetration-tester.md +160 -157
- package/.agent/agents/performance-optimizer.md +183 -183
- package/.agent/agents/performance-reviewer.md +178 -178
- package/.agent/agents/precedence-reviewer.md +251 -250
- package/.agent/agents/product-manager.md +149 -142
- package/.agent/agents/product-owner.md +81 -80
- package/.agent/agents/project-planner.md +152 -142
- package/.agent/agents/qa-automation-engineer.md +216 -225
- package/.agent/agents/resilience-reviewer.md +88 -88
- package/.agent/agents/schema-reviewer.md +67 -67
- package/.agent/agents/security-auditor.md +180 -174
- package/.agent/agents/seo-specialist.md +188 -193
- package/.agent/agents/sql-reviewer.md +159 -161
- package/.agent/agents/supervisor-agent.md +173 -184
- package/.agent/agents/swarm-worker-contracts.md +170 -166
- package/.agent/agents/swarm-worker-registry.md +92 -92
- package/.agent/agents/system-architect.md +85 -0
- package/.agent/agents/test-coverage-reviewer.md +158 -160
- package/.agent/agents/test-engineer.md +118 -118
- package/.agent/agents/throughput-optimizer.md +291 -299
- package/.agent/agents/type-safety-reviewer.md +182 -175
- package/.agent/agents/ui-ux-auditor.md +300 -292
- package/.agent/agents/vitals-reviewer.md +223 -223
- package/.agent/mcp_config.json +37 -40
- package/.agent/patterns/generator.md +11 -9
- package/.agent/patterns/inversion.md +14 -12
- package/.agent/patterns/pipeline.md +11 -9
- package/.agent/patterns/reviewer.md +15 -13
- package/.agent/patterns/tool-wrapper.md +11 -9
- package/.agent/routing_index.json +654 -0
- package/.agent/rules/GEMINI.md +358 -352
- package/.agent/scripts/compile_router.py +112 -0
- package/.agent/scripts/migrate_skills_frontmatter.py +64 -0
- package/.agent/scripts/strengthen_skills.js +1 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +56 -0
- package/.agent/skills/agent-organizer/SKILL.md +156 -150
- package/.agent/skills/agentic-patterns/SKILL.md +313 -315
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +190 -184
- package/.agent/skills/api-patterns/SKILL.md +253 -247
- package/.agent/skills/api-security-auditor/SKILL.md +195 -193
- package/.agent/skills/app-builder/SKILL.md +573 -572
- package/.agent/skills/app-builder/templates/SKILL.md +108 -115
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -119
- package/.agent/skills/appflow-wireframe/SKILL.md +146 -145
- package/.agent/skills/architecture/SKILL.md +226 -219
- package/.agent/skills/authentication-best-practices/SKILL.md +197 -189
- package/.agent/skills/backend-security-expert/SKILL.md +16 -2
- package/.agent/skills/bash-linux/SKILL.md +179 -179
- package/.agent/skills/behavioral-modes/SKILL.md +239 -223
- package/.agent/skills/brainstorming/SKILL.md +498 -486
- package/.agent/skills/browser-native-ai/SKILL.md +57 -4
- package/.agent/skills/building-native-ui/SKILL.md +202 -202
- package/.agent/skills/cicd-pro/SKILL.md +442 -0
- package/.agent/skills/clean-code/SKILL.md +400 -381
- package/.agent/skills/cloud-architect/SKILL.md +439 -0
- package/.agent/skills/code-review-checklist/SKILL.md +203 -194
- package/.agent/skills/config-validator/SKILL.md +165 -165
- package/.agent/skills/containerization-pro/SKILL.md +452 -0
- package/.agent/skills/csharp-developer/SKILL.md +518 -518
- package/.agent/skills/data-validation-schemas/SKILL.md +333 -328
- package/.agent/skills/database-design/SKILL.md +247 -240
- package/.agent/skills/deployment-procedures/SKILL.md +172 -169
- package/.agent/skills/devops-engineer/SKILL.md +345 -345
- package/.agent/skills/devops-incident-responder/SKILL.md +143 -137
- package/.agent/skills/doc.md +209 -177
- package/.agent/skills/documentation-templates/SKILL.md +291 -279
- package/.agent/skills/edge-computing/SKILL.md +183 -181
- package/.agent/skills/error-resilience/SKILL.md +411 -428
- package/.agent/skills/extract-design-system/SKILL.md +160 -158
- package/.agent/skills/framer-motion-expert/SKILL.md +253 -244
- package/.agent/skills/frontend-design/SKILL.md +208 -201
- package/.agent/skills/frontend-security-expert/SKILL.md +16 -3
- package/.agent/skills/game-design-expert/SKILL.md +132 -129
- package/.agent/skills/game-engineering-expert/SKILL.md +148 -146
- package/.agent/skills/generative-ui-expert/SKILL.md +57 -1
- package/.agent/skills/geo-fundamentals/SKILL.md +148 -147
- package/.agent/skills/git-pro/SKILL.md +435 -0
- package/.agent/skills/github-operations/SKILL.md +335 -329
- package/.agent/skills/gsap-core/SKILL.md +319 -308
- package/.agent/skills/gsap-frameworks/SKILL.md +213 -207
- package/.agent/skills/gsap-performance/SKILL.md +139 -133
- package/.agent/skills/gsap-plugins/SKILL.md +486 -480
- package/.agent/skills/gsap-react/SKILL.md +202 -189
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +357 -350
- package/.agent/skills/gsap-timeline/SKILL.md +165 -161
- package/.agent/skills/gsap-utils/SKILL.md +344 -338
- package/.agent/skills/harness-protocol/SKILL.md +48 -0
- package/.agent/skills/i18n-localization/SKILL.md +174 -163
- package/.agent/skills/intelligent-routing/SKILL.md +202 -246
- package/.agent/skills/knowledge-graph/SKILL.md +60 -52
- package/.agent/skills/lint-and-validate/SKILL.md +261 -261
- package/.agent/skills/llm-engineering/SKILL.md +400 -394
- package/.agent/skills/local-first/SKILL.md +178 -178
- package/.agent/skills/mcp-builder/SKILL.md +143 -142
- package/.agent/skills/mobile-design/SKILL.md +272 -263
- package/.agent/skills/monorepo-management/SKILL.md +335 -334
- package/.agent/skills/motion-engineering/SKILL.md +266 -234
- package/.agent/skills/nextjs-react-expert/SKILL.md +236 -234
- package/.agent/skills/nodejs-best-practices/SKILL.md +547 -548
- package/.agent/skills/observability/SKILL.md +343 -343
- package/.agent/skills/parallel-agents/SKILL.md +143 -146
- package/.agent/skills/performance-profiling/SKILL.md +259 -267
- package/.agent/skills/plan-writing/SKILL.md +150 -142
- package/.agent/skills/platform-engineer/SKILL.md +148 -147
- package/.agent/skills/playwright-best-practices/SKILL.md +188 -187
- package/.agent/skills/powershell-windows/SKILL.md +162 -162
- package/.agent/skills/project-idioms/SKILL.md +137 -137
- package/.agent/skills/python-patterns/SKILL.md +260 -259
- package/.agent/skills/python-pro/SKILL.md +324 -323
- package/.agent/skills/react-specialist/SKILL.md +305 -277
- package/.agent/skills/readme-builder/SKILL.md +310 -300
- package/.agent/skills/realtime-patterns/SKILL.md +323 -319
- package/.agent/skills/red-team-tactics/SKILL.md +231 -218
- package/.agent/skills/rust-pro/SKILL.md +671 -673
- package/.agent/skills/seo-fundamentals/SKILL.md +179 -179
- package/.agent/skills/server-management/SKILL.md +218 -214
- package/.agent/skills/shadcn-ui-expert/SKILL.md +231 -231
- package/.agent/skills/skill-creator/SKILL.md +87 -86
- package/.agent/skills/sql-pro/SKILL.md +629 -629
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +97 -97
- package/.agent/skills/swiftui-expert/SKILL.md +204 -201
- package/.agent/skills/system-design-pro/SKILL.md +345 -0
- package/.agent/skills/systematic-debugging/SKILL.md +153 -142
- package/.agent/skills/tailwind-patterns/SKILL.md +610 -566
- package/.agent/skills/tdd-workflow/SKILL.md +169 -161
- package/.agent/skills/test-result-analyzer/SKILL.md +313 -309
- package/.agent/skills/testing-patterns/SKILL.md +566 -579
- package/.agent/skills/trend-researcher/SKILL.md +243 -237
- package/.agent/skills/typescript-advanced/SKILL.md +336 -335
- package/.agent/skills/ui-ux-pro-max/SKILL.md +590 -562
- package/.agent/skills/ui-ux-researcher/SKILL.md +244 -244
- package/.agent/skills/vue-expert/SKILL.md +294 -275
- package/.agent/skills/vulnerability-scanner/SKILL.md +416 -404
- package/.agent/skills/web-accessibility-auditor/SKILL.md +219 -218
- package/.agent/skills/web-design-guidelines/SKILL.md +192 -186
- package/.agent/skills/webapp-testing/SKILL.md +167 -169
- package/.agent/skills/webgpu-performance/SKILL.md +56 -2
- package/.agent/skills/whimsy-injector/SKILL.md +346 -325
- package/.agent/skills/workflow-optimizer/SKILL.md +231 -229
- package/.agent/workflows/acf.md +141 -0
- package/.agent/workflows/api-tester.md +176 -151
- package/.agent/workflows/audit.md +150 -127
- package/.agent/workflows/brainstorm.md +134 -110
- package/.agent/workflows/changelog.md +140 -112
- package/.agent/workflows/create.md +168 -124
- package/.agent/workflows/debug.md +190 -165
- package/.agent/workflows/deploy.md +201 -180
- package/.agent/workflows/enhance.md +154 -128
- package/.agent/workflows/fix.md +136 -114
- package/.agent/workflows/generate.md +198 -183
- package/.agent/workflows/marathon.md +37 -11
- package/.agent/workflows/migrate.md +184 -160
- package/.agent/workflows/orchestrate.md +192 -168
- package/.agent/workflows/performance-benchmarker.md +135 -114
- package/.agent/workflows/plan.md +196 -173
- package/.agent/workflows/preview.md +103 -80
- package/.agent/workflows/refactor.md +192 -161
- package/.agent/workflows/review-ai.md +125 -101
- package/.agent/workflows/review.md +141 -116
- package/.agent/workflows/session.md +122 -94
- package/.agent/workflows/status.md +101 -79
- package/.agent/workflows/strengthen-skills.md +164 -138
- package/.agent/workflows/super-prompt.md +24 -0
- package/.agent/workflows/swarm.md +193 -179
- package/.agent/workflows/test.md +211 -189
- package/.agent/workflows/tribunal-backend.md +136 -105
- package/.agent/workflows/tribunal-database.md +122 -95
- package/.agent/workflows/tribunal-frontend.md +221 -96
- package/.agent/workflows/tribunal-full.md +129 -100
- package/.agent/workflows/tribunal-mobile.md +122 -95
- package/.agent/workflows/tribunal-performance.md +136 -110
- package/.agent/workflows/tribunal-speed.md +209 -183
- package/.agent/workflows/ui-ux-pro-max.md +145 -122
- package/README.md +107 -55
- package/bin/mcp-server.js +159 -0
- package/bin/tribunal-kit.js +105 -29
- package/bin/wrapper.js +16 -7
- package/mcp_config.json +9 -0
- package/package.json +94 -86
- package/scripts/changelog.js +4 -3
- package/scripts/validate-payload.js +6 -1
- package/scripts/postinstall.js +0 -127
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cicd-pro
|
|
3
|
+
description: Enterprise-grade CI/CD mastery. Golden Path - GitHub Actions + Docker + AWS ECS. 3-stage pipeline architecture (ValidateโBuildโDeploy), OIDC-based AWS auth (no static secrets), Blue/Green and Canary deployment with ECS, environment promotion gates (devโstagingโproduction), rollback playbooks, Slack notifications, and reusable workflow patterns. Use when designing or implementing production CI/CD pipelines.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
last-updated: 2026-06-21
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
+
routing:
|
|
9
|
+
domain: devops
|
|
10
|
+
tier: pro
|
|
11
|
+
co-requires: [containerization-pro, cloud-architect]
|
|
12
|
+
trigger-signals:
|
|
13
|
+
strong: [CI/CD pipeline, GitHub Actions, Blue/Green deploy, OIDC AWS]
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Hallucination Traps (Read First)
|
|
17
|
+
|
|
18
|
+
- โ Missing `concurrency:` block โ โ
Without it, parallel deploys collide and corrupt production state
|
|
19
|
+
- โ `${{ secrets.GITHUB_TOKEN }}` for cross-repo operations โ โ
GITHUB_TOKEN scope is limited to current repo; use GitHub App token or PAT
|
|
20
|
+
- โ Static `AWS_ACCESS_KEY_ID` secrets โ โ
Use OIDC (`id-token: write` permission + `configure-aws-credentials` action)
|
|
21
|
+
- โ Deploying directly to production on every push โ โ
Always have a staging gate; production requires approval environment
|
|
22
|
+
- โ Skipping rollback strategy โ โ
Every deploy pipeline must define a concrete rollback path before execution
|
|
23
|
+
- โ `actions/checkout@v3` โ โ
Always use `@v4` (v3 is deprecated and uses Node 16)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# CI/CD Pro โ Enterprise Pipeline Mastery
|
|
28
|
+
|
|
29
|
+
## 1. The 3-Stage Pipeline Model
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
33
|
+
โ VALIDATE (Parallel) BUILD DEPLOY โ
|
|
34
|
+
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโโ โ
|
|
35
|
+
โ โ lint โ โ Docker โ โ staging โ โ
|
|
36
|
+
โ โ typecheck โโโall passโโโ โ build + โโโโ โ (auto) โ โ
|
|
37
|
+
โ โ unit tests โ โ ECR pushโ โโโโโโโโโโโโ โ
|
|
38
|
+
โ โ sec audit โ โโโโโโโโโโโ โ โ
|
|
39
|
+
โ โโโโโโโโโโโโโโโ manual approval โ
|
|
40
|
+
โ โ โ
|
|
41
|
+
โ โโโโโโโโโโโโ โ
|
|
42
|
+
โ โ productionโ โ
|
|
43
|
+
โ โ (gated) โ โ
|
|
44
|
+
โ โโโโโโโโโโโโ โ
|
|
45
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 2. Complete Pipeline (GitHub Actions + AWS ECS)
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
# .github/workflows/ci-cd.yml
|
|
54
|
+
name: CI/CD
|
|
55
|
+
|
|
56
|
+
on:
|
|
57
|
+
push:
|
|
58
|
+
branches: [main]
|
|
59
|
+
pull_request:
|
|
60
|
+
branches: [main]
|
|
61
|
+
|
|
62
|
+
# โ
CRITICAL: Prevent parallel deploys to same environment
|
|
63
|
+
concurrency:
|
|
64
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
65
|
+
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
|
66
|
+
|
|
67
|
+
env:
|
|
68
|
+
AWS_REGION: us-east-1
|
|
69
|
+
ECR_REPOSITORY: myapp
|
|
70
|
+
ECS_CLUSTER: myapp-prod
|
|
71
|
+
ECS_SERVICE: myapp-api
|
|
72
|
+
|
|
73
|
+
jobs:
|
|
74
|
+
# โโโโ STAGE 1: VALIDATE (parallel) โโโโ
|
|
75
|
+
lint:
|
|
76
|
+
name: Lint & Type Check
|
|
77
|
+
runs-on: ubuntu-latest
|
|
78
|
+
steps:
|
|
79
|
+
- uses: actions/checkout@v4
|
|
80
|
+
- uses: actions/setup-node@v4
|
|
81
|
+
with:
|
|
82
|
+
node-version: 22
|
|
83
|
+
cache: npm
|
|
84
|
+
- run: npm ci
|
|
85
|
+
- run: npm run lint
|
|
86
|
+
- run: npm run typecheck
|
|
87
|
+
|
|
88
|
+
test:
|
|
89
|
+
name: Unit & Integration Tests
|
|
90
|
+
runs-on: ubuntu-latest
|
|
91
|
+
steps:
|
|
92
|
+
- uses: actions/checkout@v4
|
|
93
|
+
- uses: actions/setup-node@v4
|
|
94
|
+
with:
|
|
95
|
+
node-version: 22
|
|
96
|
+
cache: npm
|
|
97
|
+
- run: npm ci
|
|
98
|
+
- run: npm test -- --coverage
|
|
99
|
+
- uses: actions/upload-artifact@v4
|
|
100
|
+
if: always()
|
|
101
|
+
with:
|
|
102
|
+
name: coverage-report
|
|
103
|
+
path: coverage/
|
|
104
|
+
|
|
105
|
+
security:
|
|
106
|
+
name: Security Audit
|
|
107
|
+
runs-on: ubuntu-latest
|
|
108
|
+
steps:
|
|
109
|
+
- uses: actions/checkout@v4
|
|
110
|
+
- run: npm audit --audit-level=high
|
|
111
|
+
- uses: github/codeql-action/init@v3
|
|
112
|
+
with:
|
|
113
|
+
languages: javascript-typescript
|
|
114
|
+
- uses: github/codeql-action/analyze@v3
|
|
115
|
+
|
|
116
|
+
# โโโโ STAGE 2: BUILD โโโโ
|
|
117
|
+
build:
|
|
118
|
+
name: Build & Push Docker Image
|
|
119
|
+
runs-on: ubuntu-latest
|
|
120
|
+
needs: [lint, test, security]
|
|
121
|
+
if: github.ref == 'refs/heads/main' # only build on main merge
|
|
122
|
+
permissions:
|
|
123
|
+
id-token: write
|
|
124
|
+
contents: read
|
|
125
|
+
outputs:
|
|
126
|
+
image: ${{ steps.push.outputs.image }}
|
|
127
|
+
|
|
128
|
+
steps:
|
|
129
|
+
- uses: actions/checkout@v4
|
|
130
|
+
|
|
131
|
+
- name: Configure AWS (OIDC โ no static keys)
|
|
132
|
+
uses: aws-actions/configure-aws-credentials@v4
|
|
133
|
+
with:
|
|
134
|
+
role-to-assume: ${{ secrets.AWS_DEPLOY_ROLE_ARN }}
|
|
135
|
+
aws-region: ${{ env.AWS_REGION }}
|
|
136
|
+
|
|
137
|
+
- name: Login to ECR
|
|
138
|
+
id: login-ecr
|
|
139
|
+
uses: aws-actions/amazon-ecr-login@v2
|
|
140
|
+
|
|
141
|
+
- name: Set up Docker Buildx
|
|
142
|
+
uses: docker/setup-buildx-action@v3
|
|
143
|
+
|
|
144
|
+
- name: Build and push image
|
|
145
|
+
id: push
|
|
146
|
+
uses: docker/build-push-action@v5
|
|
147
|
+
with:
|
|
148
|
+
context: .
|
|
149
|
+
push: true
|
|
150
|
+
tags: |
|
|
151
|
+
${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ github.sha }}
|
|
152
|
+
${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:latest
|
|
153
|
+
cache-from: type=gha
|
|
154
|
+
cache-to: type=gha,mode=max
|
|
155
|
+
|
|
156
|
+
- name: Scan image for vulnerabilities
|
|
157
|
+
uses: aquasecurity/trivy-action@master
|
|
158
|
+
with:
|
|
159
|
+
image-ref: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ github.sha }}
|
|
160
|
+
severity: CRITICAL
|
|
161
|
+
exit-code: "1" # fail on critical vulnerabilities
|
|
162
|
+
|
|
163
|
+
# โโโโ STAGE 3: DEPLOY STAGING โโโโ
|
|
164
|
+
deploy-staging:
|
|
165
|
+
name: Deploy to Staging
|
|
166
|
+
runs-on: ubuntu-latest
|
|
167
|
+
needs: build
|
|
168
|
+
environment: staging # maps to GitHub Environment (can have protection rules)
|
|
169
|
+
permissions:
|
|
170
|
+
id-token: write
|
|
171
|
+
contents: read
|
|
172
|
+
|
|
173
|
+
steps:
|
|
174
|
+
- uses: actions/checkout@v4
|
|
175
|
+
|
|
176
|
+
- uses: aws-actions/configure-aws-credentials@v4
|
|
177
|
+
with:
|
|
178
|
+
role-to-assume: ${{ secrets.STAGING_AWS_ROLE_ARN }}
|
|
179
|
+
aws-region: ${{ env.AWS_REGION }}
|
|
180
|
+
|
|
181
|
+
- name: Download ECS task definition
|
|
182
|
+
run: |
|
|
183
|
+
aws ecs describe-task-definition \
|
|
184
|
+
--task-definition myapp-staging \
|
|
185
|
+
--query taskDefinition > task-def.json
|
|
186
|
+
|
|
187
|
+
- name: Update image in task definition
|
|
188
|
+
id: task-def
|
|
189
|
+
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
|
190
|
+
with:
|
|
191
|
+
task-definition: task-def.json
|
|
192
|
+
container-name: api
|
|
193
|
+
image: ${{ needs.build.outputs.image }}
|
|
194
|
+
|
|
195
|
+
- name: Deploy to ECS (Rolling update)
|
|
196
|
+
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
|
|
197
|
+
with:
|
|
198
|
+
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
|
199
|
+
service: myapp-staging-api
|
|
200
|
+
cluster: myapp-staging
|
|
201
|
+
wait-for-service-stability: true # wait until healthy
|
|
202
|
+
|
|
203
|
+
- name: Notify Slack โ Staging deployed
|
|
204
|
+
uses: slackapi/slack-github-action@v1
|
|
205
|
+
with:
|
|
206
|
+
payload: |
|
|
207
|
+
{ "text": "โ
*Staging deployed* โ `${{ github.sha }}` by ${{ github.actor }}" }
|
|
208
|
+
env:
|
|
209
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEPLOY_WEBHOOK }}
|
|
210
|
+
|
|
211
|
+
# โโโโ STAGE 4: DEPLOY PRODUCTION (manual gate) โโโโ
|
|
212
|
+
deploy-production:
|
|
213
|
+
name: Deploy to Production
|
|
214
|
+
runs-on: ubuntu-latest
|
|
215
|
+
needs: deploy-staging
|
|
216
|
+
environment: production # โ requires manual approval in GitHub UI
|
|
217
|
+
permissions:
|
|
218
|
+
id-token: write
|
|
219
|
+
contents: read
|
|
220
|
+
|
|
221
|
+
steps:
|
|
222
|
+
- uses: actions/checkout@v4
|
|
223
|
+
|
|
224
|
+
- uses: aws-actions/configure-aws-credentials@v4
|
|
225
|
+
with:
|
|
226
|
+
role-to-assume: ${{ secrets.PROD_AWS_ROLE_ARN }}
|
|
227
|
+
aws-region: ${{ env.AWS_REGION }}
|
|
228
|
+
|
|
229
|
+
- name: Download ECS task definition
|
|
230
|
+
run: |
|
|
231
|
+
aws ecs describe-task-definition \
|
|
232
|
+
--task-definition myapp-prod \
|
|
233
|
+
--query taskDefinition > task-def.json
|
|
234
|
+
|
|
235
|
+
- name: Update image in task definition
|
|
236
|
+
id: task-def
|
|
237
|
+
uses: aws-actions/amazon-ecs-render-task-definition@v1
|
|
238
|
+
with:
|
|
239
|
+
task-definition: task-def.json
|
|
240
|
+
container-name: api
|
|
241
|
+
image: ${{ needs.build.outputs.image }}
|
|
242
|
+
|
|
243
|
+
- name: Deploy to ECS (Blue/Green)
|
|
244
|
+
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
|
|
245
|
+
with:
|
|
246
|
+
task-definition: ${{ steps.task-def.outputs.task-definition }}
|
|
247
|
+
service: ${{ env.ECS_SERVICE }}
|
|
248
|
+
cluster: ${{ env.ECS_CLUSTER }}
|
|
249
|
+
wait-for-service-stability: true
|
|
250
|
+
codedeploy-appspec: appspec.yml # enables Blue/Green via CodeDeploy
|
|
251
|
+
|
|
252
|
+
- name: Notify Slack โ Production deployed
|
|
253
|
+
uses: slackapi/slack-github-action@v1
|
|
254
|
+
with:
|
|
255
|
+
payload: |
|
|
256
|
+
{ "text": "๐ *Production deployed* โ `${{ github.sha }}` by ${{ github.actor }}" }
|
|
257
|
+
env:
|
|
258
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEPLOY_WEBHOOK }}
|
|
259
|
+
|
|
260
|
+
- name: Notify Slack โ Deployment failed
|
|
261
|
+
if: failure()
|
|
262
|
+
uses: slackapi/slack-github-action@v1
|
|
263
|
+
with:
|
|
264
|
+
payload: |
|
|
265
|
+
{ "text": "๐ฅ *Production deploy FAILED* โ `${{ github.sha }}` โ <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View logs>" }
|
|
266
|
+
env:
|
|
267
|
+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DEPLOY_WEBHOOK }}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 3. Blue/Green Deployment (AWS ECS + CodeDeploy)
|
|
273
|
+
|
|
274
|
+
```yaml
|
|
275
|
+
# appspec.yml โ CodeDeploy Blue/Green config
|
|
276
|
+
version: 0.0
|
|
277
|
+
Resources:
|
|
278
|
+
- TargetService:
|
|
279
|
+
Type: AWS::ECS::Service
|
|
280
|
+
Properties:
|
|
281
|
+
TaskDefinition: <TASK_DEFINITION>
|
|
282
|
+
LoadBalancerInfo:
|
|
283
|
+
ContainerName: api
|
|
284
|
+
ContainerPort: 3000
|
|
285
|
+
|
|
286
|
+
Hooks:
|
|
287
|
+
- BeforeAllowTraffic: ValidateDeploymentHook # run smoke tests before switching traffic
|
|
288
|
+
- AfterAllowTraffic: PostDeployHook
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
```hcl
|
|
292
|
+
# Terraform: ECS service with Blue/Green enabled
|
|
293
|
+
resource "aws_ecs_service" "api" {
|
|
294
|
+
name = "myapp-api"
|
|
295
|
+
cluster = aws_ecs_cluster.main.id
|
|
296
|
+
task_definition = aws_ecs_task_definition.api.arn
|
|
297
|
+
desired_count = 2
|
|
298
|
+
|
|
299
|
+
deployment_controller {
|
|
300
|
+
type = "CODE_DEPLOY" # enables Blue/Green
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
load_balancer {
|
|
304
|
+
target_group_arn = aws_lb_target_group.blue.arn
|
|
305
|
+
container_name = "api"
|
|
306
|
+
container_port = 3000
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
network_configuration {
|
|
310
|
+
subnets = var.private_subnet_ids
|
|
311
|
+
security_groups = [aws_security_group.api.id]
|
|
312
|
+
assign_public_ip = false
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
lifecycle {
|
|
316
|
+
ignore_changes = [task_definition, load_balancer] # managed by CodeDeploy
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 4. Rollback Playbook
|
|
324
|
+
|
|
325
|
+
### Automatic Rollback (on Health Check Failure)
|
|
326
|
+
|
|
327
|
+
```yaml
|
|
328
|
+
# ECS will automatically roll back if the new task fails health checks
|
|
329
|
+
# Ensure these are set in your ECS service:
|
|
330
|
+
resource "aws_ecs_service" "api" {
|
|
331
|
+
# ...
|
|
332
|
+
deployment_configuration {
|
|
333
|
+
maximum_percent = 200
|
|
334
|
+
minimum_healthy_percent = 50
|
|
335
|
+
|
|
336
|
+
deployment_circuit_breaker {
|
|
337
|
+
enable = true # โ auto-rollback on failure
|
|
338
|
+
rollback = true
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Manual Rollback (Emergency)
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
# Option 1: Redeploy previous image tag
|
|
348
|
+
PREVIOUS_SHA=$(git rev-parse HEAD~1)
|
|
349
|
+
aws ecs update-service \
|
|
350
|
+
--cluster myapp-prod \
|
|
351
|
+
--service myapp-api \
|
|
352
|
+
--task-definition myapp-prod:$(($(aws ecs describe-services \
|
|
353
|
+
--cluster myapp-prod --services myapp-api \
|
|
354
|
+
--query 'services[0].taskDefinition' --output text | grep -oE '[0-9]+$') - 1))
|
|
355
|
+
|
|
356
|
+
# Option 2: Revert GitHub commit + trigger CI
|
|
357
|
+
git revert HEAD --no-edit
|
|
358
|
+
git push origin main
|
|
359
|
+
|
|
360
|
+
# Option 3: Use CodeDeploy's stop-deployment
|
|
361
|
+
aws deploy stop-deployment \
|
|
362
|
+
--deployment-id d-XXXXXXXXX \
|
|
363
|
+
--auto-rollback-enabled
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 5. Environment Promotion Gates
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
GitHub Environment Configuration:
|
|
372
|
+
dev:
|
|
373
|
+
- Auto-deploy: on every commit to main
|
|
374
|
+
- No approvals required
|
|
375
|
+
- Secrets: DEV_* scoped
|
|
376
|
+
|
|
377
|
+
staging:
|
|
378
|
+
- Auto-deploy: after dev succeeds
|
|
379
|
+
- Required reviewers: none (auto)
|
|
380
|
+
- Wait timer: 0 min
|
|
381
|
+
|
|
382
|
+
production:
|
|
383
|
+
- Required reviewers: @org/devops-lead (1 approver)
|
|
384
|
+
- Wait timer: 5 minutes (cooling off period)
|
|
385
|
+
- Deployment branch: main only
|
|
386
|
+
- Secrets: PROD_* scoped
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
```yaml
|
|
390
|
+
# Set up GitHub Environment in Terraform (via GitHub provider)
|
|
391
|
+
resource "github_repository_environment" "production" {
|
|
392
|
+
repository = "my-repo"
|
|
393
|
+
environment = "production"
|
|
394
|
+
|
|
395
|
+
reviewers {
|
|
396
|
+
teams = [data.github_team.devops.id]
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
deployment_branch_policy {
|
|
400
|
+
protected_branches = true # only from protected branches
|
|
401
|
+
custom_branch_policies = false
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
wait_timer = 5 # 5 minute cooling-off
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## ๐ค LLM-Specific Traps
|
|
411
|
+
|
|
412
|
+
1. **No `concurrency:` block**: Without it, two deploys can run simultaneously, causing task definition conflicts in ECS and corrupted deployments.
|
|
413
|
+
2. **Deploying without a stability wait**: `wait-for-service-stability: true` is critical. Without it, the pipeline reports success while ECS is still starting containers.
|
|
414
|
+
3. **Hardcoded task definition revisions**: Never hardcode `:1` or `:latest` in ECS deploy steps. Always fetch the current revision dynamically with `describe-task-definition`.
|
|
415
|
+
4. **Missing Slack failure notification**: Success notifications alone create false security. Always add `if: failure()` Slack step.
|
|
416
|
+
5. **Using `needs.job.result` incorrectly**: `needs.build.outputs.image` only works if `build` job has `outputs:` defined. Verify the output name matches exactly.
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## ๐๏ธ Tribunal Integration (Anti-Hallucination)
|
|
421
|
+
|
|
422
|
+
**Slash command: `/review` or `/tribunal-full`**
|
|
423
|
+
**Active reviewers: `logic-reviewer` ยท `security-auditor` ยท `devops-engineer`**
|
|
424
|
+
|
|
425
|
+
### โ
Pre-Flight Self-Audit
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
โ
Does the workflow have a concurrency: block?
|
|
429
|
+
โ
Is AWS auth using OIDC (id-token: write permission)?
|
|
430
|
+
โ
Does staging gate exist before production?
|
|
431
|
+
โ
Is production environment configured with required reviewers?
|
|
432
|
+
โ
Is there a rollback strategy documented and tested?
|
|
433
|
+
โ
Does the Slack notification cover BOTH success AND failure cases?
|
|
434
|
+
โ
Is wait-for-service-stability: true set on the ECS deploy step?
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### ๐ Verification-Before-Completion (VBC) Protocol
|
|
438
|
+
|
|
439
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
440
|
+
|
|
441
|
+
- โ **Forbidden**: Declaring a pipeline correct because the YAML is syntactically valid.
|
|
442
|
+
- โ
**Required**: A real GitHub Actions run must succeed (green checkmarks across all stages) before the pipeline is declared production-ready.
|