autoworkflow 3.1.5 → 3.5.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/.claude/commands/analyze.md +19 -0
- package/.claude/commands/audit.md +26 -0
- package/.claude/commands/build.md +39 -0
- package/.claude/commands/commit.md +25 -0
- package/.claude/commands/fix.md +23 -0
- package/.claude/commands/plan.md +18 -0
- package/.claude/commands/suggest.md +23 -0
- package/.claude/commands/verify.md +18 -0
- package/.claude/hooks/post-bash-router.sh +20 -0
- package/.claude/hooks/post-commit.sh +140 -0
- package/.claude/hooks/pre-edit.sh +129 -0
- package/.claude/hooks/session-check.sh +79 -0
- package/.claude/settings.json +40 -6
- package/.claude/settings.local.json +3 -1
- package/.claude/skills/actix.md +337 -0
- package/.claude/skills/alembic.md +504 -0
- package/.claude/skills/angular.md +237 -0
- package/.claude/skills/api-design.md +187 -0
- package/.claude/skills/aspnet-core.md +377 -0
- package/.claude/skills/astro.md +245 -0
- package/.claude/skills/auth-clerk.md +327 -0
- package/.claude/skills/auth-firebase.md +367 -0
- package/.claude/skills/auth-nextauth.md +359 -0
- package/.claude/skills/auth-supabase.md +368 -0
- package/.claude/skills/axum.md +386 -0
- package/.claude/skills/blazor.md +456 -0
- package/.claude/skills/chi.md +348 -0
- package/.claude/skills/code-review.md +133 -0
- package/.claude/skills/csharp.md +296 -0
- package/.claude/skills/css-modules.md +325 -0
- package/.claude/skills/cypress.md +343 -0
- package/.claude/skills/debugging.md +133 -0
- package/.claude/skills/diesel.md +392 -0
- package/.claude/skills/django.md +301 -0
- package/.claude/skills/docker.md +319 -0
- package/.claude/skills/doctrine.md +473 -0
- package/.claude/skills/documentation.md +182 -0
- package/.claude/skills/dotnet.md +409 -0
- package/.claude/skills/drizzle.md +293 -0
- package/.claude/skills/echo.md +321 -0
- package/.claude/skills/eloquent.md +256 -0
- package/.claude/skills/emotion.md +426 -0
- package/.claude/skills/entity-framework.md +370 -0
- package/.claude/skills/express.md +316 -0
- package/.claude/skills/fastapi.md +329 -0
- package/.claude/skills/fastify.md +299 -0
- package/.claude/skills/fiber.md +315 -0
- package/.claude/skills/flask.md +322 -0
- package/.claude/skills/gin.md +342 -0
- package/.claude/skills/git.md +116 -0
- package/.claude/skills/github-actions.md +353 -0
- package/.claude/skills/go.md +377 -0
- package/.claude/skills/gorm.md +409 -0
- package/.claude/skills/graphql.md +478 -0
- package/.claude/skills/hibernate.md +379 -0
- package/.claude/skills/hono.md +306 -0
- package/.claude/skills/java.md +400 -0
- package/.claude/skills/jest.md +313 -0
- package/.claude/skills/jpa.md +282 -0
- package/.claude/skills/kotlin.md +347 -0
- package/.claude/skills/kubernetes.md +363 -0
- package/.claude/skills/laravel.md +414 -0
- package/.claude/skills/mcp-browser.md +320 -0
- package/.claude/skills/mcp-database.md +219 -0
- package/.claude/skills/mcp-fetch.md +241 -0
- package/.claude/skills/mcp-filesystem.md +204 -0
- package/.claude/skills/mcp-github.md +217 -0
- package/.claude/skills/mcp-memory.md +240 -0
- package/.claude/skills/mcp-search.md +218 -0
- package/.claude/skills/mcp-slack.md +262 -0
- package/.claude/skills/micronaut.md +388 -0
- package/.claude/skills/mongodb.md +319 -0
- package/.claude/skills/mongoose.md +355 -0
- package/.claude/skills/mysql.md +281 -0
- package/.claude/skills/nestjs.md +335 -0
- package/.claude/skills/nextjs-app-router.md +260 -0
- package/.claude/skills/nextjs-pages.md +172 -0
- package/.claude/skills/nuxt.md +202 -0
- package/.claude/skills/openapi.md +489 -0
- package/.claude/skills/performance.md +199 -0
- package/.claude/skills/php.md +398 -0
- package/.claude/skills/playwright.md +371 -0
- package/.claude/skills/postgresql.md +257 -0
- package/.claude/skills/prisma.md +293 -0
- package/.claude/skills/pydantic.md +304 -0
- package/.claude/skills/pytest.md +313 -0
- package/.claude/skills/python.md +272 -0
- package/.claude/skills/quarkus.md +377 -0
- package/.claude/skills/react.md +230 -0
- package/.claude/skills/redis.md +391 -0
- package/.claude/skills/refactoring.md +143 -0
- package/.claude/skills/remix.md +246 -0
- package/.claude/skills/rest-api.md +490 -0
- package/.claude/skills/rocket.md +366 -0
- package/.claude/skills/rust.md +341 -0
- package/.claude/skills/sass.md +380 -0
- package/.claude/skills/sea-orm.md +382 -0
- package/.claude/skills/security.md +167 -0
- package/.claude/skills/sequelize.md +395 -0
- package/.claude/skills/spring-boot.md +416 -0
- package/.claude/skills/sqlalchemy.md +269 -0
- package/.claude/skills/sqlx-rust.md +408 -0
- package/.claude/skills/state-jotai.md +346 -0
- package/.claude/skills/state-mobx.md +353 -0
- package/.claude/skills/state-pinia.md +431 -0
- package/.claude/skills/state-redux.md +337 -0
- package/.claude/skills/state-tanstack-query.md +434 -0
- package/.claude/skills/state-zustand.md +340 -0
- package/.claude/skills/styled-components.md +403 -0
- package/.claude/skills/svelte.md +238 -0
- package/.claude/skills/sveltekit.md +207 -0
- package/.claude/skills/symfony.md +437 -0
- package/.claude/skills/tailwind.md +279 -0
- package/.claude/skills/terraform.md +394 -0
- package/.claude/skills/testing-library.md +371 -0
- package/.claude/skills/trpc.md +426 -0
- package/.claude/skills/typeorm.md +368 -0
- package/.claude/skills/vitest.md +330 -0
- package/.claude/skills/vue.md +202 -0
- package/.claude/skills/warp.md +365 -0
- package/README.md +135 -52
- package/package.json +1 -1
- package/system/triggers.md +152 -11
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Docker Skill
|
|
2
|
+
|
|
3
|
+
## Multi-Stage Dockerfile (Node.js)
|
|
4
|
+
\`\`\`dockerfile
|
|
5
|
+
# Stage 1: Dependencies
|
|
6
|
+
FROM node:20-alpine AS deps
|
|
7
|
+
WORKDIR /app
|
|
8
|
+
COPY package.json package-lock.json ./
|
|
9
|
+
RUN npm ci --only=production
|
|
10
|
+
|
|
11
|
+
# Stage 2: Build
|
|
12
|
+
FROM node:20-alpine AS builder
|
|
13
|
+
WORKDIR /app
|
|
14
|
+
COPY package.json package-lock.json ./
|
|
15
|
+
RUN npm ci
|
|
16
|
+
COPY . .
|
|
17
|
+
RUN npm run build
|
|
18
|
+
|
|
19
|
+
# Stage 3: Production
|
|
20
|
+
FROM node:20-alpine AS runner
|
|
21
|
+
WORKDIR /app
|
|
22
|
+
|
|
23
|
+
ENV NODE_ENV=production
|
|
24
|
+
|
|
25
|
+
# Create non-root user
|
|
26
|
+
RUN addgroup --system --gid 1001 nodejs && \\
|
|
27
|
+
adduser --system --uid 1001 appuser
|
|
28
|
+
|
|
29
|
+
# Copy only necessary files
|
|
30
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
31
|
+
COPY --from=builder /app/dist ./dist
|
|
32
|
+
COPY --from=builder /app/package.json ./
|
|
33
|
+
|
|
34
|
+
USER appuser
|
|
35
|
+
|
|
36
|
+
EXPOSE 3000
|
|
37
|
+
|
|
38
|
+
CMD ["node", "dist/index.js"]
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
## Multi-Stage Dockerfile (Next.js)
|
|
42
|
+
\`\`\`dockerfile
|
|
43
|
+
FROM node:20-alpine AS deps
|
|
44
|
+
WORKDIR /app
|
|
45
|
+
COPY package.json package-lock.json ./
|
|
46
|
+
RUN npm ci
|
|
47
|
+
|
|
48
|
+
FROM node:20-alpine AS builder
|
|
49
|
+
WORKDIR /app
|
|
50
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
51
|
+
COPY . .
|
|
52
|
+
|
|
53
|
+
ENV NEXT_TELEMETRY_DISABLED=1
|
|
54
|
+
RUN npm run build
|
|
55
|
+
|
|
56
|
+
FROM node:20-alpine AS runner
|
|
57
|
+
WORKDIR /app
|
|
58
|
+
|
|
59
|
+
ENV NODE_ENV=production
|
|
60
|
+
ENV NEXT_TELEMETRY_DISABLED=1
|
|
61
|
+
|
|
62
|
+
RUN addgroup --system --gid 1001 nodejs && \\
|
|
63
|
+
adduser --system --uid 1001 nextjs
|
|
64
|
+
|
|
65
|
+
COPY --from=builder /app/public ./public
|
|
66
|
+
COPY --from=builder /app/.next/standalone ./
|
|
67
|
+
COPY --from=builder /app/.next/static ./.next/static
|
|
68
|
+
|
|
69
|
+
USER nextjs
|
|
70
|
+
|
|
71
|
+
EXPOSE 3000
|
|
72
|
+
ENV PORT=3000
|
|
73
|
+
ENV HOSTNAME="0.0.0.0"
|
|
74
|
+
|
|
75
|
+
CMD ["node", "server.js"]
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
## Docker Compose (Full Stack)
|
|
79
|
+
\`\`\`yaml
|
|
80
|
+
# docker-compose.yml
|
|
81
|
+
version: '3.8'
|
|
82
|
+
|
|
83
|
+
services:
|
|
84
|
+
app:
|
|
85
|
+
build:
|
|
86
|
+
context: .
|
|
87
|
+
dockerfile: Dockerfile
|
|
88
|
+
target: runner
|
|
89
|
+
ports:
|
|
90
|
+
- "3000:3000"
|
|
91
|
+
environment:
|
|
92
|
+
- DATABASE_URL=postgresql://postgres:password@db:5432/myapp
|
|
93
|
+
- REDIS_URL=redis://redis:6379
|
|
94
|
+
depends_on:
|
|
95
|
+
db:
|
|
96
|
+
condition: service_healthy
|
|
97
|
+
redis:
|
|
98
|
+
condition: service_started
|
|
99
|
+
networks:
|
|
100
|
+
- app-network
|
|
101
|
+
restart: unless-stopped
|
|
102
|
+
|
|
103
|
+
db:
|
|
104
|
+
image: postgres:16-alpine
|
|
105
|
+
volumes:
|
|
106
|
+
- postgres_data:/var/lib/postgresql/data
|
|
107
|
+
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
108
|
+
environment:
|
|
109
|
+
- POSTGRES_USER=postgres
|
|
110
|
+
- POSTGRES_PASSWORD=password
|
|
111
|
+
- POSTGRES_DB=myapp
|
|
112
|
+
ports:
|
|
113
|
+
- "5432:5432"
|
|
114
|
+
healthcheck:
|
|
115
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
116
|
+
interval: 5s
|
|
117
|
+
timeout: 5s
|
|
118
|
+
retries: 5
|
|
119
|
+
networks:
|
|
120
|
+
- app-network
|
|
121
|
+
|
|
122
|
+
redis:
|
|
123
|
+
image: redis:7-alpine
|
|
124
|
+
volumes:
|
|
125
|
+
- redis_data:/data
|
|
126
|
+
ports:
|
|
127
|
+
- "6379:6379"
|
|
128
|
+
command: redis-server --appendonly yes
|
|
129
|
+
networks:
|
|
130
|
+
- app-network
|
|
131
|
+
|
|
132
|
+
volumes:
|
|
133
|
+
postgres_data:
|
|
134
|
+
redis_data:
|
|
135
|
+
|
|
136
|
+
networks:
|
|
137
|
+
app-network:
|
|
138
|
+
driver: bridge
|
|
139
|
+
\`\`\`
|
|
140
|
+
|
|
141
|
+
## Docker Compose (Development)
|
|
142
|
+
\`\`\`yaml
|
|
143
|
+
# docker-compose.dev.yml
|
|
144
|
+
version: '3.8'
|
|
145
|
+
|
|
146
|
+
services:
|
|
147
|
+
app:
|
|
148
|
+
build:
|
|
149
|
+
context: .
|
|
150
|
+
dockerfile: Dockerfile.dev
|
|
151
|
+
ports:
|
|
152
|
+
- "3000:3000"
|
|
153
|
+
volumes:
|
|
154
|
+
- .:/app
|
|
155
|
+
- /app/node_modules
|
|
156
|
+
environment:
|
|
157
|
+
- NODE_ENV=development
|
|
158
|
+
command: npm run dev
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
## .dockerignore
|
|
162
|
+
\`\`\`
|
|
163
|
+
node_modules
|
|
164
|
+
npm-debug.log
|
|
165
|
+
.git
|
|
166
|
+
.gitignore
|
|
167
|
+
.env
|
|
168
|
+
.env.*
|
|
169
|
+
!.env.example
|
|
170
|
+
Dockerfile*
|
|
171
|
+
docker-compose*
|
|
172
|
+
.dockerignore
|
|
173
|
+
README.md
|
|
174
|
+
.next
|
|
175
|
+
dist
|
|
176
|
+
coverage
|
|
177
|
+
.nyc_output
|
|
178
|
+
*.log
|
|
179
|
+
\`\`\`
|
|
180
|
+
|
|
181
|
+
## Common Commands
|
|
182
|
+
\`\`\`bash
|
|
183
|
+
# Build
|
|
184
|
+
docker build -t myapp .
|
|
185
|
+
docker build -t myapp:v1.0.0 --target runner .
|
|
186
|
+
docker build --no-cache -t myapp .
|
|
187
|
+
|
|
188
|
+
# Run
|
|
189
|
+
docker run -d -p 3000:3000 --name myapp myapp
|
|
190
|
+
docker run -d -p 3000:3000 -e NODE_ENV=production myapp
|
|
191
|
+
docker run -d -p 3000:3000 -v $(pwd)/data:/app/data myapp
|
|
192
|
+
|
|
193
|
+
# Compose
|
|
194
|
+
docker compose up -d
|
|
195
|
+
docker compose up -d --build
|
|
196
|
+
docker compose down
|
|
197
|
+
docker compose down -v # Remove volumes too
|
|
198
|
+
docker compose logs -f app
|
|
199
|
+
docker compose exec app sh
|
|
200
|
+
|
|
201
|
+
# Debug
|
|
202
|
+
docker ps
|
|
203
|
+
docker logs myapp
|
|
204
|
+
docker logs -f myapp # Follow
|
|
205
|
+
docker exec -it myapp sh
|
|
206
|
+
docker inspect myapp
|
|
207
|
+
|
|
208
|
+
# Cleanup
|
|
209
|
+
docker stop $(docker ps -q)
|
|
210
|
+
docker rm $(docker ps -aq)
|
|
211
|
+
docker rmi $(docker images -q)
|
|
212
|
+
docker system prune -a # Remove all unused
|
|
213
|
+
docker volume prune # Remove unused volumes
|
|
214
|
+
\`\`\`
|
|
215
|
+
|
|
216
|
+
## Layer Optimization
|
|
217
|
+
\`\`\`dockerfile
|
|
218
|
+
# ❌ Bad - invalidates cache on any file change
|
|
219
|
+
COPY . .
|
|
220
|
+
RUN npm ci
|
|
221
|
+
|
|
222
|
+
# ✅ Good - dependencies cached separately
|
|
223
|
+
COPY package.json package-lock.json ./
|
|
224
|
+
RUN npm ci
|
|
225
|
+
COPY . .
|
|
226
|
+
\`\`\`
|
|
227
|
+
|
|
228
|
+
## Health Checks
|
|
229
|
+
\`\`\`dockerfile
|
|
230
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
|
|
231
|
+
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
|
|
232
|
+
\`\`\`
|
|
233
|
+
|
|
234
|
+
## Environment Variables
|
|
235
|
+
\`\`\`dockerfile
|
|
236
|
+
# Build-time args
|
|
237
|
+
ARG NODE_VERSION=20
|
|
238
|
+
FROM node:\${NODE_VERSION}-alpine
|
|
239
|
+
|
|
240
|
+
# Runtime env
|
|
241
|
+
ENV NODE_ENV=production
|
|
242
|
+
ENV PORT=3000
|
|
243
|
+
|
|
244
|
+
# From .env file (compose)
|
|
245
|
+
env_file:
|
|
246
|
+
- .env
|
|
247
|
+
\`\`\`
|
|
248
|
+
|
|
249
|
+
## Networking
|
|
250
|
+
\`\`\`yaml
|
|
251
|
+
# Internal service communication
|
|
252
|
+
DATABASE_URL=postgresql://postgres:password@db:5432/myapp
|
|
253
|
+
# ^^ service name
|
|
254
|
+
|
|
255
|
+
# Expose to host
|
|
256
|
+
ports:
|
|
257
|
+
- "5432:5432" # host:container
|
|
258
|
+
|
|
259
|
+
# Internal only (between containers)
|
|
260
|
+
expose:
|
|
261
|
+
- "5432"
|
|
262
|
+
\`\`\`
|
|
263
|
+
|
|
264
|
+
## Volume Patterns
|
|
265
|
+
\`\`\`yaml
|
|
266
|
+
# Named volume (data persistence)
|
|
267
|
+
volumes:
|
|
268
|
+
postgres_data:
|
|
269
|
+
driver: local
|
|
270
|
+
|
|
271
|
+
# Bind mount (development)
|
|
272
|
+
volumes:
|
|
273
|
+
- ./src:/app/src
|
|
274
|
+
- /app/node_modules # Exclude node_modules
|
|
275
|
+
|
|
276
|
+
# Read-only
|
|
277
|
+
volumes:
|
|
278
|
+
- ./config:/app/config:ro
|
|
279
|
+
\`\`\`
|
|
280
|
+
|
|
281
|
+
## Security Best Practices
|
|
282
|
+
\`\`\`dockerfile
|
|
283
|
+
# Use specific versions
|
|
284
|
+
FROM node:20.10.0-alpine3.19
|
|
285
|
+
|
|
286
|
+
# Non-root user
|
|
287
|
+
RUN addgroup -g 1001 appgroup && \\
|
|
288
|
+
adduser -u 1001 -G appgroup -s /bin/sh -D appuser
|
|
289
|
+
USER appuser
|
|
290
|
+
|
|
291
|
+
# Read-only filesystem
|
|
292
|
+
docker run --read-only myapp
|
|
293
|
+
|
|
294
|
+
# Drop capabilities
|
|
295
|
+
docker run --cap-drop ALL myapp
|
|
296
|
+
|
|
297
|
+
# No new privileges
|
|
298
|
+
docker run --security-opt no-new-privileges myapp
|
|
299
|
+
\`\`\`
|
|
300
|
+
|
|
301
|
+
## ❌ DON'T
|
|
302
|
+
- Run containers as root
|
|
303
|
+
- Use \`latest\` tag in production
|
|
304
|
+
- Store secrets in Dockerfile
|
|
305
|
+
- Copy unnecessary files (use .dockerignore)
|
|
306
|
+
- Use single-stage builds for production
|
|
307
|
+
- Ignore layer caching order
|
|
308
|
+
- Run multiple processes per container
|
|
309
|
+
|
|
310
|
+
## ✅ DO
|
|
311
|
+
- Use multi-stage builds
|
|
312
|
+
- Pin specific base image versions
|
|
313
|
+
- Create non-root users
|
|
314
|
+
- Use .dockerignore
|
|
315
|
+
- Order Dockerfile by change frequency
|
|
316
|
+
- Use health checks
|
|
317
|
+
- Set resource limits
|
|
318
|
+
- Use named volumes for data
|
|
319
|
+
- Scan images for vulnerabilities
|