github-actions-expert
GitHub Actions Expert
Skill para configurar GitHub Actions con detección proactiva de repos sin CI.
Proactive Detection
Al iniciar trabajo en un proyecto, verificar si existe .github/workflows/:
ls -la .github/workflows/ 2>/dev/null || echo "NO_WORKFLOWS"
Si no hay workflows → preguntar al usuario si quiere agregar CI básico.
Workflow
Phase 0: Knowledge Update
Before generating any workflow, fetch latest documentation:
-
Search for latest GitHub Actions docs via Context7 or WebSearch:
- Current action versions (checkout, setup-node, setup-python, setup-go)
- Latest Node.js LTS version
- Recent best practices updates
-
Version Reference (verify these are current):
Action Current Version actions/checkout v4 actions/setup-node v4 actions/setup-python v5 actions/setup-go v5 actions/cache v4 actions/upload-pages-artifact v3 actions/deploy-pages v4 -
Node.js LTS: Verify current LTS version (use WebSearch if unsure)
Phase 1: Stack Detection
Detect project type and tools:
# Detect project type
ls package.json 2>/dev/null && echo "NODE_PROJECT"
ls pyproject.toml requirements.txt 2>/dev/null && echo "PYTHON_PROJECT"
ls go.mod 2>/dev/null && echo "GO_PROJECT"
# For Node.js - detect package manager
ls pnpm-lock.yaml 2>/dev/null && echo "PNPM"
ls bun.lockb 2>/dev/null && echo "BUN"
ls package-lock.json 2>/dev/null && echo "NPM"
# Detect Node version
cat .nvmrc 2>/dev/null || cat package.json | grep -A2 '"engines"'
Phase 2: Script Analysis (Node.js)
Read package.json using Read tool and detect available scripts.
Look for the scripts section and identify which scripts exist.
Common scripts to check:
lint→ Include linting steptypecheck→ Include type checkingtest→ Include testingbuild→ Include build steptest:coverage→ Include coverage upload
Phase 3: Workflow Selection
Present options based on detected stack:
For Node.js:
- CI Básico (lint, typecheck, test, build)
- Deploy a GitHub Pages
- Release con Tags (v*)
- Security Scans
- Coverage Upload (Codecov)
For Python:
- CI Básico (ruff, pyright/mypy, pytest)
- Coverage Upload
For Go:
- CI Básico (go vet, golangci-lint, go test)
- Release binaries
Phase 4: Generate Workflows
Load templates from references/ and customize:
-
Replace placeholders:
{{NODE_VERSION}}→ Detected or default (22.x){{PACKAGE_MANAGER}}→ npm/pnpm/bun{{INSTALL_COMMAND}}→ npm ci / pnpm install --frozen-lockfile / bun install{{BRANCH}}→ main/master (auto-detect){{SCRIPTS}}→ Based on available scripts
-
Always include:
- Concurrency control
- Caching for dependencies
- fail-fast strategy
-
Create
.github/workflows/if needed:mkdir -p .github/workflows
Phase 5: Improve Existing Workflows
If workflows exist, analyze for anti-patterns:
cat .github/workflows/*.yml
Anti-patterns to detect:
| Anti-Pattern | Fix |
|---|---|
actions/*@v3 |
Update to @v4 |
setup-node without cache |
Add cache: 'npm' |
npm install |
Use npm ci |
No concurrency: |
Add concurrency control |
| Matrix with single version | Remove unnecessary matrix |
Missing fail-fast: true |
Add explicit fail-fast |
See references/anti-patterns.md for full guide.
Phase 6: Verification
After generating:
-
Validate YAML (if actionlint available):
which actionlint && actionlint .github/workflows/*.yml -
Check required permissions:
- GitHub Pages →
pages: write,id-token: write - Releases →
contents: write - PRs →
pull-requests: write
- GitHub Pages →
-
Show summary:
Workflows Created/Updated ========================= ✓ .github/workflows/ci.yml - Triggers: push (main), pull_request - Jobs: lint, typecheck, test, build - Node: 22.x with npm Next Steps: 1. Review generated workflows 2. git add .github/workflows/ 3. git commit -m "ci: add GitHub Actions workflow" 4. Push to trigger first run
Templates Reference
Templates are in references/ directory:
| Template | Description |
|---|---|
nodejs-ci.yml |
Standard CI with lint/typecheck/test/build |
nodejs-deploy-pages.yml |
Deploy to GitHub Pages |
nodejs-release.yml |
Release on tag push (v*) |
python-ci.yml |
Python CI with uv/pip, ruff, pytest |
go-ci.yml |
Go CI with vet, lint, test |
security.yml |
npm audit + secrets scanning |
Best Practices Enforced
- Always use latest action versions (@v4 for most)
- Use
npm ciovernpm installfor reproducible builds - Enable caching in setup-node/setup-python/setup-go
- Add concurrency control to cancel outdated runs
- Use
fail-fast: trueto cancel parallel jobs on failure - Specify permissions explicitly when needed
- Use Node 22.x (current LTS)
Concurrency Control Template
Always include in workflows:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
This cancels outdated PR runs but never cancels main branch runs.
Package Manager Detection
| Lockfile | Package Manager | Install Command |
|---|---|---|
pnpm-lock.yaml |
pnpm | pnpm install --frozen-lockfile |
bun.lockb |
bun | bun install --frozen-lockfile |
package-lock.json |
npm | npm ci |
| None | npm | npm ci (after npm install generates lock) |
Branch Detection
# Detect default branch
git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@'
# Or fallback
git branch -r | grep -E 'origin/(main|master)' | head -1 | sed 's@origin/@@'
More from testacode/llm-toolkit
claude-md-writer
Escribe y mejora archivos CLAUDE.md siguiendo best practices de Anthropic. Este skill se activa cuando el usuario dice "crear CLAUDE.md", "mejorar CLAUDE.md", "actualizar CLAUDE.md", "revisar CLAUDE.md", "escribir instrucciones del proyecto", "create CLAUDE.md", "improve CLAUDE.md", "review CLAUDE.md", "write project instructions", "optimize docs for Claude", "auditar CLAUDE.md", "audit CLAUDE.md", "limpiar CLAUDE.md", "dead weight", o configura un nuevo repositorio.
53doc-writer
Este skill se usa para crear documentos tecnicos organizados en /docs (specs, planes de implementacion, ADRs, documentacion de referencia). Se activa cuando el usuario dice "crear documento", "escribir spec", "documentar esto", "creame una spec", "escribime documentacion", "hacer documentacion", "write a spec", "create documentation", "write an ADR", o quiere agregar documentacion tecnica al proyecto.
44llms-txt-generator
This skill generates llms.txt documentation optimized for AI/LLM consumption. It should be used when the user says "crear llms.txt", "generate llms.txt", "documentar para AI", "document for AI", "crear documentacion para LLMs", "generate docs for LLMs", "make repo readable for Claude", or wants to create structured machine-readable documentation following the llms.txt standard.
40doc-organizer
Este skill se usa cuando el usuario pide "organizar docs", "ordenar documentacion", "mover documentos a carpetas", "categorizar archivos md", "reorganizar documentacion", o cuando hay archivos .md sueltos en docs/ que necesitan ser movidos a subcarpetas tematicas. Organiza y categoriza documentos tecnicos en la estructura correcta del proyecto.
28feature-planner
Planifica features con entrevista estructurada y crea tareas. Este skill se activa cuando el usuario dice "quiero agregar", "planificar feature", "nueva funcionalidad", "implementar esto", "crear plan", "planificar antes de codear", "disenar feature", "como deberia implementar esto", "pensar la arquitectura", o quiere alinear antes de escribir codigo.
27nextjs-project-starter
Creates Next.js projects with a configurable stack (Mantine, Supabase, Zustand, Zod). This skill should be used when the user says "create a Next.js project", "new web project", "bootstrap fullstack app", "start new app", "crear proyecto Next.js", "nuevo proyecto web", "empezar app fullstack", or wants to scaffold a new personal project from scratch.
25