@neyugn/agent-kits 0.1.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/LICENSE +21 -0
- package/README.md +514 -0
- package/README.vi.md +410 -0
- package/README.zh.md +410 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +422 -0
- package/kits/coder/ARCHITECTURE.md +289 -0
- package/kits/coder/agents/ai-engineer.md +344 -0
- package/kits/coder/agents/backend-specialist.md +270 -0
- package/kits/coder/agents/cloud-architect.md +363 -0
- package/kits/coder/agents/code-reviewer.md +284 -0
- package/kits/coder/agents/data-engineer.md +401 -0
- package/kits/coder/agents/database-specialist.md +251 -0
- package/kits/coder/agents/debugger.md +209 -0
- package/kits/coder/agents/devops-engineer.md +281 -0
- package/kits/coder/agents/documentation-writer.md +296 -0
- package/kits/coder/agents/frontend-specialist.md +298 -0
- package/kits/coder/agents/i18n-specialist.md +348 -0
- package/kits/coder/agents/integration-specialist.md +314 -0
- package/kits/coder/agents/mobile-developer.md +271 -0
- package/kits/coder/agents/multi-tenant-architect.md +281 -0
- package/kits/coder/agents/orchestrator.md +263 -0
- package/kits/coder/agents/performance-analyst.md +327 -0
- package/kits/coder/agents/project-planner.md +277 -0
- package/kits/coder/agents/queue-specialist.md +282 -0
- package/kits/coder/agents/realtime-specialist.md +267 -0
- package/kits/coder/agents/security-auditor.md +253 -0
- package/kits/coder/agents/test-engineer.md +315 -0
- package/kits/coder/agents/ux-researcher.md +388 -0
- package/kits/coder/rules/.cursorrules +287 -0
- package/kits/coder/rules/CLAUDE.md +287 -0
- package/kits/coder/rules/CODEX.md +287 -0
- package/kits/coder/rules/GEMINI.md +287 -0
- package/kits/coder/scripts/checklist.py +318 -0
- package/kits/coder/scripts/kit_status.py +292 -0
- package/kits/coder/scripts/skills_manager.py +243 -0
- package/kits/coder/scripts/verify_all.py +391 -0
- package/kits/coder/skills/accessibility-patterns/SKILL.md +372 -0
- package/kits/coder/skills/accessibility-patterns/scripts/a11y_checker.py +211 -0
- package/kits/coder/skills/ai-rag-patterns/SKILL.md +444 -0
- package/kits/coder/skills/api-patterns/SKILL.md +316 -0
- package/kits/coder/skills/api-patterns/assets/.gitkeep +1 -0
- package/kits/coder/skills/api-patterns/references/deep-dive.md +21 -0
- package/kits/coder/skills/api-patterns/scripts/api_validator.py +253 -0
- package/kits/coder/skills/api-patterns/scripts/validate.py +56 -0
- package/kits/coder/skills/auth-patterns/SKILL.md +267 -0
- package/kits/coder/skills/aws-patterns/SKILL.md +576 -0
- package/kits/coder/skills/brainstorming/SKILL.md +370 -0
- package/kits/coder/skills/brainstorming/assets/.gitkeep +1 -0
- package/kits/coder/skills/brainstorming/references/deep-dive.md +21 -0
- package/kits/coder/skills/brainstorming/scripts/validate.py +56 -0
- package/kits/coder/skills/clean-code/SKILL.md +240 -0
- package/kits/coder/skills/clean-code/assets/.gitkeep +1 -0
- package/kits/coder/skills/clean-code/references/deep-dive.md +21 -0
- package/kits/coder/skills/clean-code/scripts/lint_runner.py +186 -0
- package/kits/coder/skills/clean-code/scripts/validate.py +56 -0
- package/kits/coder/skills/database-design/SKILL.md +255 -0
- package/kits/coder/skills/database-design/assets/.gitkeep +1 -0
- package/kits/coder/skills/database-design/references/deep-dive.md +21 -0
- package/kits/coder/skills/database-design/scripts/schema_validator.py +272 -0
- package/kits/coder/skills/database-design/scripts/validate.py +56 -0
- package/kits/coder/skills/docker-patterns/SKILL.md +240 -0
- package/kits/coder/skills/documentation-templates/SKILL.md +441 -0
- package/kits/coder/skills/e2e-testing/SKILL.md +457 -0
- package/kits/coder/skills/flutter-patterns/SKILL.md +330 -0
- package/kits/coder/skills/frontend-design/SKILL.md +127 -0
- package/kits/coder/skills/github-actions/SKILL.md +349 -0
- package/kits/coder/skills/gitlab-ci-patterns/SKILL.md +466 -0
- package/kits/coder/skills/graphql-patterns/SKILL.md +558 -0
- package/kits/coder/skills/i18n-localization/SKILL.md +345 -0
- package/kits/coder/skills/i18n-localization/scripts/i18n_checker.py +267 -0
- package/kits/coder/skills/kubernetes-patterns/SKILL.md +357 -0
- package/kits/coder/skills/mermaid-diagrams/SKILL.md +351 -0
- package/kits/coder/skills/mobile-design/SKILL.md +305 -0
- package/kits/coder/skills/monitoring-observability/SKILL.md +458 -0
- package/kits/coder/skills/multi-tenancy/SKILL.md +317 -0
- package/kits/coder/skills/multi-tenancy/assets/.gitkeep +1 -0
- package/kits/coder/skills/multi-tenancy/references/deep-dive.md +21 -0
- package/kits/coder/skills/multi-tenancy/scripts/validate.py +56 -0
- package/kits/coder/skills/nodejs-best-practices/SKILL.md +220 -0
- package/kits/coder/skills/performance-profiling/SKILL.md +333 -0
- package/kits/coder/skills/performance-profiling/assets/.gitkeep +1 -0
- package/kits/coder/skills/performance-profiling/references/deep-dive.md +21 -0
- package/kits/coder/skills/performance-profiling/scripts/validate.py +56 -0
- package/kits/coder/skills/plan-writing/SKILL.md +360 -0
- package/kits/coder/skills/plan-writing/assets/.gitkeep +1 -0
- package/kits/coder/skills/plan-writing/references/deep-dive.md +21 -0
- package/kits/coder/skills/plan-writing/scripts/validate.py +56 -0
- package/kits/coder/skills/postgres-patterns/SKILL.md +361 -0
- package/kits/coder/skills/prompt-engineering/SKILL.md +277 -0
- package/kits/coder/skills/queue-patterns/SKILL.md +359 -0
- package/kits/coder/skills/queue-patterns/assets/.gitkeep +1 -0
- package/kits/coder/skills/queue-patterns/references/deep-dive.md +21 -0
- package/kits/coder/skills/queue-patterns/scripts/validate.py +56 -0
- package/kits/coder/skills/react-native-patterns/SKILL.md +393 -0
- package/kits/coder/skills/react-patterns/SKILL.md +319 -0
- package/kits/coder/skills/realtime-patterns/SKILL.md +506 -0
- package/kits/coder/skills/realtime-patterns/assets/.gitkeep +1 -0
- package/kits/coder/skills/realtime-patterns/references/deep-dive.md +21 -0
- package/kits/coder/skills/realtime-patterns/scripts/validate.py +56 -0
- package/kits/coder/skills/redis-patterns/SKILL.md +484 -0
- package/kits/coder/skills/security-fundamentals/SKILL.md +363 -0
- package/kits/coder/skills/security-fundamentals/assets/.gitkeep +1 -0
- package/kits/coder/skills/security-fundamentals/references/deep-dive.md +21 -0
- package/kits/coder/skills/security-fundamentals/scripts/security_scan.py +326 -0
- package/kits/coder/skills/security-fundamentals/scripts/validate.py +56 -0
- package/kits/coder/skills/seo-patterns/SKILL.md +262 -0
- package/kits/coder/skills/seo-patterns/scripts/seo_checker.py +211 -0
- package/kits/coder/skills/systematic-debugging/SKILL.md +478 -0
- package/kits/coder/skills/systematic-debugging/assets/.gitkeep +1 -0
- package/kits/coder/skills/systematic-debugging/references/deep-dive.md +21 -0
- package/kits/coder/skills/systematic-debugging/scripts/validate.py +56 -0
- package/kits/coder/skills/tailwind-patterns/SKILL.md +395 -0
- package/kits/coder/skills/terraform-patterns/SKILL.md +470 -0
- package/kits/coder/skills/testing-patterns/SKILL.md +285 -0
- package/kits/coder/skills/testing-patterns/assets/.gitkeep +1 -0
- package/kits/coder/skills/testing-patterns/references/deep-dive.md +21 -0
- package/kits/coder/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/kits/coder/skills/testing-patterns/scripts/validate.py +56 -0
- package/kits/coder/skills/typescript-patterns/SKILL.md +417 -0
- package/kits/coder/skills/ui-ux-pro-max/SKILL.md +364 -0
- package/kits/coder/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/kits/coder/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/kits/coder/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/kits/coder/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/kits/coder/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/kits/coder/skills/ui-ux-pro-max/data/prompts.csv +24 -0
- package/kits/coder/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/kits/coder/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/kits/coder/skills/ui-ux-pro-max/data/styles.csv +59 -0
- package/kits/coder/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/kits/coder/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/kits/coder/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/kits/coder/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/kits/coder/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/kits/coder/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/kits/coder/skills/ui-ux-pro-max/scripts/core.py +257 -0
- package/kits/coder/skills/ui-ux-pro-max/scripts/design_system.py +488 -0
- package/kits/coder/skills/ui-ux-pro-max/scripts/search.py +76 -0
- package/kits/coder/workflows/.gitkeep +20 -0
- package/kits/coder/workflows/create.md +152 -0
- package/kits/coder/workflows/debug.md +223 -0
- package/kits/coder/workflows/deploy.md +283 -0
- package/kits/coder/workflows/orchestrate.md +243 -0
- package/kits/coder/workflows/plan.md +134 -0
- package/kits/coder/workflows/test.md +237 -0
- package/kits/coder/workflows/ui-ux-pro-max.md +109 -0
- package/package.json +49 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github-actions
|
|
3
|
+
description: GitHub Actions CI/CD principles and workflow patterns. Use when setting up automated testing, building Docker images, deploying to production, or creating reusable workflows. Covers matrix builds, caching, secrets, and security scanning.
|
|
4
|
+
allowed-tools: Read, Write, Edit
|
|
5
|
+
version: 1.0
|
|
6
|
+
priority: HIGH
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# GitHub Actions - CI/CD Automation
|
|
10
|
+
|
|
11
|
+
> **Philosophy:** CI/CD should be **fast, reliable, and secure**. Every push should trigger automated validation. Every deploy should be reproducible.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Core Principles
|
|
16
|
+
|
|
17
|
+
| Principle | Rule |
|
|
18
|
+
| ----------------- | ----------------------------------------------------- |
|
|
19
|
+
| **Automate** | If it can be automated, automate it |
|
|
20
|
+
| **Fast feedback** | Tests should run in minutes, not hours |
|
|
21
|
+
| **Reproducible** | Same commit = same result, always |
|
|
22
|
+
| **Secure** | Secrets in vault, least privilege, scan dependencies |
|
|
23
|
+
| **Fail fast** | Stop pipeline on first failure, don't waste resources |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Workflow Triggers
|
|
28
|
+
|
|
29
|
+
| Trigger | Use Case | Syntax |
|
|
30
|
+
| --------------------- | ------------------ | ----------------------- |
|
|
31
|
+
| **push** | Run on every push | `on: push` |
|
|
32
|
+
| **pull_request** | PR validation | `on: pull_request` |
|
|
33
|
+
| **workflow_dispatch** | Manual trigger | `on: workflow_dispatch` |
|
|
34
|
+
| **schedule** | Cron jobs | `on: schedule` |
|
|
35
|
+
| **release** | On release publish | `on: release` |
|
|
36
|
+
|
|
37
|
+
### Common Trigger Patterns
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
on:
|
|
41
|
+
push:
|
|
42
|
+
branches: [main, develop]
|
|
43
|
+
paths-ignore:
|
|
44
|
+
- "**.md"
|
|
45
|
+
- "docs/**"
|
|
46
|
+
pull_request:
|
|
47
|
+
branches: [main]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Essential Workflow Patterns
|
|
53
|
+
|
|
54
|
+
### 1. Test Workflow (Node.js)
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
name: Test
|
|
58
|
+
on:
|
|
59
|
+
push:
|
|
60
|
+
branches: [main]
|
|
61
|
+
pull_request:
|
|
62
|
+
branches: [main]
|
|
63
|
+
|
|
64
|
+
jobs:
|
|
65
|
+
test:
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
|
|
70
|
+
- uses: pnpm/action-setup@v4
|
|
71
|
+
with:
|
|
72
|
+
version: 9
|
|
73
|
+
|
|
74
|
+
- uses: actions/setup-node@v4
|
|
75
|
+
with:
|
|
76
|
+
node-version: 20
|
|
77
|
+
cache: "pnpm"
|
|
78
|
+
|
|
79
|
+
- run: pnpm install --frozen-lockfile
|
|
80
|
+
- run: pnpm lint
|
|
81
|
+
- run: pnpm test
|
|
82
|
+
- run: pnpm build
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 2. Docker Build & Push
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
name: Docker Build
|
|
89
|
+
on:
|
|
90
|
+
push:
|
|
91
|
+
branches: [main]
|
|
92
|
+
tags: ["v*"]
|
|
93
|
+
|
|
94
|
+
env:
|
|
95
|
+
REGISTRY: ghcr.io
|
|
96
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
97
|
+
|
|
98
|
+
jobs:
|
|
99
|
+
build:
|
|
100
|
+
runs-on: ubuntu-latest
|
|
101
|
+
permissions:
|
|
102
|
+
contents: read
|
|
103
|
+
packages: write
|
|
104
|
+
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/checkout@v4
|
|
107
|
+
|
|
108
|
+
- uses: docker/login-action@v3
|
|
109
|
+
with:
|
|
110
|
+
registry: ${{ env.REGISTRY }}
|
|
111
|
+
username: ${{ github.actor }}
|
|
112
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
113
|
+
|
|
114
|
+
- uses: docker/metadata-action@v5
|
|
115
|
+
id: meta
|
|
116
|
+
with:
|
|
117
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
118
|
+
tags: |
|
|
119
|
+
type=ref,event=branch
|
|
120
|
+
type=semver,pattern={{version}}
|
|
121
|
+
|
|
122
|
+
- uses: docker/build-push-action@v5
|
|
123
|
+
with:
|
|
124
|
+
context: .
|
|
125
|
+
push: true
|
|
126
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
127
|
+
cache-from: type=gha
|
|
128
|
+
cache-to: type=gha,mode=max
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 3. Deploy with Approval
|
|
132
|
+
|
|
133
|
+
```yaml
|
|
134
|
+
name: Deploy
|
|
135
|
+
on:
|
|
136
|
+
push:
|
|
137
|
+
tags: ["v*"]
|
|
138
|
+
|
|
139
|
+
jobs:
|
|
140
|
+
deploy:
|
|
141
|
+
runs-on: ubuntu-latest
|
|
142
|
+
environment:
|
|
143
|
+
name: production
|
|
144
|
+
url: https://app.example.com
|
|
145
|
+
|
|
146
|
+
steps:
|
|
147
|
+
- uses: actions/checkout@v4
|
|
148
|
+
- name: Deploy to production
|
|
149
|
+
run: |
|
|
150
|
+
echo "Deploying ${{ github.ref_name }}"
|
|
151
|
+
# Your deploy commands here
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Caching Strategies
|
|
157
|
+
|
|
158
|
+
| Package Manager | Cache Action |
|
|
159
|
+
| --------------- | ------------------------------ |
|
|
160
|
+
| **pnpm** | `cache: 'pnpm'` in setup-node |
|
|
161
|
+
| **npm** | `cache: 'npm'` in setup-node |
|
|
162
|
+
| **pip** | `cache: 'pip'` in setup-python |
|
|
163
|
+
| **Docker** | `cache-from/to: type=gha` |
|
|
164
|
+
|
|
165
|
+
### Custom Cache
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
- uses: actions/cache@v4
|
|
169
|
+
with:
|
|
170
|
+
path: |
|
|
171
|
+
~/.cache/puppeteer
|
|
172
|
+
node_modules/.cache
|
|
173
|
+
key: ${{ runner.os }}-cache-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
174
|
+
restore-keys: |
|
|
175
|
+
${{ runner.os }}-cache-
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Matrix Builds
|
|
181
|
+
|
|
182
|
+
```yaml
|
|
183
|
+
jobs:
|
|
184
|
+
test:
|
|
185
|
+
runs-on: ${{ matrix.os }}
|
|
186
|
+
strategy:
|
|
187
|
+
fail-fast: false # Don't cancel other jobs on failure
|
|
188
|
+
matrix:
|
|
189
|
+
os: [ubuntu-latest, macos-latest]
|
|
190
|
+
node: [18, 20, 22]
|
|
191
|
+
exclude:
|
|
192
|
+
- os: macos-latest
|
|
193
|
+
node: 18
|
|
194
|
+
|
|
195
|
+
steps:
|
|
196
|
+
- uses: actions/setup-node@v4
|
|
197
|
+
with:
|
|
198
|
+
node-version: ${{ matrix.node }}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Reusable Workflows
|
|
204
|
+
|
|
205
|
+
### Define Reusable Workflow
|
|
206
|
+
|
|
207
|
+
```yaml
|
|
208
|
+
# .github/workflows/reusable-test.yml
|
|
209
|
+
name: Reusable Test
|
|
210
|
+
on:
|
|
211
|
+
workflow_call:
|
|
212
|
+
inputs:
|
|
213
|
+
node-version:
|
|
214
|
+
required: true
|
|
215
|
+
type: string
|
|
216
|
+
secrets:
|
|
217
|
+
NPM_TOKEN:
|
|
218
|
+
required: false
|
|
219
|
+
|
|
220
|
+
jobs:
|
|
221
|
+
test:
|
|
222
|
+
runs-on: ubuntu-latest
|
|
223
|
+
steps:
|
|
224
|
+
- uses: actions/checkout@v4
|
|
225
|
+
- uses: actions/setup-node@v4
|
|
226
|
+
with:
|
|
227
|
+
node-version: ${{ inputs.node-version }}
|
|
228
|
+
- run: npm ci
|
|
229
|
+
- run: npm test
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Call Reusable Workflow
|
|
233
|
+
|
|
234
|
+
```yaml
|
|
235
|
+
jobs:
|
|
236
|
+
call-test:
|
|
237
|
+
uses: ./.github/workflows/reusable-test.yml
|
|
238
|
+
with:
|
|
239
|
+
node-version: "20"
|
|
240
|
+
secrets: inherit
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Security Best Practices
|
|
246
|
+
|
|
247
|
+
| Practice | Implementation |
|
|
248
|
+
| ------------------------------- | ------------------------------ |
|
|
249
|
+
| **Pin action versions** | `@v4` not `@latest` or `@main` |
|
|
250
|
+
| **Least privilege permissions** | Set `permissions:` explicitly |
|
|
251
|
+
| **Use secrets** | `${{ secrets.MY_SECRET }}` |
|
|
252
|
+
| **Scan dependencies** | Trivy, Snyk, Dependabot |
|
|
253
|
+
| **Review third-party actions** | Check source before using |
|
|
254
|
+
|
|
255
|
+
### Security Scanning Job
|
|
256
|
+
|
|
257
|
+
```yaml
|
|
258
|
+
security:
|
|
259
|
+
runs-on: ubuntu-latest
|
|
260
|
+
steps:
|
|
261
|
+
- uses: actions/checkout@v4
|
|
262
|
+
- uses: aquasecurity/trivy-action@master
|
|
263
|
+
with:
|
|
264
|
+
scan-type: "fs"
|
|
265
|
+
format: "sarif"
|
|
266
|
+
output: "trivy.sarif"
|
|
267
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
268
|
+
with:
|
|
269
|
+
sarif_file: "trivy.sarif"
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Decision Trees
|
|
275
|
+
|
|
276
|
+
### Which Runner?
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
Need specific hardware (GPU, ARM)?
|
|
280
|
+
├── Yes → Self-hosted runner
|
|
281
|
+
└── No → Need macOS/Windows?
|
|
282
|
+
├── Yes → Larger hosted runners
|
|
283
|
+
└── No → ubuntu-latest (cheapest/fastest)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### When to Use Matrix?
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
Need to test multiple versions/platforms?
|
|
290
|
+
├── Yes → Matrix with fail-fast: false
|
|
291
|
+
└── No → Single job
|
|
292
|
+
└── Supporting many platforms?
|
|
293
|
+
└── Yes → Matrix with exclude
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Anti-Patterns (DON'T)
|
|
299
|
+
|
|
300
|
+
| ❌ Anti-Pattern | ✅ Correct Approach |
|
|
301
|
+
| ------------------------------------ | ------------------------------------ |
|
|
302
|
+
| `@latest` or `@main` for actions | Pin specific version `@v4` |
|
|
303
|
+
| No caching | Cache dependencies and builds |
|
|
304
|
+
| Secrets in workflow files | Use repository/environment secrets |
|
|
305
|
+
| Single job does everything | Split into focused jobs |
|
|
306
|
+
| No `permissions:` block | Explicit least-privilege permissions |
|
|
307
|
+
| Hardcoded versions | Use matrix or variables |
|
|
308
|
+
| Skip tests on main branch | Always test, especially on main |
|
|
309
|
+
| `continue-on-error: true` everywhere | Only where truly necessary |
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Common Issues & Fixes
|
|
314
|
+
|
|
315
|
+
| Issue | Cause | Fix |
|
|
316
|
+
| ------------------------ | ------------------------- | ------------------------------------ |
|
|
317
|
+
| **Slow builds** | No caching | Add cache for deps and builds |
|
|
318
|
+
| **Flaky tests** | Race conditions, timeouts | Increase timeout, fix test isolation |
|
|
319
|
+
| **Permission denied** | Missing permissions | Add `permissions:` block |
|
|
320
|
+
| **Cache miss** | Wrong cache key | Use `hashFiles()` for lock files |
|
|
321
|
+
| **Secret not available** | Not in environment | Check environment/repository secrets |
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 🔴 Self-Check Before Completing
|
|
326
|
+
|
|
327
|
+
| Check | Question |
|
|
328
|
+
| ----------------------- | ------------------------------------- |
|
|
329
|
+
| ✅ **Actions pinned?** | Using `@v4` not `@latest`? |
|
|
330
|
+
| ✅ **Caching enabled?** | Dependencies and builds cached? |
|
|
331
|
+
| ✅ **Secrets secure?** | Using `secrets.X`, not hardcoded? |
|
|
332
|
+
| ✅ **Permissions set?** | Explicit `permissions:` block? |
|
|
333
|
+
| ✅ **Tests run?** | Critical paths tested in CI? |
|
|
334
|
+
| ✅ **Paths filtered?** | Skipping runs for irrelevant changes? |
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Related Skills
|
|
339
|
+
|
|
340
|
+
| Need | Skill |
|
|
341
|
+
| -------------------- | ----------------------- |
|
|
342
|
+
| Docker builds | `docker-patterns` |
|
|
343
|
+
| Kubernetes deploy | `kubernetes-patterns` |
|
|
344
|
+
| Security scanning | `security-fundamentals` |
|
|
345
|
+
| Deployment workflows | `deployment-procedures` |
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
> **Remember:** A good CI/CD pipeline is invisible - it just works. Developers should trust it completely and never need to "re-run to see if it passes this time."
|