@malamute/ai-rules 1.0.0 → 1.2.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/README.md +270 -121
- package/bin/cli.js +5 -2
- package/configs/_shared/.claude/rules/conventions/documentation.md +324 -0
- package/configs/_shared/.claude/rules/conventions/git.md +265 -0
- package/configs/_shared/.claude/rules/{performance.md → conventions/performance.md} +1 -1
- package/configs/_shared/.claude/rules/conventions/principles.md +334 -0
- package/configs/_shared/.claude/rules/devops/ci-cd.md +262 -0
- package/configs/_shared/.claude/rules/devops/docker.md +275 -0
- package/configs/_shared/.claude/rules/devops/nx.md +194 -0
- package/configs/_shared/.claude/rules/domain/backend/api-design.md +203 -0
- package/configs/_shared/.claude/rules/lang/csharp/async.md +220 -0
- package/configs/_shared/.claude/rules/lang/csharp/csharp.md +314 -0
- package/configs/_shared/.claude/rules/lang/csharp/linq.md +210 -0
- package/configs/_shared/.claude/rules/lang/python/async.md +337 -0
- package/configs/_shared/.claude/rules/lang/python/celery.md +476 -0
- package/configs/_shared/.claude/rules/lang/python/config.md +339 -0
- package/configs/{python/.claude/rules → _shared/.claude/rules/lang/python}/database/sqlalchemy.md +6 -1
- package/configs/_shared/.claude/rules/lang/python/deployment.md +523 -0
- package/configs/_shared/.claude/rules/lang/python/error-handling.md +330 -0
- package/configs/_shared/.claude/rules/lang/python/migrations.md +421 -0
- package/configs/_shared/.claude/rules/lang/python/python.md +172 -0
- package/configs/_shared/.claude/rules/lang/python/repository.md +383 -0
- package/configs/{python/.claude/rules → _shared/.claude/rules/lang/python}/testing.md +2 -69
- package/configs/_shared/.claude/rules/lang/typescript/async.md +447 -0
- package/configs/_shared/.claude/rules/lang/typescript/generics.md +356 -0
- package/configs/_shared/.claude/rules/lang/typescript/typescript.md +212 -0
- package/configs/_shared/.claude/rules/quality/error-handling.md +48 -0
- package/configs/_shared/.claude/rules/quality/logging.md +45 -0
- package/configs/_shared/.claude/rules/quality/observability.md +240 -0
- package/configs/_shared/.claude/rules/quality/testing-patterns.md +65 -0
- package/configs/_shared/.claude/rules/security/secrets-management.md +222 -0
- package/configs/_shared/.claude/skills/analysis/explore/SKILL.md +257 -0
- package/configs/_shared/.claude/skills/analysis/security-audit/SKILL.md +184 -0
- package/configs/_shared/.claude/skills/dev/api-endpoint/SKILL.md +126 -0
- package/configs/_shared/.claude/{commands/generate-tests.md → skills/dev/generate-tests/SKILL.md} +6 -0
- package/configs/_shared/.claude/{commands/fix-issue.md → skills/git/fix-issue/SKILL.md} +6 -0
- package/configs/_shared/.claude/{commands/review-pr.md → skills/git/review-pr/SKILL.md} +6 -0
- package/configs/_shared/.claude/skills/infra/deploy/SKILL.md +139 -0
- package/configs/_shared/.claude/skills/infra/docker/SKILL.md +95 -0
- package/configs/_shared/.claude/skills/infra/migration/SKILL.md +158 -0
- package/configs/_shared/.claude/skills/nx/nx-affected/SKILL.md +72 -0
- package/configs/_shared/.claude/skills/nx/nx-lib/SKILL.md +375 -0
- package/configs/_shared/CLAUDE.md +52 -149
- package/configs/angular/.claude/rules/{components.md → core/components.md} +69 -15
- package/configs/angular/.claude/rules/core/resource.md +285 -0
- package/configs/angular/.claude/rules/core/signals.md +323 -0
- package/configs/angular/.claude/rules/http.md +338 -0
- package/configs/angular/.claude/rules/routing.md +291 -0
- package/configs/angular/.claude/rules/ssr.md +312 -0
- package/configs/angular/.claude/rules/state/signal-store.md +408 -0
- package/configs/angular/.claude/rules/{state.md → state/state.md} +2 -2
- package/configs/angular/.claude/rules/testing.md +7 -7
- package/configs/angular/.claude/rules/ui/aria.md +422 -0
- package/configs/angular/.claude/rules/ui/forms.md +424 -0
- package/configs/angular/.claude/rules/ui/pipes-directives.md +335 -0
- package/configs/angular/.claude/settings.json +1 -0
- package/configs/angular/.claude/skills/ngrx-slice/SKILL.md +362 -0
- package/configs/angular/.claude/skills/signal-store/SKILL.md +445 -0
- package/configs/angular/CLAUDE.md +24 -216
- package/configs/dotnet/.claude/rules/background-services.md +552 -0
- package/configs/dotnet/.claude/rules/configuration.md +426 -0
- package/configs/dotnet/.claude/rules/ddd.md +447 -0
- package/configs/dotnet/.claude/rules/dependency-injection.md +343 -0
- package/configs/dotnet/.claude/rules/mediatr.md +320 -0
- package/configs/dotnet/.claude/rules/middleware.md +489 -0
- package/configs/dotnet/.claude/rules/result-pattern.md +363 -0
- package/configs/dotnet/.claude/rules/validation.md +388 -0
- package/configs/dotnet/.claude/settings.json +21 -3
- package/configs/dotnet/CLAUDE.md +53 -286
- package/configs/fastapi/.claude/rules/background-tasks.md +254 -0
- package/configs/fastapi/.claude/rules/dependencies.md +170 -0
- package/configs/{python → fastapi}/.claude/rules/fastapi.md +61 -1
- package/configs/fastapi/.claude/rules/lifespan.md +274 -0
- package/configs/fastapi/.claude/rules/middleware.md +229 -0
- package/configs/fastapi/.claude/rules/pydantic.md +433 -0
- package/configs/fastapi/.claude/rules/responses.md +251 -0
- package/configs/fastapi/.claude/rules/routers.md +202 -0
- package/configs/fastapi/.claude/rules/security.md +222 -0
- package/configs/fastapi/.claude/rules/testing.md +251 -0
- package/configs/fastapi/.claude/rules/websockets.md +298 -0
- package/configs/fastapi/.claude/settings.json +33 -0
- package/configs/fastapi/CLAUDE.md +144 -0
- package/configs/flask/.claude/rules/blueprints.md +208 -0
- package/configs/flask/.claude/rules/cli.md +285 -0
- package/configs/flask/.claude/rules/configuration.md +281 -0
- package/configs/flask/.claude/rules/context.md +238 -0
- package/configs/flask/.claude/rules/error-handlers.md +278 -0
- package/configs/flask/.claude/rules/extensions.md +278 -0
- package/configs/flask/.claude/rules/flask.md +171 -0
- package/configs/flask/.claude/rules/marshmallow.md +206 -0
- package/configs/flask/.claude/rules/security.md +267 -0
- package/configs/flask/.claude/rules/testing.md +284 -0
- package/configs/flask/.claude/settings.json +33 -0
- package/configs/flask/CLAUDE.md +166 -0
- package/configs/nestjs/.claude/rules/common-patterns.md +300 -0
- package/configs/nestjs/.claude/rules/filters.md +376 -0
- package/configs/nestjs/.claude/rules/interceptors.md +317 -0
- package/configs/nestjs/.claude/rules/middleware.md +321 -0
- package/configs/nestjs/.claude/rules/modules.md +26 -0
- package/configs/nestjs/.claude/rules/pipes.md +351 -0
- package/configs/nestjs/.claude/rules/websockets.md +451 -0
- package/configs/nestjs/.claude/settings.json +16 -2
- package/configs/nestjs/CLAUDE.md +57 -215
- package/configs/nextjs/.claude/rules/api-routes.md +358 -0
- package/configs/nextjs/.claude/rules/authentication.md +355 -0
- package/configs/nextjs/.claude/rules/components.md +52 -0
- package/configs/nextjs/.claude/rules/data-fetching.md +249 -0
- package/configs/nextjs/.claude/rules/database.md +400 -0
- package/configs/nextjs/.claude/rules/middleware.md +303 -0
- package/configs/nextjs/.claude/rules/routing.md +324 -0
- package/configs/nextjs/.claude/rules/seo.md +350 -0
- package/configs/nextjs/.claude/rules/server-actions.md +353 -0
- package/configs/nextjs/.claude/rules/state/zustand.md +6 -6
- package/configs/nextjs/.claude/settings.json +5 -0
- package/configs/nextjs/CLAUDE.md +69 -331
- package/package.json +23 -9
- package/src/cli.js +220 -0
- package/src/config.js +29 -0
- package/src/index.js +13 -0
- package/src/installer.js +361 -0
- package/src/merge.js +116 -0
- package/src/tech-config.json +29 -0
- package/src/utils.js +96 -0
- package/configs/python/.claude/rules/flask.md +0 -332
- package/configs/python/.claude/settings.json +0 -18
- package/configs/python/CLAUDE.md +0 -273
- package/src/install.js +0 -315
- /package/configs/_shared/.claude/rules/{accessibility.md → domain/frontend/accessibility.md} +0 -0
- /package/configs/_shared/.claude/rules/{security.md → security/security.md} +0 -0
- /package/configs/_shared/.claude/skills/{debug → dev/debug}/SKILL.md +0 -0
- /package/configs/_shared/.claude/skills/{learning → dev/learning}/SKILL.md +0 -0
- /package/configs/_shared/.claude/skills/{spec → dev/spec}/SKILL.md +0 -0
- /package/configs/_shared/.claude/skills/{review → git/review}/SKILL.md +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deploy
|
|
3
|
+
description: Generate deployment configuration and CI/CD pipelines
|
|
4
|
+
argument-hint: "<target> [--provider <name>]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Deployment Configuration Generator
|
|
8
|
+
|
|
9
|
+
Generate deployment configurations for various platforms.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
- `/deploy github-actions` - GitHub Actions workflow
|
|
14
|
+
- `/deploy docker` - Docker + docker-compose production setup
|
|
15
|
+
- `/deploy kubernetes` - Kubernetes manifests
|
|
16
|
+
- `/deploy vercel` - Vercel configuration
|
|
17
|
+
- `/deploy aws` - AWS (ECS/Lambda) configuration
|
|
18
|
+
- `/deploy --provider azure` - Azure-specific setup
|
|
19
|
+
|
|
20
|
+
## Behavior
|
|
21
|
+
|
|
22
|
+
1. **Analyze Project**
|
|
23
|
+
- Detect framework and runtime
|
|
24
|
+
- Identify build commands
|
|
25
|
+
- Find environment variables needed
|
|
26
|
+
- Check for database/cache dependencies
|
|
27
|
+
|
|
28
|
+
2. **Generate Configuration**
|
|
29
|
+
- CI/CD pipeline files
|
|
30
|
+
- Infrastructure configuration
|
|
31
|
+
- Environment templates
|
|
32
|
+
- Deployment scripts
|
|
33
|
+
|
|
34
|
+
## Targets
|
|
35
|
+
|
|
36
|
+
### `github-actions`
|
|
37
|
+
|
|
38
|
+
Generate `.github/workflows/` files:
|
|
39
|
+
|
|
40
|
+
| Workflow | Trigger | Actions |
|
|
41
|
+
|----------|---------|---------|
|
|
42
|
+
| ci.yml | PR, push | Lint, test, build |
|
|
43
|
+
| deploy.yml | push to main | Build, push, deploy |
|
|
44
|
+
| release.yml | tag | Create release, changelog |
|
|
45
|
+
|
|
46
|
+
**Output files:**
|
|
47
|
+
- `.github/workflows/ci.yml`
|
|
48
|
+
- `.github/workflows/deploy.yml`
|
|
49
|
+
- `.github/workflows/release.yml`
|
|
50
|
+
|
|
51
|
+
### `docker`
|
|
52
|
+
|
|
53
|
+
Generate production Docker setup:
|
|
54
|
+
- Multi-stage `Dockerfile`
|
|
55
|
+
- `docker-compose.prod.yml`
|
|
56
|
+
- `docker-compose.override.yml` (dev)
|
|
57
|
+
- `.dockerignore`
|
|
58
|
+
- `scripts/deploy.sh`
|
|
59
|
+
|
|
60
|
+
### `kubernetes`
|
|
61
|
+
|
|
62
|
+
Generate K8s manifests:
|
|
63
|
+
- `k8s/deployment.yaml`
|
|
64
|
+
- `k8s/service.yaml`
|
|
65
|
+
- `k8s/ingress.yaml`
|
|
66
|
+
- `k8s/configmap.yaml`
|
|
67
|
+
- `k8s/secrets.yaml` (template)
|
|
68
|
+
- `k8s/hpa.yaml` (autoscaling)
|
|
69
|
+
- `kustomization.yaml`
|
|
70
|
+
|
|
71
|
+
### `vercel`
|
|
72
|
+
|
|
73
|
+
Generate Vercel config:
|
|
74
|
+
- `vercel.json`
|
|
75
|
+
- Environment variable setup guide
|
|
76
|
+
- Build configuration
|
|
77
|
+
|
|
78
|
+
### `aws`
|
|
79
|
+
|
|
80
|
+
Generate AWS config:
|
|
81
|
+
|
|
82
|
+
**For ECS:**
|
|
83
|
+
- `ecs/task-definition.json`
|
|
84
|
+
- `ecs/service.json`
|
|
85
|
+
- `buildspec.yml` (CodeBuild)
|
|
86
|
+
- `appspec.yml` (CodeDeploy)
|
|
87
|
+
|
|
88
|
+
**For Lambda:**
|
|
89
|
+
- `serverless.yml` or `sam/template.yaml`
|
|
90
|
+
- Lambda handler wrapper
|
|
91
|
+
|
|
92
|
+
## Output Format
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
## Deployment Configuration
|
|
96
|
+
|
|
97
|
+
### Target: GitHub Actions + Docker + Kubernetes
|
|
98
|
+
|
|
99
|
+
## Files Created
|
|
100
|
+
|
|
101
|
+
### .github/workflows/deploy.yml
|
|
102
|
+
<workflow content>
|
|
103
|
+
|
|
104
|
+
### k8s/deployment.yaml
|
|
105
|
+
<k8s manifest>
|
|
106
|
+
|
|
107
|
+
### k8s/service.yaml
|
|
108
|
+
<k8s manifest>
|
|
109
|
+
|
|
110
|
+
## Environment Variables Required
|
|
111
|
+
|
|
112
|
+
| Variable | Description | Example |
|
|
113
|
+
|----------|-------------|---------|
|
|
114
|
+
| DATABASE_URL | PostgreSQL connection | postgresql://... |
|
|
115
|
+
| REDIS_URL | Redis connection | redis://... |
|
|
116
|
+
| SECRET_KEY | Application secret | <random> |
|
|
117
|
+
|
|
118
|
+
## Deployment Steps
|
|
119
|
+
|
|
120
|
+
1. Configure secrets in GitHub/provider
|
|
121
|
+
2. Push to main branch
|
|
122
|
+
3. Monitor deployment
|
|
123
|
+
4. Verify health checks
|
|
124
|
+
|
|
125
|
+
## Rollback
|
|
126
|
+
|
|
127
|
+
To rollback: `kubectl rollout undo deployment/myapp`
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Best Practices Included
|
|
131
|
+
|
|
132
|
+
- Health checks and readiness probes
|
|
133
|
+
- Resource limits and requests
|
|
134
|
+
- Horizontal pod autoscaling
|
|
135
|
+
- Rolling update strategy
|
|
136
|
+
- Secret management (never in code)
|
|
137
|
+
- Environment-specific configurations
|
|
138
|
+
- Monitoring and logging setup
|
|
139
|
+
- SSL/TLS configuration
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docker
|
|
3
|
+
description: Generate Dockerfile and docker-compose configuration for the project
|
|
4
|
+
argument-hint: "[service-name]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Docker Configuration Generator
|
|
8
|
+
|
|
9
|
+
Generate production-ready Docker configuration for the current project.
|
|
10
|
+
|
|
11
|
+
## Behavior
|
|
12
|
+
|
|
13
|
+
1. **Detect Project Type**
|
|
14
|
+
- Check for `package.json` → Node.js/Next.js/NestJS
|
|
15
|
+
- Check for `requirements.txt` / `pyproject.toml` → Python/FastAPI/Django
|
|
16
|
+
- Check for `*.csproj` / `*.sln` → .NET
|
|
17
|
+
|
|
18
|
+
2. **Analyze Dependencies**
|
|
19
|
+
- Database requirements (PostgreSQL, MySQL, MongoDB, Redis)
|
|
20
|
+
- Message queues (RabbitMQ, Kafka)
|
|
21
|
+
- Cache layers (Redis, Memcached)
|
|
22
|
+
- Storage requirements
|
|
23
|
+
|
|
24
|
+
3. **Generate Configuration**
|
|
25
|
+
- Create multi-stage `Dockerfile` with:
|
|
26
|
+
- Build stage with dev dependencies
|
|
27
|
+
- Production stage with minimal footprint
|
|
28
|
+
- Non-root user
|
|
29
|
+
- Health checks
|
|
30
|
+
- Proper caching of layers
|
|
31
|
+
- Create `docker-compose.yml` with:
|
|
32
|
+
- Application service
|
|
33
|
+
- Required infrastructure services
|
|
34
|
+
- Volume mounts for persistence
|
|
35
|
+
- Network configuration
|
|
36
|
+
- Health checks and dependencies
|
|
37
|
+
- Create `.dockerignore` if not present
|
|
38
|
+
|
|
39
|
+
4. **Optional: Generate for specific service**
|
|
40
|
+
- If service name provided (e.g., `/docker worker`), generate worker-specific config
|
|
41
|
+
|
|
42
|
+
## Output Format
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
## Dockerfile
|
|
46
|
+
|
|
47
|
+
<dockerfile content>
|
|
48
|
+
|
|
49
|
+
## docker-compose.yml
|
|
50
|
+
|
|
51
|
+
<compose content>
|
|
52
|
+
|
|
53
|
+
## .dockerignore
|
|
54
|
+
|
|
55
|
+
<ignore patterns>
|
|
56
|
+
|
|
57
|
+
## Commands
|
|
58
|
+
|
|
59
|
+
- Build: `docker compose build`
|
|
60
|
+
- Start: `docker compose up -d`
|
|
61
|
+
- Logs: `docker compose logs -f`
|
|
62
|
+
- Stop: `docker compose down`
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Framework-Specific Requirements
|
|
66
|
+
|
|
67
|
+
### Node.js / Next.js
|
|
68
|
+
- Use `node:20-alpine` base
|
|
69
|
+
- Copy `package*.json` first for layer caching
|
|
70
|
+
- Use `npm ci --only=production`
|
|
71
|
+
- Set `NODE_ENV=production`
|
|
72
|
+
|
|
73
|
+
### Python / FastAPI
|
|
74
|
+
- Use `python:3.12-slim` base
|
|
75
|
+
- Install only production requirements
|
|
76
|
+
- Use `gunicorn` + `uvicorn` workers
|
|
77
|
+
- Set `PYTHONDONTWRITEBYTECODE=1`
|
|
78
|
+
|
|
79
|
+
### .NET
|
|
80
|
+
- Use `mcr.microsoft.com/dotnet/aspnet:8.0` runtime
|
|
81
|
+
- Build with `mcr.microsoft.com/dotnet/sdk:8.0`
|
|
82
|
+
- Publish as self-contained if needed
|
|
83
|
+
|
|
84
|
+
### NestJS
|
|
85
|
+
- Similar to Node.js
|
|
86
|
+
- Include Prisma generation if detected
|
|
87
|
+
- Handle migrations in entrypoint
|
|
88
|
+
|
|
89
|
+
## Security Considerations
|
|
90
|
+
|
|
91
|
+
- Never include secrets in Dockerfile
|
|
92
|
+
- Use `.dockerignore` to exclude sensitive files
|
|
93
|
+
- Run as non-root user
|
|
94
|
+
- Pin base image versions
|
|
95
|
+
- Scan for vulnerabilities recommendation
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: migration
|
|
3
|
+
description: Generate and manage database migrations
|
|
4
|
+
argument-hint: "<action> [name]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Database Migration Manager
|
|
8
|
+
|
|
9
|
+
Generate and manage database migrations across different ORMs.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
- `/migration create add_users_table` - Create new migration
|
|
14
|
+
- `/migration status` - Show migration status
|
|
15
|
+
- `/migration up` - Apply pending migrations
|
|
16
|
+
- `/migration down` - Rollback last migration
|
|
17
|
+
- `/migration reset` - Reset database (dev only)
|
|
18
|
+
|
|
19
|
+
## Behavior
|
|
20
|
+
|
|
21
|
+
1. **Detect ORM/Migration Tool**
|
|
22
|
+
- Prisma → `prisma migrate`
|
|
23
|
+
- TypeORM → TypeORM migrations
|
|
24
|
+
- Drizzle → Drizzle Kit
|
|
25
|
+
- Alembic → Alembic migrations
|
|
26
|
+
- EF Core → Entity Framework migrations
|
|
27
|
+
- Django → Django migrations
|
|
28
|
+
|
|
29
|
+
2. **Create Migration**
|
|
30
|
+
|
|
31
|
+
### Prisma
|
|
32
|
+
```bash
|
|
33
|
+
npx prisma migrate dev --name <name>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Alembic
|
|
37
|
+
```bash
|
|
38
|
+
alembic revision --autogenerate -m "<name>"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### EF Core
|
|
42
|
+
```bash
|
|
43
|
+
dotnet ef migrations add <name>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
3. **Migration File Template**
|
|
47
|
+
|
|
48
|
+
Generate migration with:
|
|
49
|
+
- Descriptive name with timestamp
|
|
50
|
+
- Up migration (forward)
|
|
51
|
+
- Down migration (rollback)
|
|
52
|
+
- Safe operations (transactions where supported)
|
|
53
|
+
|
|
54
|
+
## Actions
|
|
55
|
+
|
|
56
|
+
### `create <name>`
|
|
57
|
+
|
|
58
|
+
1. Analyze schema changes (if ORM detected)
|
|
59
|
+
2. Generate migration file
|
|
60
|
+
3. Show what will be migrated
|
|
61
|
+
|
|
62
|
+
**Output:**
|
|
63
|
+
```
|
|
64
|
+
## Migration Created
|
|
65
|
+
|
|
66
|
+
File: migrations/20240115_add_users_table.ts
|
|
67
|
+
|
|
68
|
+
### Changes Detected
|
|
69
|
+
- CREATE TABLE users (id, email, name, created_at)
|
|
70
|
+
- CREATE INDEX ix_users_email ON users(email)
|
|
71
|
+
|
|
72
|
+
### Commands
|
|
73
|
+
- Apply: npm run migrate
|
|
74
|
+
- Rollback: npm run migrate:down
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### `status`
|
|
78
|
+
|
|
79
|
+
Show current migration status:
|
|
80
|
+
```
|
|
81
|
+
## Migration Status
|
|
82
|
+
|
|
83
|
+
Applied:
|
|
84
|
+
✓ 20240110_initial
|
|
85
|
+
✓ 20240112_add_posts
|
|
86
|
+
|
|
87
|
+
Pending:
|
|
88
|
+
○ 20240115_add_comments
|
|
89
|
+
|
|
90
|
+
Current: 20240112_add_posts
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### `up`
|
|
94
|
+
|
|
95
|
+
Apply pending migrations with safety checks:
|
|
96
|
+
1. Backup reminder for production
|
|
97
|
+
2. Show what will be applied
|
|
98
|
+
3. Confirm before applying
|
|
99
|
+
4. Run migrations
|
|
100
|
+
5. Verify success
|
|
101
|
+
|
|
102
|
+
### `down`
|
|
103
|
+
|
|
104
|
+
Rollback with safety:
|
|
105
|
+
1. Show what will be rolled back
|
|
106
|
+
2. Warn about data loss
|
|
107
|
+
3. Confirm before rolling back
|
|
108
|
+
4. Run rollback
|
|
109
|
+
5. Verify success
|
|
110
|
+
|
|
111
|
+
## Common Migration Patterns
|
|
112
|
+
|
|
113
|
+
### Add Column (Nullable First)
|
|
114
|
+
```sql
|
|
115
|
+
-- Up
|
|
116
|
+
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
|
|
117
|
+
|
|
118
|
+
-- Down
|
|
119
|
+
ALTER TABLE users DROP COLUMN phone;
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Add Column (Non-Nullable)
|
|
123
|
+
```sql
|
|
124
|
+
-- Up
|
|
125
|
+
ALTER TABLE users ADD COLUMN role VARCHAR(20);
|
|
126
|
+
UPDATE users SET role = 'user' WHERE role IS NULL;
|
|
127
|
+
ALTER TABLE users ALTER COLUMN role SET NOT NULL;
|
|
128
|
+
|
|
129
|
+
-- Down
|
|
130
|
+
ALTER TABLE users DROP COLUMN role;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Rename Column
|
|
134
|
+
```sql
|
|
135
|
+
-- Up
|
|
136
|
+
ALTER TABLE users RENAME COLUMN name TO full_name;
|
|
137
|
+
|
|
138
|
+
-- Down
|
|
139
|
+
ALTER TABLE users RENAME COLUMN full_name TO name;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Add Index
|
|
143
|
+
```sql
|
|
144
|
+
-- Up
|
|
145
|
+
CREATE INDEX CONCURRENTLY ix_users_email ON users(email);
|
|
146
|
+
|
|
147
|
+
-- Down
|
|
148
|
+
DROP INDEX ix_users_email;
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Safety Guidelines
|
|
152
|
+
|
|
153
|
+
- Always provide rollback path
|
|
154
|
+
- Use `CONCURRENTLY` for index creation (PostgreSQL)
|
|
155
|
+
- Avoid locks on large tables
|
|
156
|
+
- Split large data migrations into batches
|
|
157
|
+
- Test migrations on copy of production data
|
|
158
|
+
- Never modify applied migrations
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nx-affected
|
|
3
|
+
description: Run Nx affected commands to test/build/lint only changed projects
|
|
4
|
+
argument-hint: [test|build|lint|e2e] (optional, defaults to test)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Nx Affected Analysis
|
|
8
|
+
|
|
9
|
+
Analyze and run commands only on affected projects based on git changes.
|
|
10
|
+
|
|
11
|
+
## Behavior
|
|
12
|
+
|
|
13
|
+
1. **Determine base branch**
|
|
14
|
+
```bash
|
|
15
|
+
# Check if main or master
|
|
16
|
+
git rev-parse --verify main 2>/dev/null && echo "main" || echo "master"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. **Show affected projects**
|
|
20
|
+
```bash
|
|
21
|
+
nx show projects --affected --base=<base> --head=HEAD
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
3. **Visualize dependencies** (optional)
|
|
25
|
+
```bash
|
|
26
|
+
nx affected:graph --base=<base> --head=HEAD
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
4. **Run the requested target**
|
|
30
|
+
|
|
31
|
+
Based on argument (default: `test`):
|
|
32
|
+
|
|
33
|
+
| Argument | Command |
|
|
34
|
+
|----------|---------|
|
|
35
|
+
| `test` | `nx affected -t test --base=<base> --head=HEAD` |
|
|
36
|
+
| `build` | `nx affected -t build --base=<base> --head=HEAD` |
|
|
37
|
+
| `lint` | `nx affected -t lint --base=<base> --head=HEAD` |
|
|
38
|
+
| `e2e` | `nx affected -t e2e --base=<base> --head=HEAD` |
|
|
39
|
+
| `all` | Run test, lint, build sequentially |
|
|
40
|
+
|
|
41
|
+
## Output Format
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
## Affected Projects
|
|
45
|
+
|
|
46
|
+
Based on changes from `main`:
|
|
47
|
+
|
|
48
|
+
- `users-feature-list` (3 files changed)
|
|
49
|
+
- `users-data-access` (1 file changed)
|
|
50
|
+
- `shared-ui-button` (2 files changed)
|
|
51
|
+
|
|
52
|
+
## Running: nx affected -t test
|
|
53
|
+
|
|
54
|
+
✓ users-feature-list (2.3s)
|
|
55
|
+
✓ users-data-access (1.1s)
|
|
56
|
+
✓ shared-ui-button (0.8s)
|
|
57
|
+
|
|
58
|
+
All 3 affected projects passed.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## CI Usage Hint
|
|
62
|
+
|
|
63
|
+
Suggest adding to CI if not present:
|
|
64
|
+
|
|
65
|
+
```yaml
|
|
66
|
+
# .github/workflows/ci.yml
|
|
67
|
+
- name: Test affected
|
|
68
|
+
run: nx affected -t test --base=origin/main --head=HEAD
|
|
69
|
+
|
|
70
|
+
- name: Build affected
|
|
71
|
+
run: nx affected -t build --base=origin/main --head=HEAD
|
|
72
|
+
```
|