@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,330 +0,0 @@
|
|
|
1
|
-
# GitLab CI/CD Templates
|
|
2
|
-
|
|
3
|
-
## Node.js/TypeScript Pipeline
|
|
4
|
-
```yaml
|
|
5
|
-
image: node:20-alpine
|
|
6
|
-
|
|
7
|
-
stages:
|
|
8
|
-
- build
|
|
9
|
-
- test
|
|
10
|
-
- docker
|
|
11
|
-
- deploy
|
|
12
|
-
|
|
13
|
-
cache:
|
|
14
|
-
key:
|
|
15
|
-
files:
|
|
16
|
-
- package-lock.json
|
|
17
|
-
paths:
|
|
18
|
-
- node_modules/
|
|
19
|
-
- .npm/
|
|
20
|
-
|
|
21
|
-
variables:
|
|
22
|
-
npm_config_cache: "$CI_PROJECT_DIR/.npm"
|
|
23
|
-
|
|
24
|
-
build:
|
|
25
|
-
stage: build
|
|
26
|
-
script:
|
|
27
|
-
- npm ci
|
|
28
|
-
- npm run build
|
|
29
|
-
artifacts:
|
|
30
|
-
paths:
|
|
31
|
-
- dist/
|
|
32
|
-
expire_in: 1 hour
|
|
33
|
-
|
|
34
|
-
test:
|
|
35
|
-
stage: test
|
|
36
|
-
coverage: '/Lines\s*:\s*(\d+\.\d+)%/'
|
|
37
|
-
script:
|
|
38
|
-
- npm ci
|
|
39
|
-
- npm test -- --coverage
|
|
40
|
-
artifacts:
|
|
41
|
-
reports:
|
|
42
|
-
coverage_report:
|
|
43
|
-
coverage_format: cobertura
|
|
44
|
-
path: coverage/cobertura-coverage.xml
|
|
45
|
-
junit: junit.xml
|
|
46
|
-
|
|
47
|
-
lint:
|
|
48
|
-
stage: test
|
|
49
|
-
script:
|
|
50
|
-
- npm ci
|
|
51
|
-
- npm run lint
|
|
52
|
-
|
|
53
|
-
docker-build:
|
|
54
|
-
stage: docker
|
|
55
|
-
image: docker:latest
|
|
56
|
-
services:
|
|
57
|
-
- docker:dind
|
|
58
|
-
before_script:
|
|
59
|
-
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
60
|
-
script:
|
|
61
|
-
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
|
|
62
|
-
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE:latest
|
|
63
|
-
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
|
64
|
-
- docker push $CI_REGISTRY_IMAGE:latest
|
|
65
|
-
only:
|
|
66
|
-
- main
|
|
67
|
-
|
|
68
|
-
deploy-production:
|
|
69
|
-
stage: deploy
|
|
70
|
-
image: alpine/kubectl:latest
|
|
71
|
-
script:
|
|
72
|
-
- kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true
|
|
73
|
-
- kubectl config set-credentials admin --token="$KUBE_TOKEN"
|
|
74
|
-
- kubectl config set-context default --cluster=k8s --user=admin
|
|
75
|
-
- kubectl config use-context default
|
|
76
|
-
- kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n production
|
|
77
|
-
environment:
|
|
78
|
-
name: production
|
|
79
|
-
url: https://app.example.com
|
|
80
|
-
only:
|
|
81
|
-
- main
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Python Pipeline
|
|
85
|
-
```yaml
|
|
86
|
-
image: python:3.12-slim
|
|
87
|
-
|
|
88
|
-
stages:
|
|
89
|
-
- test
|
|
90
|
-
- build
|
|
91
|
-
- deploy
|
|
92
|
-
|
|
93
|
-
variables:
|
|
94
|
-
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
|
95
|
-
|
|
96
|
-
cache:
|
|
97
|
-
paths:
|
|
98
|
-
- .cache/pip
|
|
99
|
-
- .venv/
|
|
100
|
-
|
|
101
|
-
before_script:
|
|
102
|
-
- pip install poetry
|
|
103
|
-
- poetry config virtualenvs.in-project true
|
|
104
|
-
- poetry install
|
|
105
|
-
|
|
106
|
-
test:
|
|
107
|
-
stage: test
|
|
108
|
-
script:
|
|
109
|
-
- poetry run pytest --cov --cov-report=xml --cov-report=term
|
|
110
|
-
- poetry run ruff check .
|
|
111
|
-
- poetry run mypy .
|
|
112
|
-
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
|
|
113
|
-
artifacts:
|
|
114
|
-
reports:
|
|
115
|
-
coverage_report:
|
|
116
|
-
coverage_format: cobertura
|
|
117
|
-
path: coverage.xml
|
|
118
|
-
|
|
119
|
-
docker:
|
|
120
|
-
stage: build
|
|
121
|
-
image: docker:latest
|
|
122
|
-
services:
|
|
123
|
-
- docker:dind
|
|
124
|
-
script:
|
|
125
|
-
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
|
|
126
|
-
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
|
127
|
-
only:
|
|
128
|
-
- main
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
## Go Pipeline
|
|
132
|
-
```yaml
|
|
133
|
-
image: golang:1.21
|
|
134
|
-
|
|
135
|
-
stages:
|
|
136
|
-
- test
|
|
137
|
-
- build
|
|
138
|
-
|
|
139
|
-
variables:
|
|
140
|
-
GOPATH: $CI_PROJECT_DIR/.go
|
|
141
|
-
|
|
142
|
-
cache:
|
|
143
|
-
paths:
|
|
144
|
-
- .go/pkg/mod/
|
|
145
|
-
|
|
146
|
-
before_script:
|
|
147
|
-
- mkdir -p .go
|
|
148
|
-
- go mod download
|
|
149
|
-
|
|
150
|
-
test:
|
|
151
|
-
stage: test
|
|
152
|
-
script:
|
|
153
|
-
- go fmt $(go list ./... | grep -v /vendor/)
|
|
154
|
-
- go vet $(go list ./... | grep -v /vendor/)
|
|
155
|
-
- go test -race -coverprofile=coverage.txt -covermode=atomic ./...
|
|
156
|
-
coverage: '/coverage: \d+\.\d+% of statements/'
|
|
157
|
-
artifacts:
|
|
158
|
-
reports:
|
|
159
|
-
coverage_report:
|
|
160
|
-
coverage_format: cobertura
|
|
161
|
-
path: coverage.xml
|
|
162
|
-
|
|
163
|
-
build:
|
|
164
|
-
stage: build
|
|
165
|
-
script:
|
|
166
|
-
- CGO_ENABLED=0 go build -ldflags="-s -w" -o app
|
|
167
|
-
artifacts:
|
|
168
|
-
paths:
|
|
169
|
-
- app
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Rust Pipeline
|
|
173
|
-
```yaml
|
|
174
|
-
image: rust:1.75
|
|
175
|
-
|
|
176
|
-
stages:
|
|
177
|
-
- test
|
|
178
|
-
- build
|
|
179
|
-
|
|
180
|
-
variables:
|
|
181
|
-
CARGO_HOME: $CI_PROJECT_DIR/.cargo
|
|
182
|
-
|
|
183
|
-
cache:
|
|
184
|
-
paths:
|
|
185
|
-
- .cargo/
|
|
186
|
-
- target/
|
|
187
|
-
|
|
188
|
-
test:
|
|
189
|
-
stage: test
|
|
190
|
-
script:
|
|
191
|
-
- rustc --version && cargo --version
|
|
192
|
-
- cargo fmt -- --check
|
|
193
|
-
- cargo clippy -- -D warnings
|
|
194
|
-
- cargo test --verbose
|
|
195
|
-
|
|
196
|
-
build:
|
|
197
|
-
stage: build
|
|
198
|
-
script:
|
|
199
|
-
- cargo build --release
|
|
200
|
-
artifacts:
|
|
201
|
-
paths:
|
|
202
|
-
- target/release/app
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## Java/Maven Pipeline
|
|
206
|
-
```yaml
|
|
207
|
-
image: maven:3.9-eclipse-temurin-21
|
|
208
|
-
|
|
209
|
-
stages:
|
|
210
|
-
- build
|
|
211
|
-
- test
|
|
212
|
-
- package
|
|
213
|
-
|
|
214
|
-
variables:
|
|
215
|
-
MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"
|
|
216
|
-
|
|
217
|
-
cache:
|
|
218
|
-
paths:
|
|
219
|
-
- .m2/repository
|
|
220
|
-
|
|
221
|
-
build:
|
|
222
|
-
stage: build
|
|
223
|
-
script:
|
|
224
|
-
- mvn compile
|
|
225
|
-
|
|
226
|
-
test:
|
|
227
|
-
stage: test
|
|
228
|
-
script:
|
|
229
|
-
- mvn test
|
|
230
|
-
- mvn jacoco:report
|
|
231
|
-
coverage: '/Total.*?([0-9]{1,3})%/'
|
|
232
|
-
artifacts:
|
|
233
|
-
reports:
|
|
234
|
-
junit: target/surefire-reports/TEST-*.xml
|
|
235
|
-
|
|
236
|
-
package:
|
|
237
|
-
stage: package
|
|
238
|
-
script:
|
|
239
|
-
- mvn package -DskipTests
|
|
240
|
-
artifacts:
|
|
241
|
-
paths:
|
|
242
|
-
- target/*.jar
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
## Multi-Stage with Environments
|
|
246
|
-
```yaml
|
|
247
|
-
stages:
|
|
248
|
-
- build
|
|
249
|
-
- test
|
|
250
|
-
- staging
|
|
251
|
-
- production
|
|
252
|
-
|
|
253
|
-
build:
|
|
254
|
-
stage: build
|
|
255
|
-
script:
|
|
256
|
-
- npm ci
|
|
257
|
-
- npm run build
|
|
258
|
-
artifacts:
|
|
259
|
-
paths:
|
|
260
|
-
- dist/
|
|
261
|
-
|
|
262
|
-
test:
|
|
263
|
-
stage: test
|
|
264
|
-
script:
|
|
265
|
-
- npm test
|
|
266
|
-
|
|
267
|
-
deploy-staging:
|
|
268
|
-
stage: staging
|
|
269
|
-
script:
|
|
270
|
-
- echo "Deploying to staging"
|
|
271
|
-
- kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n staging
|
|
272
|
-
environment:
|
|
273
|
-
name: staging
|
|
274
|
-
url: https://staging.example.com
|
|
275
|
-
only:
|
|
276
|
-
- develop
|
|
277
|
-
|
|
278
|
-
deploy-production:
|
|
279
|
-
stage: production
|
|
280
|
-
script:
|
|
281
|
-
- echo "Deploying to production"
|
|
282
|
-
- kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n production
|
|
283
|
-
environment:
|
|
284
|
-
name: production
|
|
285
|
-
url: https://app.example.com
|
|
286
|
-
when: manual
|
|
287
|
-
only:
|
|
288
|
-
- main
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
## Docker with Buildx (Multi-arch)
|
|
292
|
-
```yaml
|
|
293
|
-
docker-multiarch:
|
|
294
|
-
stage: build
|
|
295
|
-
image: docker:latest
|
|
296
|
-
services:
|
|
297
|
-
- docker:dind
|
|
298
|
-
before_script:
|
|
299
|
-
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
300
|
-
- docker buildx create --use --name multiarch
|
|
301
|
-
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
302
|
-
script:
|
|
303
|
-
- docker buildx build --platform linux/amd64,linux/arm64 -t $CI_REGISTRY_IMAGE:latest --push .
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## Security Scanning
|
|
307
|
-
```yaml
|
|
308
|
-
include:
|
|
309
|
-
- template: Security/SAST.gitlab-ci.yml
|
|
310
|
-
- template: Security/Dependency-Scanning.gitlab-ci.yml
|
|
311
|
-
- template: Security/Container-Scanning.gitlab-ci.yml
|
|
312
|
-
|
|
313
|
-
container_scanning:
|
|
314
|
-
variables:
|
|
315
|
-
DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
|
|
316
|
-
dependencies:
|
|
317
|
-
- docker-build
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
## Best Practices
|
|
321
|
-
1. **Caching**: Cache dependencies (`node_modules/`, `.m2/`, `.cargo/`)
|
|
322
|
-
2. **Artifacts**: Pass build outputs between stages
|
|
323
|
-
3. **Environments**: Use GitLab environments for deployment tracking
|
|
324
|
-
4. **Manual Gates**: Use `when: manual` for production deployments
|
|
325
|
-
5. **Templates**: Use `include:` to reuse common configurations
|
|
326
|
-
6. **Variables**: Store secrets in GitLab CI/CD Variables (masked & protected)
|
|
327
|
-
7. **Docker Layer Caching**: Use `DOCKER_BUILDKIT=1` for faster builds
|
|
328
|
-
8. **Coverage**: Use `coverage:` regex to display coverage in merge requests
|
|
329
|
-
9. **Resource Groups**: Prevent concurrent deployments to the same environment
|
|
330
|
-
10. **Rules**: Use `rules:` instead of `only:`/`except:` for modern syntax
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# Docker Multi-Stage Build Best Practices
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
Multi-stage builds reduce image size and improve security by separating build-time and runtime dependencies.
|
|
5
|
-
|
|
6
|
-
## Basic Pattern
|
|
7
|
-
```dockerfile
|
|
8
|
-
# Stage 1: Build
|
|
9
|
-
FROM builder-image AS builder
|
|
10
|
-
WORKDIR /build
|
|
11
|
-
COPY source files
|
|
12
|
-
RUN build commands
|
|
13
|
-
|
|
14
|
-
# Stage 2: Runtime
|
|
15
|
-
FROM runtime-image
|
|
16
|
-
WORKDIR /app
|
|
17
|
-
COPY --from=builder /build/artifacts .
|
|
18
|
-
CMD ["run", "app"]
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Language-Specific Optimizations
|
|
22
|
-
|
|
23
|
-
### Go
|
|
24
|
-
```dockerfile
|
|
25
|
-
FROM golang:1.21-alpine AS builder
|
|
26
|
-
WORKDIR /build
|
|
27
|
-
COPY go.mod go.sum ./
|
|
28
|
-
RUN go mod download
|
|
29
|
-
COPY . .
|
|
30
|
-
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o app
|
|
31
|
-
|
|
32
|
-
FROM scratch
|
|
33
|
-
COPY --from=builder /build/app /app
|
|
34
|
-
ENTRYPOINT ["/app"]
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### Rust
|
|
38
|
-
```dockerfile
|
|
39
|
-
FROM rust:1.75-alpine AS builder
|
|
40
|
-
WORKDIR /build
|
|
41
|
-
RUN apk add --no-cache musl-dev
|
|
42
|
-
COPY Cargo.toml Cargo.lock ./
|
|
43
|
-
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release && rm -rf src
|
|
44
|
-
COPY src ./src
|
|
45
|
-
RUN touch src/main.rs && cargo build --release
|
|
46
|
-
|
|
47
|
-
FROM alpine:latest
|
|
48
|
-
RUN apk add --no-cache ca-certificates
|
|
49
|
-
COPY --from=builder /build/target/release/app /app
|
|
50
|
-
CMD ["/app"]
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Node.js
|
|
54
|
-
```dockerfile
|
|
55
|
-
FROM node:20-alpine AS builder
|
|
56
|
-
WORKDIR /build
|
|
57
|
-
COPY package*.json ./
|
|
58
|
-
RUN npm ci --only=production
|
|
59
|
-
|
|
60
|
-
FROM node:20-alpine
|
|
61
|
-
WORKDIR /app
|
|
62
|
-
COPY --from=builder /build/node_modules ./node_modules
|
|
63
|
-
COPY . .
|
|
64
|
-
CMD ["node", "index.js"]
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Java/Spring Boot
|
|
68
|
-
```dockerfile
|
|
69
|
-
FROM maven:3.9-eclipse-temurin-21 AS builder
|
|
70
|
-
WORKDIR /build
|
|
71
|
-
COPY pom.xml .
|
|
72
|
-
RUN mvn dependency:go-offline
|
|
73
|
-
COPY src ./src
|
|
74
|
-
RUN mvn package -DskipTests
|
|
75
|
-
|
|
76
|
-
FROM eclipse-temurin:21-jre-alpine
|
|
77
|
-
WORKDIR /app
|
|
78
|
-
COPY --from=builder /build/target/*.jar app.jar
|
|
79
|
-
ENTRYPOINT ["java", "-jar", "app.jar"]
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Python
|
|
83
|
-
```dockerfile
|
|
84
|
-
FROM python:3.12-slim AS builder
|
|
85
|
-
WORKDIR /build
|
|
86
|
-
RUN pip install --no-cache-dir poetry
|
|
87
|
-
COPY pyproject.toml poetry.lock ./
|
|
88
|
-
RUN poetry export -f requirements.txt -o requirements.txt --without-hashes
|
|
89
|
-
RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt
|
|
90
|
-
|
|
91
|
-
FROM python:3.12-slim
|
|
92
|
-
WORKDIR /app
|
|
93
|
-
COPY --from=builder /wheels /wheels
|
|
94
|
-
RUN pip install --no-cache-dir /wheels/*
|
|
95
|
-
COPY . .
|
|
96
|
-
CMD ["python", "main.py"]
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Security Hardening
|
|
100
|
-
- Use specific image tags, not `latest`
|
|
101
|
-
- Run as non-root user: `USER 1000:1000`
|
|
102
|
-
- Scan images: `docker scout cves image:tag`
|
|
103
|
-
- Use distroless or alpine base images
|
|
104
|
-
- Multi-platform builds: `docker buildx build --platform linux/amd64,linux/arm64`
|
|
105
|
-
|
|
106
|
-
## .dockerignore Template
|
|
107
|
-
```
|
|
108
|
-
node_modules
|
|
109
|
-
.git
|
|
110
|
-
.env
|
|
111
|
-
*.log
|
|
112
|
-
dist
|
|
113
|
-
coverage
|
|
114
|
-
.vscode
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Build Optimization
|
|
118
|
-
- Layer caching: COPY dependency files before source code
|
|
119
|
-
- Parallel builds: `RUN cmd1 & cmd2 & wait`
|
|
120
|
-
- Build contexts: Use `.dockerignore` to exclude unnecessary files
|
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
# Kubernetes Deployment Guide
|
|
2
|
-
|
|
3
|
-
## Basic Deployment Structure
|
|
4
|
-
|
|
5
|
-
### Deployment Manifest
|
|
6
|
-
```yaml
|
|
7
|
-
apiVersion: apps/v1
|
|
8
|
-
kind: Deployment
|
|
9
|
-
metadata:
|
|
10
|
-
name: app-deployment
|
|
11
|
-
labels:
|
|
12
|
-
app: myapp
|
|
13
|
-
spec:
|
|
14
|
-
replicas: 3
|
|
15
|
-
selector:
|
|
16
|
-
matchLabels:
|
|
17
|
-
app: myapp
|
|
18
|
-
template:
|
|
19
|
-
metadata:
|
|
20
|
-
labels:
|
|
21
|
-
app: myapp
|
|
22
|
-
spec:
|
|
23
|
-
containers:
|
|
24
|
-
- name: app
|
|
25
|
-
image: myregistry/myapp:1.0.0
|
|
26
|
-
ports:
|
|
27
|
-
- containerPort: 8080
|
|
28
|
-
resources:
|
|
29
|
-
requests:
|
|
30
|
-
memory: "128Mi"
|
|
31
|
-
cpu: "100m"
|
|
32
|
-
limits:
|
|
33
|
-
memory: "512Mi"
|
|
34
|
-
cpu: "500m"
|
|
35
|
-
livenessProbe:
|
|
36
|
-
httpGet:
|
|
37
|
-
path: /health
|
|
38
|
-
port: 8080
|
|
39
|
-
initialDelaySeconds: 30
|
|
40
|
-
periodSeconds: 10
|
|
41
|
-
readinessProbe:
|
|
42
|
-
httpGet:
|
|
43
|
-
path: /ready
|
|
44
|
-
port: 8080
|
|
45
|
-
initialDelaySeconds: 10
|
|
46
|
-
periodSeconds: 5
|
|
47
|
-
env:
|
|
48
|
-
- name: DATABASE_URL
|
|
49
|
-
valueFrom:
|
|
50
|
-
secretKeyRef:
|
|
51
|
-
name: app-secrets
|
|
52
|
-
key: db-url
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### Service Manifest
|
|
56
|
-
```yaml
|
|
57
|
-
apiVersion: v1
|
|
58
|
-
kind: Service
|
|
59
|
-
metadata:
|
|
60
|
-
name: app-service
|
|
61
|
-
spec:
|
|
62
|
-
selector:
|
|
63
|
-
app: myapp
|
|
64
|
-
ports:
|
|
65
|
-
- protocol: TCP
|
|
66
|
-
port: 80
|
|
67
|
-
targetPort: 8080
|
|
68
|
-
type: LoadBalancer
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### ConfigMap
|
|
72
|
-
```yaml
|
|
73
|
-
apiVersion: v1
|
|
74
|
-
kind: ConfigMap
|
|
75
|
-
metadata:
|
|
76
|
-
name: app-config
|
|
77
|
-
data:
|
|
78
|
-
LOG_LEVEL: "info"
|
|
79
|
-
API_TIMEOUT: "30s"
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Secret
|
|
83
|
-
```yaml
|
|
84
|
-
apiVersion: v1
|
|
85
|
-
kind: Secret
|
|
86
|
-
metadata:
|
|
87
|
-
name: app-secrets
|
|
88
|
-
type: Opaque
|
|
89
|
-
data:
|
|
90
|
-
db-url: cG9zdGdyZXM6Ly9leGFtcGxl # base64 encoded
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Ingress Configuration
|
|
94
|
-
```yaml
|
|
95
|
-
apiVersion: networking.k8s.io/v1
|
|
96
|
-
kind: Ingress
|
|
97
|
-
metadata:
|
|
98
|
-
name: app-ingress
|
|
99
|
-
annotations:
|
|
100
|
-
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
101
|
-
spec:
|
|
102
|
-
ingressClassName: nginx
|
|
103
|
-
tls:
|
|
104
|
-
- hosts:
|
|
105
|
-
- myapp.example.com
|
|
106
|
-
secretName: app-tls
|
|
107
|
-
rules:
|
|
108
|
-
- host: myapp.example.com
|
|
109
|
-
http:
|
|
110
|
-
paths:
|
|
111
|
-
- path: /
|
|
112
|
-
pathType: Prefix
|
|
113
|
-
backend:
|
|
114
|
-
service:
|
|
115
|
-
name: app-service
|
|
116
|
-
port:
|
|
117
|
-
number: 80
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Horizontal Pod Autoscaler
|
|
121
|
-
```yaml
|
|
122
|
-
apiVersion: autoscaling/v2
|
|
123
|
-
kind: HorizontalPodAutoscaler
|
|
124
|
-
metadata:
|
|
125
|
-
name: app-hpa
|
|
126
|
-
spec:
|
|
127
|
-
scaleTargetRef:
|
|
128
|
-
apiVersion: apps/v1
|
|
129
|
-
kind: Deployment
|
|
130
|
-
name: app-deployment
|
|
131
|
-
minReplicas: 2
|
|
132
|
-
maxReplicas: 10
|
|
133
|
-
metrics:
|
|
134
|
-
- type: Resource
|
|
135
|
-
resource:
|
|
136
|
-
name: cpu
|
|
137
|
-
target:
|
|
138
|
-
type: Utilization
|
|
139
|
-
averageUtilization: 70
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## StatefulSet (for databases)
|
|
143
|
-
```yaml
|
|
144
|
-
apiVersion: apps/v1
|
|
145
|
-
kind: StatefulSet
|
|
146
|
-
metadata:
|
|
147
|
-
name: postgres
|
|
148
|
-
spec:
|
|
149
|
-
serviceName: postgres
|
|
150
|
-
replicas: 3
|
|
151
|
-
selector:
|
|
152
|
-
matchLabels:
|
|
153
|
-
app: postgres
|
|
154
|
-
template:
|
|
155
|
-
metadata:
|
|
156
|
-
labels:
|
|
157
|
-
app: postgres
|
|
158
|
-
spec:
|
|
159
|
-
containers:
|
|
160
|
-
- name: postgres
|
|
161
|
-
image: postgres:16-alpine
|
|
162
|
-
ports:
|
|
163
|
-
- containerPort: 5432
|
|
164
|
-
volumeMounts:
|
|
165
|
-
- name: data
|
|
166
|
-
mountPath: /var/lib/postgresql/data
|
|
167
|
-
volumeClaimTemplates:
|
|
168
|
-
- metadata:
|
|
169
|
-
name: data
|
|
170
|
-
spec:
|
|
171
|
-
accessModes: ["ReadWriteOnce"]
|
|
172
|
-
resources:
|
|
173
|
-
requests:
|
|
174
|
-
storage: 10Gi
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## Best Practices
|
|
178
|
-
1. **Resource Limits**: Always set CPU/memory requests and limits
|
|
179
|
-
2. **Health Checks**: Implement liveness and readiness probes
|
|
180
|
-
3. **Rolling Updates**: Use `RollingUpdate` strategy with `maxSurge` and `maxUnavailable`
|
|
181
|
-
4. **Pod Disruption Budgets**: Ensure availability during node maintenance
|
|
182
|
-
5. **Network Policies**: Restrict pod-to-pod communication
|
|
183
|
-
6. **RBAC**: Use ServiceAccounts with minimal permissions
|
|
184
|
-
7. **Secrets Management**: Use external secret managers (Vault, AWS Secrets Manager)
|
|
185
|
-
8. **Monitoring**: Deploy Prometheus/Grafana stack
|
|
186
|
-
9. **Logging**: Use Fluentd/Fluent Bit for log aggregation
|
|
187
|
-
10. **GitOps**: Manage deployments with ArgoCD or Flux
|
|
188
|
-
|
|
189
|
-
## Common Commands
|
|
190
|
-
```bash
|
|
191
|
-
# Apply manifests
|
|
192
|
-
kubectl apply -f deployment.yaml
|
|
193
|
-
|
|
194
|
-
# Check status
|
|
195
|
-
kubectl get pods -l app=myapp
|
|
196
|
-
kubectl describe pod <pod-name>
|
|
197
|
-
kubectl logs <pod-name> -f
|
|
198
|
-
|
|
199
|
-
# Scale deployment
|
|
200
|
-
kubectl scale deployment app-deployment --replicas=5
|
|
201
|
-
|
|
202
|
-
# Update image
|
|
203
|
-
kubectl set image deployment/app-deployment app=myregistry/myapp:2.0.0
|
|
204
|
-
|
|
205
|
-
# Rollback
|
|
206
|
-
kubectl rollout undo deployment/app-deployment
|
|
207
|
-
|
|
208
|
-
# Port forwarding
|
|
209
|
-
kubectl port-forward svc/app-service 8080:80
|
|
210
|
-
```
|