start-vibing 2.0.11 → 2.0.13
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/README.md +177 -177
- package/dist/cli.js +19 -2
- package/package.json +42 -42
- package/template/.claude/CLAUDE.md +174 -174
- package/template/.claude/agents/01-orchestration/agent-selector.md +130 -130
- package/template/.claude/agents/01-orchestration/checkpoint-manager.md +142 -142
- package/template/.claude/agents/01-orchestration/context-manager.md +138 -138
- package/template/.claude/agents/01-orchestration/error-recovery.md +182 -182
- package/template/.claude/agents/01-orchestration/orchestrator.md +114 -114
- package/template/.claude/agents/01-orchestration/parallel-coordinator.md +141 -141
- package/template/.claude/agents/01-orchestration/task-decomposer.md +121 -121
- package/template/.claude/agents/01-orchestration/workflow-router.md +114 -114
- package/template/.claude/agents/02-typescript/bun-runtime-expert.md +197 -197
- package/template/.claude/agents/02-typescript/esm-resolver.md +193 -193
- package/template/.claude/agents/02-typescript/import-alias-enforcer.md +158 -158
- package/template/.claude/agents/02-typescript/ts-generics-helper.md +183 -183
- package/template/.claude/agents/02-typescript/ts-migration-helper.md +238 -238
- package/template/.claude/agents/02-typescript/ts-strict-checker.md +180 -180
- package/template/.claude/agents/02-typescript/ts-types-analyzer.md +199 -199
- package/template/.claude/agents/02-typescript/type-definition-writer.md +187 -187
- package/template/.claude/agents/02-typescript/zod-schema-designer.md +212 -212
- package/template/.claude/agents/02-typescript/zod-validator.md +158 -158
- package/template/.claude/agents/03-testing/playwright-assertions.md +265 -265
- package/template/.claude/agents/03-testing/playwright-e2e.md +247 -247
- package/template/.claude/agents/03-testing/playwright-fixtures.md +234 -234
- package/template/.claude/agents/03-testing/playwright-multi-viewport.md +256 -256
- package/template/.claude/agents/03-testing/playwright-page-objects.md +247 -247
- package/template/.claude/agents/03-testing/test-cleanup-manager.md +248 -248
- package/template/.claude/agents/03-testing/test-data-generator.md +254 -254
- package/template/.claude/agents/03-testing/tester-integration.md +278 -278
- package/template/.claude/agents/03-testing/tester-unit.md +207 -207
- package/template/.claude/agents/03-testing/vitest-config.md +287 -287
- package/template/.claude/agents/04-docker/container-health.md +255 -255
- package/template/.claude/agents/04-docker/deployment-validator.md +225 -225
- package/template/.claude/agents/04-docker/docker-compose-designer.md +281 -281
- package/template/.claude/agents/04-docker/docker-env-manager.md +235 -235
- package/template/.claude/agents/04-docker/docker-multi-stage.md +241 -241
- package/template/.claude/agents/04-docker/dockerfile-optimizer.md +208 -208
- package/template/.claude/agents/05-database/database-seeder.md +273 -273
- package/template/.claude/agents/05-database/mongodb-query-optimizer.md +230 -230
- package/template/.claude/agents/05-database/mongoose-aggregation.md +306 -306
- package/template/.claude/agents/05-database/mongoose-index-optimizer.md +182 -182
- package/template/.claude/agents/05-database/mongoose-schema-designer.md +267 -267
- package/template/.claude/agents/06-security/auth-session-validator.md +68 -68
- package/template/.claude/agents/06-security/input-sanitizer.md +80 -80
- package/template/.claude/agents/06-security/owasp-checker.md +97 -97
- package/template/.claude/agents/06-security/permission-auditor.md +100 -100
- package/template/.claude/agents/06-security/security-auditor.md +84 -84
- package/template/.claude/agents/06-security/sensitive-data-scanner.md +83 -83
- package/template/.claude/agents/07-documentation/api-documenter.md +136 -136
- package/template/.claude/agents/07-documentation/changelog-manager.md +105 -105
- package/template/.claude/agents/07-documentation/documenter.md +76 -76
- package/template/.claude/agents/07-documentation/domain-updater.md +81 -81
- package/template/.claude/agents/07-documentation/jsdoc-generator.md +114 -114
- package/template/.claude/agents/07-documentation/readme-generator.md +135 -135
- package/template/.claude/agents/08-git/branch-manager.md +58 -58
- package/template/.claude/agents/08-git/commit-manager.md +63 -63
- package/template/.claude/agents/08-git/pr-creator.md +76 -76
- package/template/.claude/agents/09-quality/code-reviewer.md +71 -71
- package/template/.claude/agents/09-quality/quality-checker.md +67 -67
- package/template/.claude/agents/10-research/best-practices-finder.md +89 -89
- package/template/.claude/agents/10-research/competitor-analyzer.md +106 -106
- package/template/.claude/agents/10-research/pattern-researcher.md +93 -93
- package/template/.claude/agents/10-research/research-cache-manager.md +76 -76
- package/template/.claude/agents/10-research/research-web.md +98 -98
- package/template/.claude/agents/10-research/tech-evaluator.md +101 -101
- package/template/.claude/agents/11-ui-ux/accessibility-auditor.md +136 -136
- package/template/.claude/agents/11-ui-ux/design-system-enforcer.md +125 -125
- package/template/.claude/agents/11-ui-ux/skeleton-generator.md +118 -118
- package/template/.claude/agents/11-ui-ux/ui-desktop.md +132 -132
- package/template/.claude/agents/11-ui-ux/ui-mobile.md +98 -98
- package/template/.claude/agents/11-ui-ux/ui-tablet.md +110 -110
- package/template/.claude/agents/12-performance/api-latency-analyzer.md +156 -156
- package/template/.claude/agents/12-performance/bundle-analyzer.md +113 -113
- package/template/.claude/agents/12-performance/memory-leak-detector.md +137 -137
- package/template/.claude/agents/12-performance/performance-profiler.md +115 -115
- package/template/.claude/agents/12-performance/query-optimizer.md +124 -124
- package/template/.claude/agents/12-performance/render-optimizer.md +154 -154
- package/template/.claude/agents/13-debugging/build-error-fixer.md +207 -207
- package/template/.claude/agents/13-debugging/debugger.md +149 -149
- package/template/.claude/agents/13-debugging/error-stack-analyzer.md +141 -141
- package/template/.claude/agents/13-debugging/network-debugger.md +208 -208
- package/template/.claude/agents/13-debugging/runtime-error-fixer.md +181 -181
- package/template/.claude/agents/13-debugging/type-error-resolver.md +185 -185
- package/template/.claude/agents/14-validation/final-validator.md +93 -93
- package/template/.claude/agents/_backup/analyzer.md +134 -134
- package/template/.claude/agents/_backup/code-reviewer.md +279 -279
- package/template/.claude/agents/_backup/commit-manager.md +219 -219
- package/template/.claude/agents/_backup/debugger.md +280 -280
- package/template/.claude/agents/_backup/documenter.md +237 -237
- package/template/.claude/agents/_backup/domain-updater.md +197 -197
- package/template/.claude/agents/_backup/final-validator.md +169 -169
- package/template/.claude/agents/_backup/orchestrator.md +149 -149
- package/template/.claude/agents/_backup/performance.md +232 -232
- package/template/.claude/agents/_backup/quality-checker.md +240 -240
- package/template/.claude/agents/_backup/research.md +315 -315
- package/template/.claude/agents/_backup/security-auditor.md +192 -192
- package/template/.claude/agents/_backup/tester.md +566 -566
- package/template/.claude/agents/_backup/ui-ux-reviewer.md +247 -247
- package/template/.claude/config/README.md +30 -30
- package/template/.claude/config/mcp-config.json +344 -344
- package/template/.claude/config/project-config.json +53 -53
- package/template/.claude/config/quality-gates.json +46 -46
- package/template/.claude/config/security-rules.json +45 -45
- package/template/.claude/config/testing-config.json +164 -164
- package/template/.claude/hooks/SETUP.md +126 -126
- package/template/.claude/hooks/run-hook.ts +176 -176
- package/template/.claude/hooks/stop-validator.ts +914 -824
- package/template/.claude/hooks/user-prompt-submit.ts +886 -886
- package/template/.claude/scripts/mcp-quick-install.ts +151 -151
- package/template/.claude/scripts/setup-mcps.ts +651 -651
- package/template/.claude/settings.json +275 -275
- package/template/.claude/skills/bun-runtime/SKILL.md +430 -430
- package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +431 -431
- package/template/.claude/skills/codebase-knowledge/domains/mcp-integration.md +295 -295
- package/template/.claude/skills/debugging-patterns/SKILL.md +485 -485
- package/template/.claude/skills/docker-patterns/SKILL.md +555 -555
- package/template/.claude/skills/git-workflow/SKILL.md +454 -454
- package/template/.claude/skills/mongoose-patterns/SKILL.md +499 -499
- package/template/.claude/skills/nextjs-app-router/SKILL.md +327 -327
- package/template/.claude/skills/performance-patterns/SKILL.md +547 -547
- package/template/.claude/skills/playwright-automation/SKILL.md +438 -438
- package/template/.claude/skills/react-patterns/SKILL.md +389 -389
- package/template/.claude/skills/research-cache/SKILL.md +222 -222
- package/template/.claude/skills/shadcn-ui/SKILL.md +511 -511
- package/template/.claude/skills/tailwind-patterns/SKILL.md +465 -465
- package/template/.claude/skills/test-coverage/SKILL.md +467 -467
- package/template/.claude/skills/trpc-api/SKILL.md +434 -434
- package/template/.claude/skills/typescript-strict/SKILL.md +367 -367
- package/template/.claude/skills/zod-validation/SKILL.md +403 -403
- package/template/CLAUDE.md +117 -117
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: docker-multi-stage
|
|
3
|
-
description: 'AUTOMATICALLY invoke when Dockerfile can benefit from multi-stage. Triggers: large image, build optimization needed, production Dockerfile. Creates multi-stage builds. PROACTIVELY separates build and runtime stages.'
|
|
4
|
-
model: haiku
|
|
5
|
-
tools: Read, Write, Edit, Grep, Glob
|
|
6
|
-
skills: docker-patterns
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Docker Multi-Stage Build Agent
|
|
10
|
-
|
|
11
|
-
You create optimized multi-stage Docker builds.
|
|
12
|
-
|
|
13
|
-
## Why Multi-Stage?
|
|
14
|
-
|
|
15
|
-
| Issue | Solution |
|
|
16
|
-
| ---------------------- | ------------------------- |
|
|
17
|
-
| Build tools in image | Separate build stage |
|
|
18
|
-
| Large final image | Only copy necessary files |
|
|
19
|
-
| Dev deps in production | Install only prod deps |
|
|
20
|
-
| Source code exposure | Only include dist |
|
|
21
|
-
|
|
22
|
-
## Bun Multi-Stage Template
|
|
23
|
-
|
|
24
|
-
```dockerfile
|
|
25
|
-
# ====================
|
|
26
|
-
# Stage 1: Dependencies
|
|
27
|
-
# ====================
|
|
28
|
-
FROM oven/bun:1 AS deps
|
|
29
|
-
|
|
30
|
-
WORKDIR /app
|
|
31
|
-
|
|
32
|
-
# Copy dependency files only
|
|
33
|
-
COPY package.json bun.lockb ./
|
|
34
|
-
|
|
35
|
-
# Install ALL dependencies (including dev for build)
|
|
36
|
-
RUN bun install --frozen-lockfile
|
|
37
|
-
|
|
38
|
-
# ====================
|
|
39
|
-
# Stage 2: Builder
|
|
40
|
-
# ====================
|
|
41
|
-
FROM oven/bun:1 AS builder
|
|
42
|
-
|
|
43
|
-
WORKDIR /app
|
|
44
|
-
|
|
45
|
-
# Copy dependencies from deps stage
|
|
46
|
-
COPY --from=deps /app/node_modules ./node_modules
|
|
47
|
-
|
|
48
|
-
# Copy source code
|
|
49
|
-
COPY . .
|
|
50
|
-
|
|
51
|
-
# Build application
|
|
52
|
-
RUN bun run build
|
|
53
|
-
|
|
54
|
-
# Prune dev dependencies
|
|
55
|
-
RUN bun install --production --frozen-lockfile
|
|
56
|
-
|
|
57
|
-
# ====================
|
|
58
|
-
# Stage 3: Production
|
|
59
|
-
# ====================
|
|
60
|
-
FROM oven/bun:1-slim AS production
|
|
61
|
-
|
|
62
|
-
WORKDIR /app
|
|
63
|
-
|
|
64
|
-
# Copy only what's needed for production
|
|
65
|
-
COPY --from=builder /app/dist ./dist
|
|
66
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
67
|
-
COPY --from=builder /app/package.json ./
|
|
68
|
-
|
|
69
|
-
# Security: non-root user
|
|
70
|
-
USER bun
|
|
71
|
-
|
|
72
|
-
# Environment
|
|
73
|
-
ENV NODE_ENV=production
|
|
74
|
-
|
|
75
|
-
# Health check
|
|
76
|
-
HEALTHCHECK --interval=30s --timeout=3s \
|
|
77
|
-
CMD curl -f http://localhost:3000/health || exit 1
|
|
78
|
-
|
|
79
|
-
EXPOSE 3000
|
|
80
|
-
|
|
81
|
-
CMD ["bun", "run", "dist/index.js"]
|
|
82
|
-
|
|
83
|
-
# ====================
|
|
84
|
-
# Stage 4: Development (optional)
|
|
85
|
-
# ====================
|
|
86
|
-
FROM oven/bun:1 AS development
|
|
87
|
-
|
|
88
|
-
WORKDIR /app
|
|
89
|
-
|
|
90
|
-
# Copy all dependencies (including dev)
|
|
91
|
-
COPY --from=deps /app/node_modules ./node_modules
|
|
92
|
-
COPY . .
|
|
93
|
-
|
|
94
|
-
# Development user
|
|
95
|
-
USER bun
|
|
96
|
-
|
|
97
|
-
ENV NODE_ENV=development
|
|
98
|
-
|
|
99
|
-
EXPOSE 3000
|
|
100
|
-
|
|
101
|
-
CMD ["bun", "run", "--watch", "src/index.ts"]
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Build Targets
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
# Production build
|
|
108
|
-
docker build --target production -t myapp:prod .
|
|
109
|
-
|
|
110
|
-
# Development build
|
|
111
|
-
docker build --target development -t myapp:dev .
|
|
112
|
-
|
|
113
|
-
# Just dependencies (for caching)
|
|
114
|
-
docker build --target deps -t myapp:deps .
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Stage Patterns
|
|
118
|
-
|
|
119
|
-
### Base Image Pattern
|
|
120
|
-
|
|
121
|
-
```dockerfile
|
|
122
|
-
# Shared base
|
|
123
|
-
FROM node:20-alpine AS base
|
|
124
|
-
WORKDIR /app
|
|
125
|
-
RUN apk add --no-cache libc6-compat
|
|
126
|
-
|
|
127
|
-
# Dependencies inherit from base
|
|
128
|
-
FROM base AS deps
|
|
129
|
-
# ...
|
|
130
|
-
|
|
131
|
-
# Builder inherits from base
|
|
132
|
-
FROM base AS builder
|
|
133
|
-
# ...
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Test Stage Pattern
|
|
137
|
-
|
|
138
|
-
```dockerfile
|
|
139
|
-
FROM builder AS tester
|
|
140
|
-
RUN bun test
|
|
141
|
-
|
|
142
|
-
FROM builder AS production
|
|
143
|
-
# Only reaches here if tests pass
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
### Security Scan Pattern
|
|
147
|
-
|
|
148
|
-
```dockerfile
|
|
149
|
-
FROM builder AS scanner
|
|
150
|
-
RUN bunx @snyk/cli test
|
|
151
|
-
|
|
152
|
-
FROM builder AS production
|
|
153
|
-
# Only if scan passes
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Optimization Tips
|
|
157
|
-
|
|
158
|
-
### 1. Order by Change Frequency
|
|
159
|
-
|
|
160
|
-
```dockerfile
|
|
161
|
-
# Least likely to change first
|
|
162
|
-
COPY package.json bun.lockb ./
|
|
163
|
-
RUN bun install
|
|
164
|
-
|
|
165
|
-
# Most likely to change last
|
|
166
|
-
COPY src/ ./src/
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### 2. Selective COPY
|
|
170
|
-
|
|
171
|
-
```dockerfile
|
|
172
|
-
# BAD - copies everything
|
|
173
|
-
COPY . .
|
|
174
|
-
|
|
175
|
-
# GOOD - selective
|
|
176
|
-
COPY src/ ./src/
|
|
177
|
-
COPY public/ ./public/
|
|
178
|
-
COPY package.json tsconfig.json ./
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### 3. Combined Cleanup
|
|
182
|
-
|
|
183
|
-
```dockerfile
|
|
184
|
-
# Single RUN with cleanup
|
|
185
|
-
RUN bun install --frozen-lockfile && \
|
|
186
|
-
bun run build && \
|
|
187
|
-
rm -rf ~/.bun/install/cache
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
## Size Comparison
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
# Check sizes
|
|
194
|
-
docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}" | grep myapp
|
|
195
|
-
|
|
196
|
-
# Typical results:
|
|
197
|
-
# myapp:dev ~800MB (full node_modules, source)
|
|
198
|
-
# myapp:prod ~200MB (slim base, dist only)
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
## Output Format
|
|
202
|
-
|
|
203
|
-
```markdown
|
|
204
|
-
## Multi-Stage Build Design
|
|
205
|
-
|
|
206
|
-
### Stages
|
|
207
|
-
|
|
208
|
-
| Stage | Purpose | Base Image | Size |
|
|
209
|
-
| ----------- | -------------------- | ---------- | ------ |
|
|
210
|
-
| deps | Install dependencies | bun:1 | ~500MB |
|
|
211
|
-
| builder | Build application | bun:1 | ~600MB |
|
|
212
|
-
| production | Runtime only | bun:1-slim | ~150MB |
|
|
213
|
-
| development | Dev server | bun:1 | ~600MB |
|
|
214
|
-
|
|
215
|
-
### Build Commands
|
|
216
|
-
|
|
217
|
-
\`\`\`bash
|
|
218
|
-
|
|
219
|
-
# Production
|
|
220
|
-
|
|
221
|
-
docker build --target production -t myapp .
|
|
222
|
-
|
|
223
|
-
# Development
|
|
224
|
-
|
|
225
|
-
docker build --target development -t myapp:dev .
|
|
226
|
-
\`\`\`
|
|
227
|
-
|
|
228
|
-
### Final Image Contents
|
|
229
|
-
|
|
230
|
-
- /app/dist/ (compiled code)
|
|
231
|
-
- /app/node_modules/ (prod deps only)
|
|
232
|
-
- /app/package.json
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
## Critical Rules
|
|
236
|
-
|
|
237
|
-
1. **SEPARATE STAGES** - Build vs runtime
|
|
238
|
-
2. **SLIM FINAL** - Use -slim or -alpine for production
|
|
239
|
-
3. **PRUNE DEPS** - Only production deps in final
|
|
240
|
-
4. **NO SOURCE** - Only dist in production
|
|
241
|
-
5. **LAYER CACHE** - Order by change frequency
|
|
1
|
+
---
|
|
2
|
+
name: docker-multi-stage
|
|
3
|
+
description: 'AUTOMATICALLY invoke when Dockerfile can benefit from multi-stage. Triggers: large image, build optimization needed, production Dockerfile. Creates multi-stage builds. PROACTIVELY separates build and runtime stages.'
|
|
4
|
+
model: haiku
|
|
5
|
+
tools: Read, Write, Edit, Grep, Glob
|
|
6
|
+
skills: docker-patterns
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Docker Multi-Stage Build Agent
|
|
10
|
+
|
|
11
|
+
You create optimized multi-stage Docker builds.
|
|
12
|
+
|
|
13
|
+
## Why Multi-Stage?
|
|
14
|
+
|
|
15
|
+
| Issue | Solution |
|
|
16
|
+
| ---------------------- | ------------------------- |
|
|
17
|
+
| Build tools in image | Separate build stage |
|
|
18
|
+
| Large final image | Only copy necessary files |
|
|
19
|
+
| Dev deps in production | Install only prod deps |
|
|
20
|
+
| Source code exposure | Only include dist |
|
|
21
|
+
|
|
22
|
+
## Bun Multi-Stage Template
|
|
23
|
+
|
|
24
|
+
```dockerfile
|
|
25
|
+
# ====================
|
|
26
|
+
# Stage 1: Dependencies
|
|
27
|
+
# ====================
|
|
28
|
+
FROM oven/bun:1 AS deps
|
|
29
|
+
|
|
30
|
+
WORKDIR /app
|
|
31
|
+
|
|
32
|
+
# Copy dependency files only
|
|
33
|
+
COPY package.json bun.lockb ./
|
|
34
|
+
|
|
35
|
+
# Install ALL dependencies (including dev for build)
|
|
36
|
+
RUN bun install --frozen-lockfile
|
|
37
|
+
|
|
38
|
+
# ====================
|
|
39
|
+
# Stage 2: Builder
|
|
40
|
+
# ====================
|
|
41
|
+
FROM oven/bun:1 AS builder
|
|
42
|
+
|
|
43
|
+
WORKDIR /app
|
|
44
|
+
|
|
45
|
+
# Copy dependencies from deps stage
|
|
46
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
47
|
+
|
|
48
|
+
# Copy source code
|
|
49
|
+
COPY . .
|
|
50
|
+
|
|
51
|
+
# Build application
|
|
52
|
+
RUN bun run build
|
|
53
|
+
|
|
54
|
+
# Prune dev dependencies
|
|
55
|
+
RUN bun install --production --frozen-lockfile
|
|
56
|
+
|
|
57
|
+
# ====================
|
|
58
|
+
# Stage 3: Production
|
|
59
|
+
# ====================
|
|
60
|
+
FROM oven/bun:1-slim AS production
|
|
61
|
+
|
|
62
|
+
WORKDIR /app
|
|
63
|
+
|
|
64
|
+
# Copy only what's needed for production
|
|
65
|
+
COPY --from=builder /app/dist ./dist
|
|
66
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
67
|
+
COPY --from=builder /app/package.json ./
|
|
68
|
+
|
|
69
|
+
# Security: non-root user
|
|
70
|
+
USER bun
|
|
71
|
+
|
|
72
|
+
# Environment
|
|
73
|
+
ENV NODE_ENV=production
|
|
74
|
+
|
|
75
|
+
# Health check
|
|
76
|
+
HEALTHCHECK --interval=30s --timeout=3s \
|
|
77
|
+
CMD curl -f http://localhost:3000/health || exit 1
|
|
78
|
+
|
|
79
|
+
EXPOSE 3000
|
|
80
|
+
|
|
81
|
+
CMD ["bun", "run", "dist/index.js"]
|
|
82
|
+
|
|
83
|
+
# ====================
|
|
84
|
+
# Stage 4: Development (optional)
|
|
85
|
+
# ====================
|
|
86
|
+
FROM oven/bun:1 AS development
|
|
87
|
+
|
|
88
|
+
WORKDIR /app
|
|
89
|
+
|
|
90
|
+
# Copy all dependencies (including dev)
|
|
91
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
92
|
+
COPY . .
|
|
93
|
+
|
|
94
|
+
# Development user
|
|
95
|
+
USER bun
|
|
96
|
+
|
|
97
|
+
ENV NODE_ENV=development
|
|
98
|
+
|
|
99
|
+
EXPOSE 3000
|
|
100
|
+
|
|
101
|
+
CMD ["bun", "run", "--watch", "src/index.ts"]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Build Targets
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Production build
|
|
108
|
+
docker build --target production -t myapp:prod .
|
|
109
|
+
|
|
110
|
+
# Development build
|
|
111
|
+
docker build --target development -t myapp:dev .
|
|
112
|
+
|
|
113
|
+
# Just dependencies (for caching)
|
|
114
|
+
docker build --target deps -t myapp:deps .
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Stage Patterns
|
|
118
|
+
|
|
119
|
+
### Base Image Pattern
|
|
120
|
+
|
|
121
|
+
```dockerfile
|
|
122
|
+
# Shared base
|
|
123
|
+
FROM node:20-alpine AS base
|
|
124
|
+
WORKDIR /app
|
|
125
|
+
RUN apk add --no-cache libc6-compat
|
|
126
|
+
|
|
127
|
+
# Dependencies inherit from base
|
|
128
|
+
FROM base AS deps
|
|
129
|
+
# ...
|
|
130
|
+
|
|
131
|
+
# Builder inherits from base
|
|
132
|
+
FROM base AS builder
|
|
133
|
+
# ...
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Test Stage Pattern
|
|
137
|
+
|
|
138
|
+
```dockerfile
|
|
139
|
+
FROM builder AS tester
|
|
140
|
+
RUN bun test
|
|
141
|
+
|
|
142
|
+
FROM builder AS production
|
|
143
|
+
# Only reaches here if tests pass
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Security Scan Pattern
|
|
147
|
+
|
|
148
|
+
```dockerfile
|
|
149
|
+
FROM builder AS scanner
|
|
150
|
+
RUN bunx @snyk/cli test
|
|
151
|
+
|
|
152
|
+
FROM builder AS production
|
|
153
|
+
# Only if scan passes
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Optimization Tips
|
|
157
|
+
|
|
158
|
+
### 1. Order by Change Frequency
|
|
159
|
+
|
|
160
|
+
```dockerfile
|
|
161
|
+
# Least likely to change first
|
|
162
|
+
COPY package.json bun.lockb ./
|
|
163
|
+
RUN bun install
|
|
164
|
+
|
|
165
|
+
# Most likely to change last
|
|
166
|
+
COPY src/ ./src/
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 2. Selective COPY
|
|
170
|
+
|
|
171
|
+
```dockerfile
|
|
172
|
+
# BAD - copies everything
|
|
173
|
+
COPY . .
|
|
174
|
+
|
|
175
|
+
# GOOD - selective
|
|
176
|
+
COPY src/ ./src/
|
|
177
|
+
COPY public/ ./public/
|
|
178
|
+
COPY package.json tsconfig.json ./
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 3. Combined Cleanup
|
|
182
|
+
|
|
183
|
+
```dockerfile
|
|
184
|
+
# Single RUN with cleanup
|
|
185
|
+
RUN bun install --frozen-lockfile && \
|
|
186
|
+
bun run build && \
|
|
187
|
+
rm -rf ~/.bun/install/cache
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Size Comparison
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Check sizes
|
|
194
|
+
docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}" | grep myapp
|
|
195
|
+
|
|
196
|
+
# Typical results:
|
|
197
|
+
# myapp:dev ~800MB (full node_modules, source)
|
|
198
|
+
# myapp:prod ~200MB (slim base, dist only)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Output Format
|
|
202
|
+
|
|
203
|
+
```markdown
|
|
204
|
+
## Multi-Stage Build Design
|
|
205
|
+
|
|
206
|
+
### Stages
|
|
207
|
+
|
|
208
|
+
| Stage | Purpose | Base Image | Size |
|
|
209
|
+
| ----------- | -------------------- | ---------- | ------ |
|
|
210
|
+
| deps | Install dependencies | bun:1 | ~500MB |
|
|
211
|
+
| builder | Build application | bun:1 | ~600MB |
|
|
212
|
+
| production | Runtime only | bun:1-slim | ~150MB |
|
|
213
|
+
| development | Dev server | bun:1 | ~600MB |
|
|
214
|
+
|
|
215
|
+
### Build Commands
|
|
216
|
+
|
|
217
|
+
\`\`\`bash
|
|
218
|
+
|
|
219
|
+
# Production
|
|
220
|
+
|
|
221
|
+
docker build --target production -t myapp .
|
|
222
|
+
|
|
223
|
+
# Development
|
|
224
|
+
|
|
225
|
+
docker build --target development -t myapp:dev .
|
|
226
|
+
\`\`\`
|
|
227
|
+
|
|
228
|
+
### Final Image Contents
|
|
229
|
+
|
|
230
|
+
- /app/dist/ (compiled code)
|
|
231
|
+
- /app/node_modules/ (prod deps only)
|
|
232
|
+
- /app/package.json
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Critical Rules
|
|
236
|
+
|
|
237
|
+
1. **SEPARATE STAGES** - Build vs runtime
|
|
238
|
+
2. **SLIM FINAL** - Use -slim or -alpine for production
|
|
239
|
+
3. **PRUNE DEPS** - Only production deps in final
|
|
240
|
+
4. **NO SOURCE** - Only dist in production
|
|
241
|
+
5. **LAYER CACHE** - Order by change frequency
|