@el-j/magic-helix-core 4.0.0-beta.2 → 4.0.0-beta.3
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/dist/index-B88j4AyE.js +13 -0
- package/dist/index-B88j4AyE.js.map +1 -0
- package/dist/index-CY-pQbuu.cjs +2 -0
- package/dist/index-CY-pQbuu.cjs.map +1 -0
- package/dist/index.cjs +75 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.mjs +2234 -51
- package/dist/index.mjs.map +1 -1
- package/dist/pattern-combiner.d.ts +1 -1
- package/dist/plugin-loader.d.ts +2 -1
- package/package.json +4 -4
- package/dist/BasePlugin-6wv0hYJ9.js +0 -98
- package/dist/BasePlugin-6wv0hYJ9.js.map +0 -1
- package/dist/BasePlugin-odQJAKA-.cjs +0 -2
- package/dist/BasePlugin-odQJAKA-.cjs.map +0 -1
- package/dist/builtin-plugins/base/BasePlugin.d.ts +0 -69
- package/dist/builtin-plugins/cpp/index.d.ts +0 -46
- package/dist/builtin-plugins/csharp/index.d.ts +0 -20
- package/dist/builtin-plugins/go/index.d.ts +0 -23
- package/dist/builtin-plugins/index.d.ts +0 -16
- package/dist/builtin-plugins/java/index.d.ts +0 -22
- package/dist/builtin-plugins/nodejs/index.d.ts +0 -44
- package/dist/builtin-plugins/php/index.d.ts +0 -20
- package/dist/builtin-plugins/python/index.d.ts +0 -27
- package/dist/builtin-plugins/ruby/index.d.ts +0 -20
- package/dist/builtin-plugins/rust/index.d.ts +0 -53
- package/dist/builtin-plugins/swift/index.d.ts +0 -22
- package/dist/default_templates/angular/angular-core.md +0 -19
- package/dist/default_templates/architecture/codeowners.md +0 -123
- package/dist/default_templates/architecture/monorepo.md +0 -146
- package/dist/default_templates/architecture/nx.md +0 -122
- package/dist/default_templates/architecture/turborepo.md +0 -114
- package/dist/default_templates/ci/github-actions.md +0 -268
- package/dist/default_templates/ci/gitlab-ci.md +0 -330
- package/dist/default_templates/containers/docker-multistage.md +0 -120
- package/dist/default_templates/containers/kubernetes-deploy.md +0 -210
- package/dist/default_templates/devops/docker-compose.md +0 -111
- package/dist/default_templates/devops/docker-dockerfile.md +0 -94
- package/dist/default_templates/devops/github-actions.md +0 -160
- package/dist/default_templates/devops/gitlab-ci.md +0 -210
- package/dist/default_templates/dotnet/framework-aspnetcore.md +0 -205
- package/dist/default_templates/dotnet/framework-blazor.md +0 -271
- package/dist/default_templates/dotnet/lang-csharp.md +0 -162
- package/dist/default_templates/generic/lang-typescript.md +0 -57
- package/dist/default_templates/generic/state-redux.md +0 -21
- package/dist/default_templates/generic/state-rxjs.md +0 -6
- package/dist/default_templates/generic/style-mui.md +0 -23
- package/dist/default_templates/generic/style-tailwind.md +0 -76
- package/dist/default_templates/generic/test-cypress.md +0 -21
- package/dist/default_templates/generic/test-jest.md +0 -20
- package/dist/default_templates/generic/test-playwright.md +0 -21
- package/dist/default_templates/generic/test-vitest.md +0 -131
- package/dist/default_templates/go/lang-go.md +0 -571
- package/dist/default_templates/java/build-gradle.md +0 -102
- package/dist/default_templates/java/build-maven.md +0 -86
- package/dist/default_templates/java/framework-spring-boot.md +0 -179
- package/dist/default_templates/java/lang-java.md +0 -78
- package/dist/default_templates/java/lang-kotlin.md +0 -88
- package/dist/default_templates/meta/magic-helix-meta.md +0 -213
- package/dist/default_templates/meta/meta-debug.md +0 -459
- package/dist/default_templates/meta/meta-implement.md +0 -450
- package/dist/default_templates/meta/meta-roadmap.md +0 -265
- package/dist/default_templates/nestjs/nestjs-core.md +0 -7
- package/dist/default_templates/patterns/architecture/clean-architecture.md +0 -469
- package/dist/default_templates/patterns/architecture/dependency-injection.md +0 -517
- package/dist/default_templates/patterns/architecture/domain-driven-design.md +0 -621
- package/dist/default_templates/patterns/architecture/layered-architecture.md +0 -382
- package/dist/default_templates/patterns/architecture/repository-pattern.md +0 -408
- package/dist/default_templates/patterns/domain-expertise/nextjs-rules.md +0 -115
- package/dist/default_templates/patterns/domain-expertise/react-patterns.md +0 -181
- package/dist/default_templates/patterns/domain-expertise/server-components.md +0 -212
- package/dist/default_templates/patterns/domain-expertise/shadcn-ui.md +0 -52
- package/dist/default_templates/patterns/domain-expertise/tailwind-patterns.md +0 -52
- package/dist/default_templates/patterns/environment/container-awareness.md +0 -17
- package/dist/default_templates/patterns/environment/ide-features.md +0 -17
- package/dist/default_templates/patterns/environment/os-commands.md +0 -17
- package/dist/default_templates/patterns/organization/heading-hierarchy.md +0 -103
- package/dist/default_templates/patterns/organization/sequential-workflows.md +0 -102
- package/dist/default_templates/patterns/organization/xml-rule-groups.md +0 -64
- package/dist/default_templates/patterns/reasoning/agent-loop.md +0 -151
- package/dist/default_templates/patterns/reasoning/confirmation-gates.md +0 -141
- package/dist/default_templates/patterns/reasoning/dependency-analysis.md +0 -132
- package/dist/default_templates/patterns/reasoning/one-tool-per-iteration.md +0 -152
- package/dist/default_templates/patterns/reasoning/preview-before-action.md +0 -194
- package/dist/default_templates/patterns/reasoning/reflection-checkpoints.md +0 -166
- package/dist/default_templates/patterns/reasoning/result-verification.md +0 -157
- package/dist/default_templates/patterns/reasoning/subtask-breakdown.md +0 -131
- package/dist/default_templates/patterns/reasoning/thinking-tags.md +0 -100
- package/dist/default_templates/patterns/role-definition/capability-declarations.md +0 -72
- package/dist/default_templates/patterns/role-definition/expert-identity.md +0 -45
- package/dist/default_templates/patterns/role-definition/scope-boundaries.md +0 -61
- package/dist/default_templates/patterns/safety/code-safety-rules.md +0 -17
- package/dist/default_templates/patterns/safety/credential-handling.md +0 -17
- package/dist/default_templates/patterns/safety/destructive-warnings.md +0 -17
- package/dist/default_templates/patterns/safety/refusal-messages.md +0 -17
- package/dist/default_templates/patterns/tone/adaptive-tone.md +0 -17
- package/dist/default_templates/patterns/tone/concise-communication.md +0 -17
- package/dist/default_templates/patterns/tone/forbidden-phrases.md +0 -17
- package/dist/default_templates/patterns/tool-guidelines/function-schemas.md +0 -143
- package/dist/default_templates/patterns/tool-guidelines/parameter-examples.md +0 -137
- package/dist/default_templates/patterns/tool-guidelines/usage-policies.md +0 -105
- package/dist/default_templates/php/framework-laravel.md +0 -112
- package/dist/default_templates/php/lang-php.md +0 -94
- package/dist/default_templates/python/lang-python.md +0 -508
- package/dist/default_templates/react/react-core.md +0 -677
- package/dist/default_templates/react/react-zustand.md +0 -7
- package/dist/default_templates/ruby/framework-rails.md +0 -309
- package/dist/default_templates/ruby/framework-sinatra.md +0 -227
- package/dist/default_templates/ruby/lang-ruby.md +0 -216
- package/dist/default_templates/rust/lang-rust.md +0 -89
- package/dist/default_templates/swift/framework-vapor.md +0 -352
- package/dist/default_templates/swift/lang-swift.md +0 -291
- package/dist/default_templates/vue/style-primevue.md +0 -6
- package/dist/default_templates/vue/style-quasar.md +0 -22
- package/dist/default_templates/vue/vue-core.md +0 -108
- package/dist/default_templates/vue/vue-pinia.md +0 -5
- package/dist/index-0GK4RlUx.js +0 -1748
- package/dist/index-0GK4RlUx.js.map +0 -1
- package/dist/index-AkVwRl-r.js +0 -92
- package/dist/index-AkVwRl-r.js.map +0 -1
- package/dist/index-B6BeG1yT.cjs +0 -68
- package/dist/index-B6BeG1yT.cjs.map +0 -1
- package/dist/index-B8pyjKdF.js +0 -94
- package/dist/index-B8pyjKdF.js.map +0 -1
- package/dist/index-BQ6v041y.js +0 -13
- package/dist/index-BQ6v041y.js.map +0 -1
- package/dist/index-Baxb1vI_.js +0 -210
- package/dist/index-Baxb1vI_.js.map +0 -1
- package/dist/index-Bg8DD8ku.js +0 -216
- package/dist/index-Bg8DD8ku.js.map +0 -1
- package/dist/index-BqTqxCpG.cjs +0 -89
- package/dist/index-BqTqxCpG.cjs.map +0 -1
- package/dist/index-Bv4Q1Pr7.cjs +0 -33
- package/dist/index-Bv4Q1Pr7.cjs.map +0 -1
- package/dist/index-CN8J45Nc.cjs +0 -24
- package/dist/index-CN8J45Nc.cjs.map +0 -1
- package/dist/index-CPbv2Od1.js +0 -62
- package/dist/index-CPbv2Od1.js.map +0 -1
- package/dist/index-Cf-MC6Al.js +0 -63
- package/dist/index-Cf-MC6Al.js.map +0 -1
- package/dist/index-DDPXXXDy.cjs +0 -19
- package/dist/index-DDPXXXDy.cjs.map +0 -1
- package/dist/index-DO30AzDe.cjs +0 -19
- package/dist/index-DO30AzDe.cjs.map +0 -1
- package/dist/index-DkvW5yBY.js +0 -2249
- package/dist/index-DkvW5yBY.js.map +0 -1
- package/dist/index-Dn1ehjIj.cjs +0 -80
- package/dist/index-Dn1ehjIj.cjs.map +0 -1
- package/dist/index-DqHvgoXJ.cjs +0 -19
- package/dist/index-DqHvgoXJ.cjs.map +0 -1
- package/dist/index-K39pdw94.cjs +0 -31
- package/dist/index-K39pdw94.cjs.map +0 -1
- package/dist/index-OT2XAJkc.js +0 -117
- package/dist/index-OT2XAJkc.js.map +0 -1
- package/dist/index-TPAX4XKg.cjs +0 -30
- package/dist/index-TPAX4XKg.cjs.map +0 -1
- package/dist/index-WmVSB57y.js +0 -107
- package/dist/index-WmVSB57y.js.map +0 -1
- package/dist/index-mYXvc3Fs.js +0 -68
- package/dist/index-mYXvc3Fs.js.map +0 -1
- package/dist/index-nioXOg4m.cjs +0 -76
- package/dist/index-nioXOg4m.cjs.map +0 -1
- package/dist/index-okhY3fWD.cjs +0 -2
- package/dist/index-okhY3fWD.cjs.map +0 -1
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
# Docker Compose Best Practices
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
This project uses Docker Compose for multi-container orchestration.
|
|
5
|
-
|
|
6
|
-
## Commands
|
|
7
|
-
- Start services: `docker compose up`
|
|
8
|
-
- Start in background: `docker compose up -d`
|
|
9
|
-
- Stop services: `docker compose down`
|
|
10
|
-
- View logs: `docker compose logs -f`
|
|
11
|
-
- Rebuild: `docker compose up --build`
|
|
12
|
-
- Run command: `docker compose exec <service> <command>`
|
|
13
|
-
|
|
14
|
-
## Service Definition
|
|
15
|
-
- Define services clearly with descriptive names
|
|
16
|
-
- Specify image or build context
|
|
17
|
-
- Set restart policies: `restart: unless-stopped`
|
|
18
|
-
- Use environment variables
|
|
19
|
-
- Define health checks
|
|
20
|
-
|
|
21
|
-
## Networking
|
|
22
|
-
- Services can communicate by service name
|
|
23
|
-
- Define custom networks if needed
|
|
24
|
-
- Use `depends_on` for startup order
|
|
25
|
-
- Expose only necessary ports
|
|
26
|
-
|
|
27
|
-
## Volumes
|
|
28
|
-
- Use named volumes for persistent data
|
|
29
|
-
- Use bind mounts for development
|
|
30
|
-
- Mount volumes in development for hot reload
|
|
31
|
-
- Example:
|
|
32
|
-
```yaml
|
|
33
|
-
volumes:
|
|
34
|
-
- ./src:/app/src
|
|
35
|
-
- node_modules:/app/node_modules
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Environment Variables
|
|
39
|
-
- Use `.env` file for environment variables
|
|
40
|
-
- Reference in compose file: `${VARIABLE_NAME}`
|
|
41
|
-
- Use `env_file` directive for multiple files
|
|
42
|
-
- Never commit sensitive `.env` files
|
|
43
|
-
|
|
44
|
-
## Development vs Production
|
|
45
|
-
- Use `docker-compose.yml` for base configuration
|
|
46
|
-
- Use `docker-compose.override.yml` for development
|
|
47
|
-
- Use `docker-compose.prod.yml` for production
|
|
48
|
-
- Override with: `docker compose -f docker-compose.yml -f docker-compose.prod.yml up`
|
|
49
|
-
|
|
50
|
-
## Common Services
|
|
51
|
-
- **Database**: PostgreSQL, MySQL, MongoDB
|
|
52
|
-
- **Cache**: Redis, Memcached
|
|
53
|
-
- **Queue**: RabbitMQ, Redis
|
|
54
|
-
- **Web Server**: Nginx, Apache
|
|
55
|
-
|
|
56
|
-
## Best Practices
|
|
57
|
-
- Pin service versions
|
|
58
|
-
- Use health checks for dependencies
|
|
59
|
-
- Set resource limits in production
|
|
60
|
-
- Use secrets for sensitive data (v3.1+)
|
|
61
|
-
- Don't run containers as root
|
|
62
|
-
- Use separate networks for isolation
|
|
63
|
-
|
|
64
|
-
## Example Structure
|
|
65
|
-
```yaml
|
|
66
|
-
version: '3.8'
|
|
67
|
-
|
|
68
|
-
services:
|
|
69
|
-
app:
|
|
70
|
-
build: .
|
|
71
|
-
ports:
|
|
72
|
-
- "3000:3000"
|
|
73
|
-
environment:
|
|
74
|
-
- NODE_ENV=development
|
|
75
|
-
volumes:
|
|
76
|
-
- .:/app
|
|
77
|
-
- /app/node_modules
|
|
78
|
-
depends_on:
|
|
79
|
-
- db
|
|
80
|
-
- redis
|
|
81
|
-
|
|
82
|
-
db:
|
|
83
|
-
image: postgres:15-alpine
|
|
84
|
-
environment:
|
|
85
|
-
POSTGRES_DB: myapp
|
|
86
|
-
POSTGRES_USER: user
|
|
87
|
-
POSTGRES_PASSWORD: password
|
|
88
|
-
volumes:
|
|
89
|
-
- postgres_data:/var/lib/postgresql/data
|
|
90
|
-
|
|
91
|
-
redis:
|
|
92
|
-
image: redis:7-alpine
|
|
93
|
-
ports:
|
|
94
|
-
- "6379:6379"
|
|
95
|
-
|
|
96
|
-
volumes:
|
|
97
|
-
postgres_data:
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Troubleshooting
|
|
101
|
-
- Check logs: `docker compose logs <service>`
|
|
102
|
-
- Inspect containers: `docker compose ps`
|
|
103
|
-
- Access shell: `docker compose exec <service> sh`
|
|
104
|
-
- View networks: `docker network ls`
|
|
105
|
-
- Clean up: `docker compose down -v` (removes volumes)
|
|
106
|
-
|
|
107
|
-
## Performance
|
|
108
|
-
- Use volumes for better I/O performance
|
|
109
|
-
- Limit services to necessary ones during development
|
|
110
|
-
- Use profiles to group optional services
|
|
111
|
-
- Consider using `docker compose watch` for development
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# Dockerfile Best Practices
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
This project uses Docker for containerization. Follow Docker best practices for efficient and secure images.
|
|
5
|
-
|
|
6
|
-
## Multi-Stage Builds
|
|
7
|
-
- Use multi-stage builds to reduce final image size
|
|
8
|
-
- Separate build and runtime stages
|
|
9
|
-
- Copy only necessary artifacts to final stage
|
|
10
|
-
- Example:
|
|
11
|
-
```dockerfile
|
|
12
|
-
FROM node:20 AS builder
|
|
13
|
-
WORKDIR /app
|
|
14
|
-
COPY package*.json ./
|
|
15
|
-
RUN npm ci
|
|
16
|
-
COPY . .
|
|
17
|
-
RUN npm run build
|
|
18
|
-
|
|
19
|
-
FROM node:20-slim
|
|
20
|
-
WORKDIR /app
|
|
21
|
-
COPY --from=builder /app/dist ./dist
|
|
22
|
-
COPY package*.json ./
|
|
23
|
-
RUN npm ci --only=production
|
|
24
|
-
CMD ["node", "dist/index.js"]
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Base Image Selection
|
|
28
|
-
- Use official images when available
|
|
29
|
-
- Choose slim or alpine variants for smaller sizes
|
|
30
|
-
- Pin specific versions, avoid `latest` tag
|
|
31
|
-
- Use distroless images for production when possible
|
|
32
|
-
|
|
33
|
-
## Layer Optimization
|
|
34
|
-
- Order instructions from least to most frequently changing
|
|
35
|
-
- Combine RUN commands to reduce layers
|
|
36
|
-
- Use `.dockerignore` to exclude unnecessary files
|
|
37
|
-
- Clean up in the same RUN command (apt-get clean, rm cache)
|
|
38
|
-
|
|
39
|
-
## Security Best Practices
|
|
40
|
-
- Run as non-root user: `USER node` or custom user
|
|
41
|
-
- Scan images for vulnerabilities regularly
|
|
42
|
-
- Don't store secrets in images
|
|
43
|
-
- Use `COPY` instead of `ADD` unless you need tar extraction
|
|
44
|
-
- Keep base images updated
|
|
45
|
-
|
|
46
|
-
## Dockerfile Instructions
|
|
47
|
-
- `FROM`: Base image
|
|
48
|
-
- `WORKDIR`: Set working directory
|
|
49
|
-
- `COPY`: Copy files (preferred over ADD)
|
|
50
|
-
- `RUN`: Execute commands
|
|
51
|
-
- `CMD`: Default command (can be overridden)
|
|
52
|
-
- `ENTRYPOINT`: Main executable (harder to override)
|
|
53
|
-
- `ENV`: Set environment variables
|
|
54
|
-
- `EXPOSE`: Document ports (doesn't actually publish)
|
|
55
|
-
- `VOLUME`: Define mount points
|
|
56
|
-
|
|
57
|
-
## Environment Variables
|
|
58
|
-
- Use `ENV` for build-time variables
|
|
59
|
-
- Use `ARG` for build arguments
|
|
60
|
-
- Don't hardcode sensitive data
|
|
61
|
-
- Use `.env` files with docker-compose
|
|
62
|
-
|
|
63
|
-
## Health Checks
|
|
64
|
-
- Define `HEALTHCHECK` instruction
|
|
65
|
-
- Example: `HEALTHCHECK CMD curl -f http://localhost/ || exit 1`
|
|
66
|
-
- Helps orchestrators know when container is ready
|
|
67
|
-
|
|
68
|
-
## Image Tagging
|
|
69
|
-
- Tag images with semantic versions
|
|
70
|
-
- Use descriptive tags: `app:1.2.3`, `app:latest`, `app:dev`
|
|
71
|
-
- Don't rely solely on `latest` tag
|
|
72
|
-
|
|
73
|
-
## Build Context
|
|
74
|
-
- Keep build context small
|
|
75
|
-
- Use `.dockerignore` file
|
|
76
|
-
- Exclude: `node_modules`, `.git`, `dist`, test files
|
|
77
|
-
- Only include what's needed for the build
|
|
78
|
-
|
|
79
|
-
## Performance Tips
|
|
80
|
-
- Use layer caching effectively
|
|
81
|
-
- Leverage BuildKit features
|
|
82
|
-
- Use `--mount=type=cache` for package managers
|
|
83
|
-
- Minimize the number of layers in final image
|
|
84
|
-
|
|
85
|
-
## Common Patterns
|
|
86
|
-
- Copy package files first, then install dependencies
|
|
87
|
-
- This caches dependencies when source code changes
|
|
88
|
-
- Use `COPY package*.json ./` before `RUN npm install`
|
|
89
|
-
|
|
90
|
-
## Documentation
|
|
91
|
-
- Add labels for metadata: `LABEL maintainer="team@example.com"`
|
|
92
|
-
- Include README with Docker commands
|
|
93
|
-
- Document exposed ports and volumes
|
|
94
|
-
- Provide example docker-compose.yml
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
# GitHub Actions CI/CD Guidelines
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
This project uses GitHub Actions for CI/CD workflows. Follow best practices for efficient and maintainable workflows.
|
|
5
|
-
|
|
6
|
-
## Workflow Structure
|
|
7
|
-
```yaml
|
|
8
|
-
name: CI
|
|
9
|
-
|
|
10
|
-
on:
|
|
11
|
-
push:
|
|
12
|
-
branches: [ main, develop ]
|
|
13
|
-
pull_request:
|
|
14
|
-
branches: [ main ]
|
|
15
|
-
|
|
16
|
-
jobs:
|
|
17
|
-
test:
|
|
18
|
-
runs-on: ubuntu-latest
|
|
19
|
-
steps:
|
|
20
|
-
- uses: actions/checkout@v4
|
|
21
|
-
- uses: actions/setup-node@v4
|
|
22
|
-
with:
|
|
23
|
-
node-version: '20'
|
|
24
|
-
- run: npm ci
|
|
25
|
-
- run: npm test
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Triggers
|
|
29
|
-
- `push`: On push to branches
|
|
30
|
-
- `pull_request`: On PRs
|
|
31
|
-
- `workflow_dispatch`: Manual trigger
|
|
32
|
-
- `schedule`: Cron-based scheduling
|
|
33
|
-
- `release`: On release creation
|
|
34
|
-
|
|
35
|
-
## Common Actions
|
|
36
|
-
- `actions/checkout@v4`: Checkout code
|
|
37
|
-
- `actions/setup-node@v4`: Setup Node.js
|
|
38
|
-
- `actions/cache@v4`: Cache dependencies
|
|
39
|
-
- `actions/upload-artifact@v4`: Upload artifacts
|
|
40
|
-
- `actions/download-artifact@v4`: Download artifacts
|
|
41
|
-
|
|
42
|
-
## Best Practices
|
|
43
|
-
|
|
44
|
-
### Use Matrix Strategy
|
|
45
|
-
```yaml
|
|
46
|
-
strategy:
|
|
47
|
-
matrix:
|
|
48
|
-
node-version: [18, 20, 22]
|
|
49
|
-
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Cache Dependencies
|
|
53
|
-
```yaml
|
|
54
|
-
- uses: actions/cache@v4
|
|
55
|
-
with:
|
|
56
|
-
path: ~/.npm
|
|
57
|
-
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
|
58
|
-
restore-keys: |
|
|
59
|
-
${{ runner.os }}-node-
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Use Secrets
|
|
63
|
-
- Store sensitive data in GitHub Secrets
|
|
64
|
-
- Access via: `${{ secrets.SECRET_NAME }}`
|
|
65
|
-
- Never hardcode credentials
|
|
66
|
-
|
|
67
|
-
### Conditional Steps
|
|
68
|
-
```yaml
|
|
69
|
-
- name: Deploy
|
|
70
|
-
if: github.ref == 'refs/heads/main'
|
|
71
|
-
run: npm run deploy
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Reusable Workflows
|
|
75
|
-
- Create reusable workflows in `.github/workflows/`
|
|
76
|
-
- Call with `uses: ./.github/workflows/reusable.yml`
|
|
77
|
-
|
|
78
|
-
## Job Dependencies
|
|
79
|
-
```yaml
|
|
80
|
-
jobs:
|
|
81
|
-
build:
|
|
82
|
-
runs-on: ubuntu-latest
|
|
83
|
-
steps: [...]
|
|
84
|
-
|
|
85
|
-
deploy:
|
|
86
|
-
needs: build
|
|
87
|
-
runs-on: ubuntu-latest
|
|
88
|
-
steps: [...]
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Environment Variables
|
|
92
|
-
```yaml
|
|
93
|
-
env:
|
|
94
|
-
NODE_ENV: production
|
|
95
|
-
API_URL: https://api.example.com
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Artifacts
|
|
99
|
-
- Upload build outputs for later jobs
|
|
100
|
-
- Download in subsequent jobs or manually
|
|
101
|
-
- Artifacts expire after 90 days by default
|
|
102
|
-
|
|
103
|
-
## Concurrency Control
|
|
104
|
-
```yaml
|
|
105
|
-
concurrency:
|
|
106
|
-
group: ${{ github.workflow }}-${{ github.ref }}
|
|
107
|
-
cancel-in-progress: true
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## Performance Tips
|
|
111
|
-
- Use caching for dependencies
|
|
112
|
-
- Run independent jobs in parallel
|
|
113
|
-
- Use `if` conditions to skip unnecessary steps
|
|
114
|
-
- Use `continue-on-error` for non-critical steps
|
|
115
|
-
|
|
116
|
-
## Security
|
|
117
|
-
- Use pinned versions of actions: `actions/checkout@v4`
|
|
118
|
-
- Review third-party actions before use
|
|
119
|
-
- Use GITHUB_TOKEN for authentication
|
|
120
|
-
- Enable branch protection rules
|
|
121
|
-
- Use environments for deployment approvals
|
|
122
|
-
|
|
123
|
-
## Debugging
|
|
124
|
-
- Enable debug logging: Set secret `ACTIONS_STEP_DEBUG` to `true`
|
|
125
|
-
- Use `actions/upload-artifact` to save debug files
|
|
126
|
-
- Check workflow logs in Actions tab
|
|
127
|
-
|
|
128
|
-
## Common Patterns
|
|
129
|
-
|
|
130
|
-
### Build and Test
|
|
131
|
-
```yaml
|
|
132
|
-
- name: Install dependencies
|
|
133
|
-
run: npm ci
|
|
134
|
-
- name: Build
|
|
135
|
-
run: npm run build
|
|
136
|
-
- name: Test
|
|
137
|
-
run: npm test
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### Deploy on Main
|
|
141
|
-
```yaml
|
|
142
|
-
- name: Deploy
|
|
143
|
-
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
|
144
|
-
run: npm run deploy
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### Docker Build and Push
|
|
148
|
-
```yaml
|
|
149
|
-
- name: Build and push
|
|
150
|
-
uses: docker/build-push-action@v5
|
|
151
|
-
with:
|
|
152
|
-
push: true
|
|
153
|
-
tags: user/app:latest
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Monitoring
|
|
157
|
-
- Check workflow status in Actions tab
|
|
158
|
-
- Set up status checks for required workflows
|
|
159
|
-
- Use workflow badges in README
|
|
160
|
-
- Enable notifications for failures
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
# GitLab CI/CD Guidelines
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
This project uses GitLab CI/CD for continuous integration and deployment. Follow best practices for efficient pipelines.
|
|
5
|
-
|
|
6
|
-
## Pipeline Structure
|
|
7
|
-
```yaml
|
|
8
|
-
stages:
|
|
9
|
-
- build
|
|
10
|
-
- test
|
|
11
|
-
- deploy
|
|
12
|
-
|
|
13
|
-
variables:
|
|
14
|
-
NODE_VERSION: "20"
|
|
15
|
-
|
|
16
|
-
build:
|
|
17
|
-
stage: build
|
|
18
|
-
image: node:${NODE_VERSION}
|
|
19
|
-
script:
|
|
20
|
-
- npm ci
|
|
21
|
-
- npm run build
|
|
22
|
-
artifacts:
|
|
23
|
-
paths:
|
|
24
|
-
- dist/
|
|
25
|
-
expire_in: 1 hour
|
|
26
|
-
|
|
27
|
-
test:
|
|
28
|
-
stage: test
|
|
29
|
-
image: node:${NODE_VERSION}
|
|
30
|
-
script:
|
|
31
|
-
- npm ci
|
|
32
|
-
- npm test
|
|
33
|
-
coverage: '/Coverage: \d+\.\d+%/'
|
|
34
|
-
|
|
35
|
-
deploy:
|
|
36
|
-
stage: deploy
|
|
37
|
-
script:
|
|
38
|
-
- npm run deploy
|
|
39
|
-
only:
|
|
40
|
-
- main
|
|
41
|
-
environment:
|
|
42
|
-
name: production
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Stages
|
|
46
|
-
- Define pipeline stages: `build`, `test`, `deploy`
|
|
47
|
-
- Jobs in same stage run in parallel
|
|
48
|
-
- Stages run sequentially
|
|
49
|
-
- Use dependencies for job order within stage
|
|
50
|
-
|
|
51
|
-
## Jobs
|
|
52
|
-
- Each job runs in isolated environment
|
|
53
|
-
- Define image for Docker-based runners
|
|
54
|
-
- Use `script` for commands
|
|
55
|
-
- Use `before_script` and `after_script` for setup/cleanup
|
|
56
|
-
|
|
57
|
-
## Variables
|
|
58
|
-
- Define global variables in `variables:` section
|
|
59
|
-
- Use in scripts: `$VARIABLE_NAME`
|
|
60
|
-
- Set in GitLab CI/CD settings for secrets
|
|
61
|
-
- Use `file` type for certificates
|
|
62
|
-
|
|
63
|
-
## Artifacts
|
|
64
|
-
- Share files between jobs
|
|
65
|
-
- Define in `artifacts:` section
|
|
66
|
-
- Set expiration: `expire_in: 1 week`
|
|
67
|
-
- Download from pipeline UI
|
|
68
|
-
|
|
69
|
-
## Cache
|
|
70
|
-
```yaml
|
|
71
|
-
cache:
|
|
72
|
-
key: ${CI_COMMIT_REF_SLUG}
|
|
73
|
-
paths:
|
|
74
|
-
- node_modules/
|
|
75
|
-
- .npm/
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## Rules and Conditions
|
|
79
|
-
```yaml
|
|
80
|
-
deploy:
|
|
81
|
-
script: deploy.sh
|
|
82
|
-
rules:
|
|
83
|
-
- if: $CI_COMMIT_BRANCH == "main"
|
|
84
|
-
- when: manual # Require manual trigger
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Docker Integration
|
|
88
|
-
```yaml
|
|
89
|
-
build-docker:
|
|
90
|
-
image: docker:latest
|
|
91
|
-
services:
|
|
92
|
-
- docker:dind
|
|
93
|
-
script:
|
|
94
|
-
- docker build -t myapp .
|
|
95
|
-
- docker push myapp
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
## Services
|
|
99
|
-
- Run side containers (database, cache)
|
|
100
|
-
- Example: `services: - postgres:15`
|
|
101
|
-
- Access via hostname: `postgres`
|
|
102
|
-
|
|
103
|
-
## Environments
|
|
104
|
-
- Define deployment environments
|
|
105
|
-
- Track deployments in GitLab
|
|
106
|
-
- Enable auto-rollback
|
|
107
|
-
- Use protected environments
|
|
108
|
-
|
|
109
|
-
## Include and Extends
|
|
110
|
-
```yaml
|
|
111
|
-
include:
|
|
112
|
-
- local: '/.gitlab-ci-template.yml'
|
|
113
|
-
|
|
114
|
-
.node_job:
|
|
115
|
-
image: node:20
|
|
116
|
-
before_script:
|
|
117
|
-
- npm ci
|
|
118
|
-
|
|
119
|
-
test:
|
|
120
|
-
extends: .node_job
|
|
121
|
-
script:
|
|
122
|
-
- npm test
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## Parallel Jobs
|
|
126
|
-
```yaml
|
|
127
|
-
test:
|
|
128
|
-
parallel: 3
|
|
129
|
-
script:
|
|
130
|
-
- npm test -- --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
## Triggers
|
|
134
|
-
- `push`: On every push
|
|
135
|
-
- `merge_request_event`: On MR creation/update
|
|
136
|
-
- `schedule`: Scheduled pipelines
|
|
137
|
-
- `api`: Triggered via API
|
|
138
|
-
- `manual`: Requires manual action
|
|
139
|
-
|
|
140
|
-
## Best Practices
|
|
141
|
-
- Use `.gitlab-ci.yml` in repository root
|
|
142
|
-
- Pin image versions
|
|
143
|
-
- Use cache for dependencies
|
|
144
|
-
- Separate build and deploy stages
|
|
145
|
-
- Use artifacts for build outputs
|
|
146
|
-
- Set appropriate timeout values
|
|
147
|
-
- Use rules instead of only/except
|
|
148
|
-
- Validate YAML before committing
|
|
149
|
-
|
|
150
|
-
## Performance
|
|
151
|
-
- Use cache effectively
|
|
152
|
-
- Run jobs in parallel when possible
|
|
153
|
-
- Use shallow clone: `GIT_DEPTH: 1`
|
|
154
|
-
- Optimize Docker images
|
|
155
|
-
- Use artifacts sparingly
|
|
156
|
-
|
|
157
|
-
## Security
|
|
158
|
-
- Never commit secrets to `.gitlab-ci.yml`
|
|
159
|
-
- Use masked variables for secrets
|
|
160
|
-
- Use protected variables for sensitive data
|
|
161
|
-
- Scan for vulnerabilities in dependencies
|
|
162
|
-
- Use SAST and DAST tools
|
|
163
|
-
|
|
164
|
-
## Debugging
|
|
165
|
-
- Check pipeline logs in CI/CD > Pipelines
|
|
166
|
-
- Use `CI_DEBUG_TRACE: "true"` for verbose logs
|
|
167
|
-
- Test locally with GitLab Runner
|
|
168
|
-
- Use `when: always` to run on failure
|
|
169
|
-
|
|
170
|
-
## Common Patterns
|
|
171
|
-
|
|
172
|
-
### Node.js Project
|
|
173
|
-
```yaml
|
|
174
|
-
test:
|
|
175
|
-
image: node:20
|
|
176
|
-
script:
|
|
177
|
-
- npm ci
|
|
178
|
-
- npm test
|
|
179
|
-
artifacts:
|
|
180
|
-
reports:
|
|
181
|
-
coverage_report:
|
|
182
|
-
coverage_format: cobertura
|
|
183
|
-
path: coverage/cobertura-coverage.xml
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Manual Deployment
|
|
187
|
-
```yaml
|
|
188
|
-
deploy:
|
|
189
|
-
stage: deploy
|
|
190
|
-
script:
|
|
191
|
-
- deploy.sh
|
|
192
|
-
when: manual
|
|
193
|
-
only:
|
|
194
|
-
- main
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### Multi-Project Pipeline
|
|
198
|
-
```yaml
|
|
199
|
-
trigger_downstream:
|
|
200
|
-
trigger:
|
|
201
|
-
project: group/downstream-project
|
|
202
|
-
branch: main
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## Monitoring
|
|
206
|
-
- View pipeline status in GitLab UI
|
|
207
|
-
- Enable email notifications
|
|
208
|
-
- Use badges in README
|
|
209
|
-
- Monitor pipeline duration
|
|
210
|
-
- Track deployment frequency
|