@sylix/coworker 2.0.11 → 2.0.12
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/commands/slash/config.d.ts.map +1 -1
- package/dist/commands/slash/config.js +22 -4
- package/dist/commands/slash/config.js.map +1 -1
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +6 -3
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
- package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
- package/dist/skills/defaults/ai-ml/rag.md +276 -0
- package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
- package/dist/skills/defaults/backend-development/api-design.md +285 -0
- package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
- package/dist/skills/defaults/backend-development/async-python.md +237 -0
- package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
- package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
- package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
- package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
- package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
- package/dist/skills/defaults/backend-development/database-design.md +305 -0
- package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
- package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
- package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
- package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
- package/dist/skills/defaults/backend-development/fastapi.md +309 -0
- package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
- package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
- package/dist/skills/defaults/backend-development/microservices.md +284 -0
- package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
- package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
- package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
- package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
- package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
- package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
- package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
- package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
- package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
- package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
- package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
- package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
- package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
- package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
- package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
- package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
- package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
- package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
- package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
- package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
- package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
- package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
- package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
- package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
- package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
- package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
- package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
- package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
- package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
- package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
- package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
- package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
- package/dist/skills/defaults/data-engineering/airflow.md +519 -0
- package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
- package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
- package/dist/skills/defaults/data-engineering/dbt.md +556 -0
- package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
- package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
- package/dist/skills/defaults/data-engineering/spark.md +411 -0
- package/dist/skills/defaults/database/postgresql.md +202 -0
- package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
- package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
- package/dist/skills/defaults/devops/changelog-automation.md +580 -0
- package/dist/skills/defaults/devops/cicd.md +314 -0
- package/dist/skills/defaults/devops/cloud.md +263 -0
- package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
- package/dist/skills/defaults/devops/cost-optimization.md +295 -0
- package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
- package/dist/skills/defaults/devops/docker.md +281 -0
- package/dist/skills/defaults/devops/git-workflows.md +205 -0
- package/dist/skills/defaults/devops/github-actions.md +311 -0
- package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
- package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
- package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
- package/dist/skills/defaults/devops/kubernetes.md +339 -0
- package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
- package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
- package/dist/skills/defaults/devops/observability.md +243 -0
- package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
- package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
- package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
- package/dist/skills/defaults/devops/secrets-management.md +341 -0
- package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
- package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
- package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
- package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
- package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
- package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
- package/dist/skills/defaults/frontend/interaction-design.md +327 -0
- package/dist/skills/defaults/frontend/javascript.md +311 -0
- package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
- package/dist/skills/defaults/frontend/react-native-design.md +440 -0
- package/dist/skills/defaults/frontend/react.md +345 -0
- package/dist/skills/defaults/frontend/responsive-design.md +472 -0
- package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
- package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
- package/dist/skills/defaults/frontend/typescript.md +334 -0
- package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
- package/dist/skills/defaults/frontend/web-component-design.md +279 -0
- package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
- package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
- package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
- package/dist/skills/defaults/kubernetes/gitops.md +280 -0
- package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
- package/dist/skills/defaults/kubernetes/helm.md +343 -0
- package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
- package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
- package/dist/skills/defaults/kubernetes/manifests.md +330 -0
- package/dist/skills/defaults/kubernetes/security.md +337 -0
- package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
- package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
- package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
- package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
- package/dist/skills/defaults/llm-application/langchain.md +259 -0
- package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
- package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
- package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
- package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
- package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
- package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
- package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
- package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
- package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
- package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
- package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
- package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
- package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
- package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
- package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
- package/dist/skills/defaults/security/auditor.md +168 -0
- package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
- package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
- package/dist/skills/defaults/security/mtls-configuration.md +349 -0
- package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
- package/dist/skills/defaults/security/sast-configuration.md +182 -0
- package/dist/skills/defaults/security/security.md +313 -0
- package/dist/skills/defaults/security/stride-analysis.md +273 -0
- package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
- package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
- package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
- package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
- package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
- package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
- package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
- package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
- package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
- package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
- package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
- package/dist/skills/defaults/testing/testing.md +332 -0
- package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
- package/dist/skills/defaults/workflows/track-management.md +592 -0
- package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +129 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/utils/character.js +4 -4
- package/dist/utils/character.js.map +1 -1
- package/dist/utils/inputbar.d.ts.map +1 -1
- package/dist/utils/inputbar.js +7 -0
- package/dist/utils/inputbar.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cicd
|
|
3
|
+
description: Design and implement CI/CD pipelines with automated testing, deployment, and release strategies.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CI/CD Pipeline Design — CoWorker Edition
|
|
7
|
+
|
|
8
|
+
Build reliable, fast, and secure deployment pipelines.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Setting up new CI/CD pipelines
|
|
13
|
+
- Improving deployment frequency
|
|
14
|
+
- Implementing automated testing
|
|
15
|
+
- Adding security scanning
|
|
16
|
+
|
|
17
|
+
## Core Concepts
|
|
18
|
+
|
|
19
|
+
### 1. GitHub Actions Pipeline
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
name: CI Pipeline
|
|
23
|
+
|
|
24
|
+
on:
|
|
25
|
+
push:
|
|
26
|
+
branches: [main, develop]
|
|
27
|
+
pull_request:
|
|
28
|
+
branches: [main]
|
|
29
|
+
|
|
30
|
+
env:
|
|
31
|
+
NODE_VERSION: '20'
|
|
32
|
+
REGISTRY: ghcr.io
|
|
33
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
test:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
|
|
41
|
+
- name: Setup Node.js
|
|
42
|
+
uses: actions/setup-node@v4
|
|
43
|
+
with:
|
|
44
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
45
|
+
cache: 'npm'
|
|
46
|
+
|
|
47
|
+
- name: Install dependencies
|
|
48
|
+
run: npm ci
|
|
49
|
+
|
|
50
|
+
- name: Run linter
|
|
51
|
+
run: npm run lint
|
|
52
|
+
|
|
53
|
+
- name: Run type check
|
|
54
|
+
run: npm run typecheck
|
|
55
|
+
|
|
56
|
+
- name: Run tests
|
|
57
|
+
run: npm run test:ci
|
|
58
|
+
env:
|
|
59
|
+
CI: true
|
|
60
|
+
DATABASE_URL: postgres://test
|
|
61
|
+
|
|
62
|
+
- name: Upload coverage
|
|
63
|
+
uses: codecov/codecov-action@v3
|
|
64
|
+
with:
|
|
65
|
+
files: ./coverage/lcov.info
|
|
66
|
+
fail_ci_if_error: true
|
|
67
|
+
|
|
68
|
+
build:
|
|
69
|
+
needs: test
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
outputs:
|
|
72
|
+
image-tag: ${{ steps.meta.outputs.tags }}
|
|
73
|
+
steps:
|
|
74
|
+
- uses: actions/checkout@v4
|
|
75
|
+
|
|
76
|
+
- name: Set up Docker Buildx
|
|
77
|
+
uses: docker/setup-buildx-action@v3
|
|
78
|
+
|
|
79
|
+
- name: Login to Container Registry
|
|
80
|
+
uses: docker/login-action@v3
|
|
81
|
+
with:
|
|
82
|
+
registry: ${{ env.REGISTRY }}
|
|
83
|
+
username: ${{ github.actor }}
|
|
84
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
85
|
+
|
|
86
|
+
- name: Extract metadata
|
|
87
|
+
id: meta
|
|
88
|
+
uses: docker/metadata-action@v5
|
|
89
|
+
with:
|
|
90
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
91
|
+
tags: |
|
|
92
|
+
type=ref,event=branch
|
|
93
|
+
type=sha,prefix=
|
|
94
|
+
type=raw,value=latest,enable={{is_default_branch}}
|
|
95
|
+
|
|
96
|
+
- name: Build and push
|
|
97
|
+
uses: docker/build-push-action@v5
|
|
98
|
+
with:
|
|
99
|
+
context: .
|
|
100
|
+
push: true
|
|
101
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
102
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
103
|
+
cache-from: type=gha
|
|
104
|
+
cache-to: type=gha,mode=max
|
|
105
|
+
|
|
106
|
+
deploy:
|
|
107
|
+
needs: build
|
|
108
|
+
if: github.ref == 'refs/heads/main'
|
|
109
|
+
runs-on: ubuntu-latest
|
|
110
|
+
environment: production
|
|
111
|
+
steps:
|
|
112
|
+
- name: Deploy to production
|
|
113
|
+
run: |
|
|
114
|
+
echo "Deploying ${{ needs.build.outputs.image-tag }}"
|
|
115
|
+
# Add deployment commands
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 2. Dockerfile Best Practices
|
|
119
|
+
|
|
120
|
+
```dockerfile
|
|
121
|
+
# Use specific versions, not latest
|
|
122
|
+
FROM node:20-alpine AS builder
|
|
123
|
+
|
|
124
|
+
WORKDIR /app
|
|
125
|
+
|
|
126
|
+
# Copy package files first for better caching
|
|
127
|
+
COPY package*.json ./
|
|
128
|
+
RUN npm ci
|
|
129
|
+
|
|
130
|
+
# Copy source and build
|
|
131
|
+
COPY . .
|
|
132
|
+
RUN npm run build
|
|
133
|
+
|
|
134
|
+
# Production image
|
|
135
|
+
FROM node:20-alpine AS runner
|
|
136
|
+
|
|
137
|
+
WORKDIR /app
|
|
138
|
+
|
|
139
|
+
# Create non-root user
|
|
140
|
+
RUN addgroup --system --gid 1001 nodejs
|
|
141
|
+
RUN adduser --system --uid 1001 nodejs
|
|
142
|
+
|
|
143
|
+
# Copy built artifacts
|
|
144
|
+
COPY --from=builder /app/dist ./dist
|
|
145
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
146
|
+
|
|
147
|
+
USER nodejs
|
|
148
|
+
|
|
149
|
+
ENV NODE_ENV=production
|
|
150
|
+
|
|
151
|
+
EXPOSE 3000
|
|
152
|
+
|
|
153
|
+
CMD ["node", "dist/index.js"]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 3. GitOps with GitHub Actions
|
|
157
|
+
|
|
158
|
+
```yaml
|
|
159
|
+
name: Deploy
|
|
160
|
+
|
|
161
|
+
on:
|
|
162
|
+
push:
|
|
163
|
+
branches: [main]
|
|
164
|
+
paths:
|
|
165
|
+
- 'k8s/**'
|
|
166
|
+
|
|
167
|
+
jobs:
|
|
168
|
+
deploy:
|
|
169
|
+
runs-on: ubuntu-latest
|
|
170
|
+
steps:
|
|
171
|
+
- uses: actions/checkout@v4
|
|
172
|
+
with:
|
|
173
|
+
ref: main
|
|
174
|
+
|
|
175
|
+
- name: Deploy to Kubernetes
|
|
176
|
+
uses: azure/k8s-set-context@v4
|
|
177
|
+
with:
|
|
178
|
+
kubeconfig: ${{ secrets.KUBE_CONFIG }}
|
|
179
|
+
|
|
180
|
+
- name: Deploy with Helm
|
|
181
|
+
run: |
|
|
182
|
+
helm upgrade --install myapp ./charts/myapp \
|
|
183
|
+
--namespace production \
|
|
184
|
+
--set image.tag=${{ github.sha }}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 4. Testing Stages
|
|
188
|
+
|
|
189
|
+
```yaml
|
|
190
|
+
jobs:
|
|
191
|
+
test:
|
|
192
|
+
runs-on: ubuntu-latest
|
|
193
|
+
services:
|
|
194
|
+
postgres:
|
|
195
|
+
image: postgres:15
|
|
196
|
+
env:
|
|
197
|
+
POSTGRES_DB: test
|
|
198
|
+
POSTGRES_USER: test
|
|
199
|
+
POSTGRES_PASSWORD: test
|
|
200
|
+
options: >-
|
|
201
|
+
--health-cmd pg_isready
|
|
202
|
+
--health-interval 10s
|
|
203
|
+
--health-timeout 5s
|
|
204
|
+
--health-retries 5
|
|
205
|
+
ports:
|
|
206
|
+
- 5432:5432
|
|
207
|
+
|
|
208
|
+
redis:
|
|
209
|
+
image: redis:7-alpine
|
|
210
|
+
ports:
|
|
211
|
+
- 6379:6379
|
|
212
|
+
|
|
213
|
+
steps:
|
|
214
|
+
- name: Unit tests
|
|
215
|
+
run: npm run test:unit
|
|
216
|
+
|
|
217
|
+
- name: Integration tests
|
|
218
|
+
run: npm run test:integration
|
|
219
|
+
env:
|
|
220
|
+
DATABASE_URL: postgres://test:test@localhost:5432/test
|
|
221
|
+
REDIS_URL: redis://localhost:6379
|
|
222
|
+
|
|
223
|
+
- name: E2E tests
|
|
224
|
+
run: npm run test:e2e
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 5. Security Scanning
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
jobs:
|
|
231
|
+
security:
|
|
232
|
+
runs-on: ubuntu-latest
|
|
233
|
+
steps:
|
|
234
|
+
- uses: actions/checkout@v4
|
|
235
|
+
|
|
236
|
+
- name: Run Trivy scanner
|
|
237
|
+
uses: aquasecurity/trivy-action@master
|
|
238
|
+
with:
|
|
239
|
+
scan-type: 'fs'
|
|
240
|
+
scan-ref: '.'
|
|
241
|
+
format: 'sarif'
|
|
242
|
+
output: 'trivy-results.sarif'
|
|
243
|
+
|
|
244
|
+
- name: Upload Trivy results to GitHub Security
|
|
245
|
+
uses: github/codeql-action/upload-sarif@v2
|
|
246
|
+
with:
|
|
247
|
+
sarif_file: 'trivy-results.sarif'
|
|
248
|
+
|
|
249
|
+
- name: Check dependencies
|
|
250
|
+
run: |
|
|
251
|
+
npm audit --audit-level=high || true
|
|
252
|
+
|
|
253
|
+
- name: Container scan
|
|
254
|
+
if: github.event_name == 'push'
|
|
255
|
+
uses: aquasecurity/trivy-action@master
|
|
256
|
+
with:
|
|
257
|
+
image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
|
258
|
+
format: 'sarif'
|
|
259
|
+
output: 'container-results.sarif'
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 6. Release Strategy
|
|
263
|
+
|
|
264
|
+
```yaml
|
|
265
|
+
name: Release
|
|
266
|
+
|
|
267
|
+
on:
|
|
268
|
+
push:
|
|
269
|
+
tags:
|
|
270
|
+
- 'v*'
|
|
271
|
+
|
|
272
|
+
jobs:
|
|
273
|
+
release:
|
|
274
|
+
runs-on: ubuntu-latest
|
|
275
|
+
steps:
|
|
276
|
+
- uses: actions/checkout@v4
|
|
277
|
+
|
|
278
|
+
- name: Create GitHub Release
|
|
279
|
+
uses: actions/create-release@v1
|
|
280
|
+
env:
|
|
281
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
282
|
+
with:
|
|
283
|
+
tag_name: ${{ github.ref }}
|
|
284
|
+
release_name: Release ${{ github.ref }}
|
|
285
|
+
draft: true
|
|
286
|
+
prerelease: ${{ contains(github.ref, 'beta') }}
|
|
287
|
+
|
|
288
|
+
- name: Build and release Docker
|
|
289
|
+
run: |
|
|
290
|
+
# Multi-platform build
|
|
291
|
+
docker buildx build \
|
|
292
|
+
--platform linux/amd64,linux/arm64 \
|
|
293
|
+
--tag app:${{ github.ref_name }} \
|
|
294
|
+
--push .
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Best Practices
|
|
298
|
+
|
|
299
|
+
1. **Fast feedback** - Run tests in parallel
|
|
300
|
+
2. **Cache dependencies** - Speed up builds
|
|
301
|
+
3. **Fail fast** - Lint/typecheck before tests
|
|
302
|
+
4. **Environment parity** - Same Docker images everywhere
|
|
303
|
+
5. **Secret management** - Never commit secrets
|
|
304
|
+
6. **Immutable tags** - Don't retag releases
|
|
305
|
+
7. **Rollback ready** - Always have a way back
|
|
306
|
+
|
|
307
|
+
## Common Issues
|
|
308
|
+
|
|
309
|
+
- Slow pipelines (no caching)
|
|
310
|
+
- Flaky tests (not isolated)
|
|
311
|
+
- Secrets in logs
|
|
312
|
+
- No artifact retention
|
|
313
|
+
- Manual approvals bottleneck
|
|
314
|
+
- Not scanning images
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cloud-architecture
|
|
3
|
+
description: Design scalable, resilient cloud architectures on AWS, GCP, or Azure.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cloud Architecture — CoWorker Edition
|
|
7
|
+
|
|
8
|
+
Build robust cloud-native systems.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
- Designing cloud infrastructure
|
|
13
|
+
- Architecture decisions
|
|
14
|
+
- Cost optimization
|
|
15
|
+
- Scalability planning
|
|
16
|
+
|
|
17
|
+
## Core Concepts
|
|
18
|
+
|
|
19
|
+
### 1. Well-Architected Framework
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
5 Pillars:
|
|
23
|
+
1. Operational Excellence
|
|
24
|
+
2. Security
|
|
25
|
+
3. Reliability
|
|
26
|
+
4. Performance Efficiency
|
|
27
|
+
5. Cost Optimization
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2. High-Level Architecture
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
┌─────────────┐
|
|
34
|
+
│ CDN │
|
|
35
|
+
└──────┬──────┘
|
|
36
|
+
│
|
|
37
|
+
┌──────▼──────┐
|
|
38
|
+
│ Load Balancer│
|
|
39
|
+
└──────┬──────┘
|
|
40
|
+
│
|
|
41
|
+
┌─────────────────┼─────────────────┐
|
|
42
|
+
│ │ │
|
|
43
|
+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
|
|
44
|
+
│ App 1 │ │ App 2 │ │ App 3 │
|
|
45
|
+
└────┬────┘ └────┬────┘ └────┬────┘
|
|
46
|
+
│ │ │
|
|
47
|
+
└─────────────────┼─────────────────┘
|
|
48
|
+
│
|
|
49
|
+
┌────────────┼────────────┐
|
|
50
|
+
│ │ │
|
|
51
|
+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
|
|
52
|
+
│ Cache │ │ DB │ │ Queue │
|
|
53
|
+
│(Redis) │ │ (RDS) │ │ (SQS) │
|
|
54
|
+
└─────────┘ └─────────┘ └─────────┘
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3. AWS Example (Terraform)
|
|
58
|
+
|
|
59
|
+
```hcl
|
|
60
|
+
# VPC
|
|
61
|
+
resource "aws_vpc" "main" {
|
|
62
|
+
cidr_block = "10.0.0.0/16"
|
|
63
|
+
enable_dns_hostnames = true
|
|
64
|
+
enable_dns_support = true
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# Subnets
|
|
68
|
+
resource "aws_subnet" "public" {
|
|
69
|
+
count = 3
|
|
70
|
+
vpc_id = aws_vpc.main.id
|
|
71
|
+
cidr_block = "10.0.${count.index + 1}.0/24"
|
|
72
|
+
availability_zone = data.aws_availability_zones.available.names[count.index]
|
|
73
|
+
map_public_ip_on_launch = true
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
# Security Groups
|
|
77
|
+
resource "aws_security_group" "app" {
|
|
78
|
+
name = "app-sg"
|
|
79
|
+
vpc_id = aws_vpc.main.id
|
|
80
|
+
|
|
81
|
+
ingress {
|
|
82
|
+
from_port = 443
|
|
83
|
+
to_port = 443
|
|
84
|
+
protocol = "tcp"
|
|
85
|
+
cidr_blocks = ["10.0.0.0/16"]
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
egress {
|
|
89
|
+
from_port = 0
|
|
90
|
+
to_port = 0
|
|
91
|
+
protocol = "-1"
|
|
92
|
+
cidr_blocks = ["0.0.0.0/0"]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# ECS Cluster
|
|
97
|
+
resource "aws_ecs_cluster" "app" {
|
|
98
|
+
name = "production-cluster"
|
|
99
|
+
|
|
100
|
+
setting {
|
|
101
|
+
name = "containerInsights"
|
|
102
|
+
value = "enabled"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# ECS Service
|
|
107
|
+
resource "aws_ecs_service" "app" {
|
|
108
|
+
name = "api-service"
|
|
109
|
+
cluster = aws_ecs_cluster.app.id
|
|
110
|
+
task_definition = aws_ecs_task_definition.api.arn
|
|
111
|
+
desired_count = 3
|
|
112
|
+
|
|
113
|
+
network_configuration {
|
|
114
|
+
subnets = aws_subnet.private[*].id
|
|
115
|
+
security_groups = [aws_security_group.app.id]
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
load_balancer {
|
|
119
|
+
target_group_arn = aws_lb_target_group.app.arn
|
|
120
|
+
container_name = "api"
|
|
121
|
+
container_port = 8080
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
depends_on = [aws_lb_listener.app]
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# RDS
|
|
128
|
+
resource "aws_db_instance" "main" {
|
|
129
|
+
identifier = "production-db"
|
|
130
|
+
engine = "postgres"
|
|
131
|
+
engine_version = "15.3"
|
|
132
|
+
instance_class = "db.t3.medium"
|
|
133
|
+
allocated_storage = 100
|
|
134
|
+
max_allocated_storage = 500
|
|
135
|
+
|
|
136
|
+
backup_retention_period = 7
|
|
137
|
+
backup_window = "03:00-04:00"
|
|
138
|
+
maintenance_window = "mon:04:00-mon:05:00"
|
|
139
|
+
|
|
140
|
+
skip_final_snapshot = false
|
|
141
|
+
final_snapshot_identifier = "production-db-final"
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 4. Scaling Patterns
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
# Kubernetes HPA
|
|
149
|
+
apiVersion: autoscaling/v2
|
|
150
|
+
kind: HorizontalPodAutoscaler
|
|
151
|
+
metadata:
|
|
152
|
+
name: api-hpa
|
|
153
|
+
spec:
|
|
154
|
+
scaleTargetRef:
|
|
155
|
+
apiVersion: apps/v1
|
|
156
|
+
kind: Deployment
|
|
157
|
+
name: api
|
|
158
|
+
minReplicas: 3
|
|
159
|
+
maxReplicas: 20
|
|
160
|
+
metrics:
|
|
161
|
+
- type: Resource
|
|
162
|
+
resource:
|
|
163
|
+
name: cpu
|
|
164
|
+
target:
|
|
165
|
+
type: Utilization
|
|
166
|
+
averageUtilization: 70
|
|
167
|
+
- type: Resource
|
|
168
|
+
resource:
|
|
169
|
+
name: memory
|
|
170
|
+
target:
|
|
171
|
+
type: Utilization
|
|
172
|
+
averageUtilization: 80
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 5. Multi-Region Architecture
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
┌──────────────┐
|
|
179
|
+
│ Global DNS │
|
|
180
|
+
│ (Route53) │
|
|
181
|
+
└──────┬───────┘
|
|
182
|
+
│
|
|
183
|
+
┌─────────────────┼─────────────────┐
|
|
184
|
+
│ │ │
|
|
185
|
+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
|
|
186
|
+
│ us-east│ │ eu-west │ │ ap-south│
|
|
187
|
+
│ Primary │ │Secondary│ │ Tert │
|
|
188
|
+
└────┬────┘ └────┬────┘ └────┬────┘
|
|
189
|
+
│ │ │
|
|
190
|
+
│ ┌────────────┴────────┐ │
|
|
191
|
+
│ │ Data Replication │ │
|
|
192
|
+
│ └────────────┬────────┘ │
|
|
193
|
+
└─────────────────┼─────────────────┘
|
|
194
|
+
│
|
|
195
|
+
┌──────▼──────┐
|
|
196
|
+
│ Clients │
|
|
197
|
+
└─────────────┘
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 6. Disaster Recovery
|
|
201
|
+
|
|
202
|
+
```yaml
|
|
203
|
+
# RTO/RPO targets
|
|
204
|
+
# Critical: RTO < 1 hour, RPO < 1 minute
|
|
205
|
+
# Standard: RTO < 4 hours, RPO < 1 hour
|
|
206
|
+
# Batch: RTO < 24 hours, RPO < 24 hours
|
|
207
|
+
|
|
208
|
+
# Backup strategy
|
|
209
|
+
apiVersion: v1
|
|
210
|
+
kind: PersistentVolumeClaim
|
|
211
|
+
metadata:
|
|
212
|
+
name: backup-pvc
|
|
213
|
+
spec:
|
|
214
|
+
accessModes:
|
|
215
|
+
- ReadWriteMany
|
|
216
|
+
resources:
|
|
217
|
+
requests:
|
|
218
|
+
storage: 1Ti
|
|
219
|
+
storageClassName: standard-rwo
|
|
220
|
+
---
|
|
221
|
+
apiVersion: batch/v1
|
|
222
|
+
kind: CronJob
|
|
223
|
+
metadata:
|
|
224
|
+
name: backup-cron
|
|
225
|
+
spec:
|
|
226
|
+
schedule: "0 2 * * *" # Daily at 2 AM
|
|
227
|
+
jobTemplate:
|
|
228
|
+
spec:
|
|
229
|
+
template:
|
|
230
|
+
spec:
|
|
231
|
+
containers:
|
|
232
|
+
- name: backup
|
|
233
|
+
image: postgres:15
|
|
234
|
+
command:
|
|
235
|
+
- /bin/sh
|
|
236
|
+
- -c
|
|
237
|
+
- pg_dump $DATABASE_URL > /backups/$(date +%Y%m%d).sql
|
|
238
|
+
volumeMounts:
|
|
239
|
+
- name: backup
|
|
240
|
+
mountPath: /backups
|
|
241
|
+
volumes:
|
|
242
|
+
- name: backup
|
|
243
|
+
persistentVolumeClaim:
|
|
244
|
+
claimName: backup-pvc
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Best Practices
|
|
248
|
+
|
|
249
|
+
1. **Use managed services** - Less operational burden
|
|
250
|
+
2. **Automate everything** - IaC
|
|
251
|
+
3. **Design for failure** - Assume anything can fail
|
|
252
|
+
4. **Multi-AZ** - Availability
|
|
253
|
+
5. **Cost awareness** - Right-size resources
|
|
254
|
+
6. **Security by default** - Least privilege
|
|
255
|
+
|
|
256
|
+
## Common Mistakes
|
|
257
|
+
|
|
258
|
+
- Single points of failure
|
|
259
|
+
- Not using IaC
|
|
260
|
+
- Over-provisioning
|
|
261
|
+
- No monitoring
|
|
262
|
+
- Missing backups
|
|
263
|
+
- Security misconfigurations
|