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,452 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: containerization-pro
|
|
3
|
+
description: Production-grade containerization mastery. Multi-stage Dockerfiles for Node.js/Python/Rust/Go, image hardening (non-root, distroless, read-only FS), BuildKit layer caching, multi-platform builds (docker buildx), Docker Compose for local dev, container security scanning (Trivy/Grype), and AWS ECR workflows. Use when containerizing applications, optimizing Docker builds, or setting up container registries.
|
|
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: [cicd-pro]
|
|
12
|
+
trigger-signals:
|
|
13
|
+
strong: [multi-stage build, BuildKit, ECR, Trivy, image hardening, Docker Compose]
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Hallucination Traps (Read First)
|
|
17
|
+
|
|
18
|
+
- ❌ `FROM node:22` → ✅ `FROM node:22-alpine` (1GB+ vs ~150MB). Always use slim/alpine variants.
|
|
19
|
+
- ❌ `RUN npm install` → ✅ `RUN npm ci --omit=dev` (deterministic, no devDeps, respects lockfile)
|
|
20
|
+
- ❌ `COPY . .` without `.dockerignore` → ✅ Always create `.dockerignore` first. Copies `node_modules`, `.env`, `.git` otherwise.
|
|
21
|
+
- ❌ Running container as root → ✅ Always create and switch to a non-root user. Root in container = root on host if container escapes.
|
|
22
|
+
- ❌ Single-stage Dockerfile → ✅ Multi-stage builds for any compiled/built application. Final image should contain ONLY runtime artifacts.
|
|
23
|
+
- ❌ `docker build` without `--platform` for CI → ✅ CI often runs on `amd64`; target hosts may be `arm64`. Always specify platform or use multi-platform builds.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Containerization Pro — Production-Grade Docker Mastery
|
|
28
|
+
|
|
29
|
+
## 1. The .dockerignore (Write This First)
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
# .dockerignore — always create before writing Dockerfile
|
|
33
|
+
node_modules
|
|
34
|
+
npm-debug.log*
|
|
35
|
+
.npm
|
|
36
|
+
.git
|
|
37
|
+
.gitignore
|
|
38
|
+
.env
|
|
39
|
+
.env.*
|
|
40
|
+
*.md
|
|
41
|
+
README*
|
|
42
|
+
.github
|
|
43
|
+
.vscode
|
|
44
|
+
coverage
|
|
45
|
+
.nyc_output
|
|
46
|
+
dist # will be rebuilt in container
|
|
47
|
+
build # will be rebuilt in container
|
|
48
|
+
__pycache__
|
|
49
|
+
*.pyc
|
|
50
|
+
*.pyo
|
|
51
|
+
.pytest_cache
|
|
52
|
+
target # Rust build artifacts
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 2. Multi-Stage Dockerfiles
|
|
58
|
+
|
|
59
|
+
### Node.js (Production-Ready)
|
|
60
|
+
|
|
61
|
+
```dockerfile
|
|
62
|
+
# ✅ Multi-stage — builder produces artifacts, runner is minimal
|
|
63
|
+
FROM node:22-alpine AS base
|
|
64
|
+
WORKDIR /app
|
|
65
|
+
|
|
66
|
+
# Install deps in isolation for better caching
|
|
67
|
+
FROM base AS deps
|
|
68
|
+
COPY package.json package-lock.json ./
|
|
69
|
+
RUN npm ci
|
|
70
|
+
|
|
71
|
+
# Build stage
|
|
72
|
+
FROM base AS builder
|
|
73
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
74
|
+
COPY . .
|
|
75
|
+
RUN npm run build
|
|
76
|
+
|
|
77
|
+
# ──── Runtime (final) stage ────
|
|
78
|
+
FROM node:22-alpine AS runner
|
|
79
|
+
WORKDIR /app
|
|
80
|
+
|
|
81
|
+
# Security: create non-root user
|
|
82
|
+
RUN addgroup --system --gid 1001 appgroup && \
|
|
83
|
+
adduser --system --uid 1001 --ingroup appgroup appuser
|
|
84
|
+
|
|
85
|
+
# Copy only production artifacts
|
|
86
|
+
COPY --from=builder --chown=appuser:appgroup /app/dist ./dist
|
|
87
|
+
COPY --from=builder --chown=appuser:appgroup /app/node_modules ./node_modules
|
|
88
|
+
COPY --from=builder --chown=appuser:appgroup /app/package.json ./
|
|
89
|
+
|
|
90
|
+
USER appuser
|
|
91
|
+
|
|
92
|
+
ENV NODE_ENV=production
|
|
93
|
+
ENV PORT=3000
|
|
94
|
+
EXPOSE 3000
|
|
95
|
+
|
|
96
|
+
# Health check — required for orchestration (ECS, Kubernetes)
|
|
97
|
+
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
98
|
+
CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1
|
|
99
|
+
|
|
100
|
+
CMD ["node", "dist/index.js"]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Python (FastAPI)
|
|
104
|
+
|
|
105
|
+
```dockerfile
|
|
106
|
+
FROM python:3.12-slim AS builder
|
|
107
|
+
WORKDIR /app
|
|
108
|
+
|
|
109
|
+
# Install build tools (needed for some packages, discarded in final image)
|
|
110
|
+
RUN apt-get update && apt-get install -y --no-install-recommends gcc && \
|
|
111
|
+
rm -rf /var/lib/apt/lists/*
|
|
112
|
+
|
|
113
|
+
COPY requirements.txt .
|
|
114
|
+
RUN pip install --user --no-cache-dir -r requirements.txt
|
|
115
|
+
|
|
116
|
+
# ──── Runtime stage ────
|
|
117
|
+
FROM python:3.12-slim AS runner
|
|
118
|
+
WORKDIR /app
|
|
119
|
+
|
|
120
|
+
# Security: non-root user
|
|
121
|
+
RUN addgroup --system --gid 1001 appgroup && \
|
|
122
|
+
adduser --system --uid 1001 --gid 1001 appuser
|
|
123
|
+
|
|
124
|
+
# Copy installed packages from builder
|
|
125
|
+
COPY --from=builder --chown=appuser:appgroup /root/.local /home/appuser/.local
|
|
126
|
+
COPY --chown=appuser:appgroup . .
|
|
127
|
+
|
|
128
|
+
USER appuser
|
|
129
|
+
|
|
130
|
+
ENV PATH=/home/appuser/.local/bin:$PATH
|
|
131
|
+
ENV PYTHONUNBUFFERED=1
|
|
132
|
+
|
|
133
|
+
EXPOSE 8000
|
|
134
|
+
|
|
135
|
+
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
|
136
|
+
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"
|
|
137
|
+
|
|
138
|
+
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Rust (Distroless Final Image)
|
|
142
|
+
|
|
143
|
+
```dockerfile
|
|
144
|
+
FROM rust:1.78-slim AS builder
|
|
145
|
+
WORKDIR /app
|
|
146
|
+
|
|
147
|
+
# Cache dependencies separately for fast rebuilds
|
|
148
|
+
COPY Cargo.toml Cargo.lock ./
|
|
149
|
+
RUN mkdir src && echo "fn main() {}" > src/main.rs
|
|
150
|
+
RUN cargo build --release
|
|
151
|
+
RUN rm src/main.rs
|
|
152
|
+
|
|
153
|
+
# Build actual application
|
|
154
|
+
COPY src ./src
|
|
155
|
+
RUN touch src/main.rs && cargo build --release
|
|
156
|
+
|
|
157
|
+
# ──── Distroless runtime (no shell, no package manager, minimal attack surface) ────
|
|
158
|
+
FROM gcr.io/distroless/cc-debian12 AS runner
|
|
159
|
+
WORKDIR /app
|
|
160
|
+
|
|
161
|
+
COPY --from=builder /app/target/release/myapp ./myapp
|
|
162
|
+
|
|
163
|
+
USER nonroot:nonroot
|
|
164
|
+
EXPOSE 8080
|
|
165
|
+
|
|
166
|
+
CMD ["/app/myapp"]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Go
|
|
170
|
+
|
|
171
|
+
```dockerfile
|
|
172
|
+
FROM golang:1.22-alpine AS builder
|
|
173
|
+
WORKDIR /app
|
|
174
|
+
|
|
175
|
+
COPY go.mod go.sum ./
|
|
176
|
+
RUN go mod download
|
|
177
|
+
|
|
178
|
+
COPY . .
|
|
179
|
+
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o server ./cmd/server
|
|
180
|
+
|
|
181
|
+
# ──── Scratch (smallest possible image) ────
|
|
182
|
+
FROM scratch AS runner
|
|
183
|
+
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
|
184
|
+
COPY --from=builder /app/server /server
|
|
185
|
+
|
|
186
|
+
EXPOSE 8080
|
|
187
|
+
ENTRYPOINT ["/server"]
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 3. BuildKit Layer Caching (CI Speed)
|
|
193
|
+
|
|
194
|
+
```dockerfile
|
|
195
|
+
# syntax=docker/dockerfile:1.6
|
|
196
|
+
FROM node:22-alpine AS builder
|
|
197
|
+
WORKDIR /app
|
|
198
|
+
|
|
199
|
+
# Mount npm cache — persists between builds (dramatic speed improvement in CI)
|
|
200
|
+
COPY package.json package-lock.json ./
|
|
201
|
+
RUN --mount=type=cache,target=/root/.npm \
|
|
202
|
+
npm ci
|
|
203
|
+
|
|
204
|
+
# Mount build cache (Next.js / webpack)
|
|
205
|
+
COPY . .
|
|
206
|
+
RUN --mount=type=cache,target=/app/.next/cache \
|
|
207
|
+
npm run build
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
```yaml
|
|
211
|
+
# GitHub Actions — enable BuildKit with caching
|
|
212
|
+
- name: Build and push Docker image
|
|
213
|
+
uses: docker/build-push-action@v5
|
|
214
|
+
with:
|
|
215
|
+
context: .
|
|
216
|
+
push: true
|
|
217
|
+
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ github.sha }}
|
|
218
|
+
cache-from: type=gha # GitHub Actions cache
|
|
219
|
+
cache-to: type=gha,mode=max # Cache all layers
|
|
220
|
+
build-args: |
|
|
221
|
+
BUILDKIT_INLINE_CACHE=1
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 4. Multi-Platform Builds
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Build for both amd64 (x86) and arm64 (Apple Silicon, AWS Graviton)
|
|
230
|
+
docker buildx create --name mybuilder --use
|
|
231
|
+
docker buildx build \
|
|
232
|
+
--platform linux/amd64,linux/arm64 \
|
|
233
|
+
--tag myapp:latest \
|
|
234
|
+
--push \
|
|
235
|
+
.
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```yaml
|
|
239
|
+
# GitHub Actions — multi-platform
|
|
240
|
+
- name: Set up QEMU
|
|
241
|
+
uses: docker/setup-qemu-action@v3
|
|
242
|
+
|
|
243
|
+
- name: Set up Docker Buildx
|
|
244
|
+
uses: docker/setup-buildx-action@v3
|
|
245
|
+
|
|
246
|
+
- name: Build multi-platform image
|
|
247
|
+
uses: docker/build-push-action@v5
|
|
248
|
+
with:
|
|
249
|
+
platforms: linux/amd64,linux/arm64
|
|
250
|
+
push: true
|
|
251
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 5. Docker Compose (Local Development)
|
|
257
|
+
|
|
258
|
+
```yaml
|
|
259
|
+
# docker-compose.yml
|
|
260
|
+
services:
|
|
261
|
+
api:
|
|
262
|
+
build:
|
|
263
|
+
context: .
|
|
264
|
+
target: builder # use builder stage locally (includes devtools)
|
|
265
|
+
dockerfile: Dockerfile
|
|
266
|
+
ports:
|
|
267
|
+
- "3000:3000"
|
|
268
|
+
environment:
|
|
269
|
+
NODE_ENV: development
|
|
270
|
+
DATABASE_URL: postgres://postgres:postgres@db:5432/myapp_dev
|
|
271
|
+
REDIS_URL: redis://redis:6379
|
|
272
|
+
volumes:
|
|
273
|
+
- .:/app # mount source for hot-reload
|
|
274
|
+
- /app/node_modules # anonymous volume prevents host node_modules overwrite
|
|
275
|
+
depends_on:
|
|
276
|
+
db:
|
|
277
|
+
condition: service_healthy
|
|
278
|
+
redis:
|
|
279
|
+
condition: service_started
|
|
280
|
+
restart: unless-stopped
|
|
281
|
+
|
|
282
|
+
db:
|
|
283
|
+
image: postgres:16-alpine
|
|
284
|
+
environment:
|
|
285
|
+
POSTGRES_DB: myapp_dev
|
|
286
|
+
POSTGRES_USER: postgres
|
|
287
|
+
POSTGRES_PASSWORD: postgres
|
|
288
|
+
volumes:
|
|
289
|
+
- pgdata:/var/lib/postgresql/data
|
|
290
|
+
healthcheck:
|
|
291
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
292
|
+
interval: 5s
|
|
293
|
+
timeout: 3s
|
|
294
|
+
retries: 5
|
|
295
|
+
ports:
|
|
296
|
+
- "5432:5432" # expose for local DB clients
|
|
297
|
+
|
|
298
|
+
redis:
|
|
299
|
+
image: redis:7-alpine
|
|
300
|
+
volumes:
|
|
301
|
+
- redisdata:/data
|
|
302
|
+
ports:
|
|
303
|
+
- "6379:6379"
|
|
304
|
+
|
|
305
|
+
volumes:
|
|
306
|
+
pgdata:
|
|
307
|
+
redisdata:
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## 6. Container Security Scanning
|
|
313
|
+
|
|
314
|
+
```yaml
|
|
315
|
+
# GitHub Actions — Trivy vulnerability scan
|
|
316
|
+
- name: Run Trivy vulnerability scanner
|
|
317
|
+
uses: aquasecurity/trivy-action@master
|
|
318
|
+
with:
|
|
319
|
+
image-ref: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ github.sha }}
|
|
320
|
+
format: sarif
|
|
321
|
+
output: trivy-results.sarif
|
|
322
|
+
severity: CRITICAL,HIGH
|
|
323
|
+
exit-code: "1" # fail pipeline on CRITICAL/HIGH vulnerabilities
|
|
324
|
+
|
|
325
|
+
- name: Upload Trivy scan results to GitHub Security tab
|
|
326
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
327
|
+
if: always()
|
|
328
|
+
with:
|
|
329
|
+
sarif_file: trivy-results.sarif
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
# Local scanning
|
|
334
|
+
trivy image myapp:latest
|
|
335
|
+
|
|
336
|
+
# Scan Dockerfile for misconfigurations before building
|
|
337
|
+
trivy config Dockerfile
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## 7. AWS ECR Workflow
|
|
343
|
+
|
|
344
|
+
```yaml
|
|
345
|
+
# Complete ECR push workflow
|
|
346
|
+
jobs:
|
|
347
|
+
build-and-push:
|
|
348
|
+
runs-on: ubuntu-latest
|
|
349
|
+
permissions:
|
|
350
|
+
id-token: write
|
|
351
|
+
contents: read
|
|
352
|
+
outputs:
|
|
353
|
+
image: ${{ steps.build.outputs.image }}
|
|
354
|
+
|
|
355
|
+
steps:
|
|
356
|
+
- uses: actions/checkout@v4
|
|
357
|
+
|
|
358
|
+
- name: Configure AWS credentials (OIDC — no static keys)
|
|
359
|
+
uses: aws-actions/configure-aws-credentials@v4
|
|
360
|
+
with:
|
|
361
|
+
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
|
|
362
|
+
aws-region: us-east-1
|
|
363
|
+
|
|
364
|
+
- name: Login to Amazon ECR
|
|
365
|
+
id: login-ecr
|
|
366
|
+
uses: aws-actions/amazon-ecr-login@v2
|
|
367
|
+
|
|
368
|
+
- name: Set up Docker Buildx
|
|
369
|
+
uses: docker/setup-buildx-action@v3
|
|
370
|
+
|
|
371
|
+
- name: Build, tag, and push image
|
|
372
|
+
id: build
|
|
373
|
+
uses: docker/build-push-action@v5
|
|
374
|
+
with:
|
|
375
|
+
context: .
|
|
376
|
+
push: true
|
|
377
|
+
tags: |
|
|
378
|
+
${{ steps.login-ecr.outputs.registry }}/myapp:${{ github.sha }}
|
|
379
|
+
${{ steps.login-ecr.outputs.registry }}/myapp:latest
|
|
380
|
+
cache-from: type=gha
|
|
381
|
+
cache-to: type=gha,mode=max
|
|
382
|
+
|
|
383
|
+
- name: Output image URI
|
|
384
|
+
run: echo "image=${{ steps.login-ecr.outputs.registry }}/myapp:${{ github.sha }}" >> $GITHUB_OUTPUT
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### ECR Lifecycle Policy (Cost Control)
|
|
388
|
+
|
|
389
|
+
```json
|
|
390
|
+
{
|
|
391
|
+
"rules": [
|
|
392
|
+
{
|
|
393
|
+
"rulePriority": 1,
|
|
394
|
+
"description": "Keep last 10 production images",
|
|
395
|
+
"selection": {
|
|
396
|
+
"tagStatus": "tagged",
|
|
397
|
+
"tagPrefixList": ["v"],
|
|
398
|
+
"countType": "imageCountMoreThan",
|
|
399
|
+
"countNumber": 10
|
|
400
|
+
},
|
|
401
|
+
"action": { "type": "expire" }
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"rulePriority": 2,
|
|
405
|
+
"description": "Expire untagged images after 1 day",
|
|
406
|
+
"selection": {
|
|
407
|
+
"tagStatus": "untagged",
|
|
408
|
+
"countType": "sinceImagePushed",
|
|
409
|
+
"countUnit": "days",
|
|
410
|
+
"countNumber": 1
|
|
411
|
+
},
|
|
412
|
+
"action": { "type": "expire" }
|
|
413
|
+
}
|
|
414
|
+
]
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## 🤖 LLM-Specific Traps
|
|
421
|
+
|
|
422
|
+
1. **`FROM node:latest`**: Never use `latest` tag in production Dockerfiles. Tags are mutable. Pin to a specific version (`node:22.3.0-alpine`).
|
|
423
|
+
2. **Missing HEALTHCHECK**: Orchestrators (ECS, Kubernetes) use HEALTHCHECK to know when a container is ready. Without it, traffic is sent before the app is ready.
|
|
424
|
+
3. **Secrets as build args**: `ARG SECRET_KEY` bakes secrets into the image history. Use `--secret` flag with BuildKit or runtime environment variables.
|
|
425
|
+
4. **`docker-compose up` in production**: Docker Compose is for development. Use ECS, Kubernetes, or similar for production.
|
|
426
|
+
5. **Wrong COPY source path**: `COPY --from=builder` paths are relative to the builder WORKDIR. Always verify the exact output path.
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## 🏛️ Tribunal Integration (Anti-Hallucination)
|
|
431
|
+
|
|
432
|
+
**Slash command: `/review` or `/tribunal-full`**
|
|
433
|
+
**Active reviewers: `logic-reviewer` · `security-auditor` · `devops-engineer`**
|
|
434
|
+
|
|
435
|
+
### ✅ Pre-Flight Self-Audit
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
✅ Does the Dockerfile use a non-root user?
|
|
439
|
+
✅ Is there a .dockerignore file?
|
|
440
|
+
✅ Is the final stage minimal (alpine/distroless, no build tools)?
|
|
441
|
+
✅ Are secrets passed as runtime env vars, not build args?
|
|
442
|
+
✅ Is there a HEALTHCHECK instruction?
|
|
443
|
+
✅ Are image tags pinned (not :latest)?
|
|
444
|
+
✅ Is multi-stage build used for compiled/built artifacts?
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### 🛑 Verification-Before-Completion (VBC) Protocol
|
|
448
|
+
|
|
449
|
+
**CRITICAL:** You must follow a strict "evidence-based closeout" state machine.
|
|
450
|
+
|
|
451
|
+
- ❌ **Forbidden**: Declaring a Dockerfile correct because it "looks valid."
|
|
452
|
+
- ✅ **Required**: Run `docker build .` successfully AND `docker run` the image to verify the health endpoint responds before declaring complete.
|