P PasteCode
Indicación

Prompt para crear un flujo de trabajo de despliegue con GitHub Actions

Prompt para agente de IA para generar un flujo de trabajo CI/CD de producción con GitHub Actions para una app Next.js que incluya pasos de verificación de tipos, pruebas, compilación y despliegue.

CursorClaude CodeCodexWindsurf Next.jsTypeScriptCloudflare
.md .json Dificultad: Medio Actualizado 8 jun 2026

Proporciona este prompt a tu agente para generar un archivo de flujo de trabajo de GitHub Actions probado en batalla que ejecute verificación de tipos, pruebas y una compilación de producción antes de desplegar — sin comprometer secretos ni usar versiones de acciones obsoletas.

Prompt principal

Main Prompt
You are working in a Next.js 15 project that uses TypeScript and Bun as the package manager.
Deployments go to Cloudflare Pages.
Task: create a GitHub Actions CI/CD workflow at `.github/workflows/deploy.yml`.
Requirements:
- Trigger on: `push` to `main` and `pull_request` targeting `main`.
- On pull_request: run only the `ci` job (lint, typecheck, build).
- On push to main: run `ci` then `deploy` (deploy only if ci passes).
- `ci` job:
- Runner: `ubuntu-latest`.
- Steps: checkout, setup Bun (`oven-sh/setup-bun@v2`), `bun install --frozen-lockfile`,
`bun run typecheck`, `bun run build`.
- Cache: use `actions/cache@v4` to cache `node_modules` keyed on `bun.lock` hash.
- `deploy` job:
- needs: [ci]
- if: `github.event_name == 'push'`
- Deploy to Cloudflare Pages using `cloudflare/wrangler-action@v3`.
- Secrets used: `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ACCOUNT_ID` (from GitHub secrets — do NOT
hard-code values).
- Set `command: pages deploy .next --project-name=my-app --branch=main`.
- Add a concurrency group to cancel in-progress runs on the same branch.
- Do NOT pin to `@v1` of any action — use the versions specified above.
- Do NOT store any secret value in the YAML file.
Stop and show the complete workflow YAML before writing the file.

Notas de implementación

  • oven-sh/setup-bun@v2 instala la versión de Bun desde .bun-version o package.json#engines.bun si está presente — asegúrate de que exista uno de esos archivos o fija la versión con bun-version: '1.x'.
  • --frozen-lockfile evita que el CI actualice dependencias silenciosamente; fallar aquí significa que bun.lock no está sincronizado localmente.
  • Cloudflare Pages con wrangler-action@v3 requiere que el proyecto exista primero en el panel de Cloudflare — documenta este requisito previo en un comentario dentro del YAML.
  • Concurrencia: usa group: ${{ github.workflow }}-${{ github.ref }} con cancel-in-progress: true.

Cambios de archivo esperados

.github/workflows/deploy.yml (new)

Criterios de aceptación

  • Un PR a main activa solo el trabajo ci y publica una verificación de estado.
  • Un merge a main activa ci y luego deploy, en orden.
  • No aparecen secretos en el archivo YAML.
  • Un segundo push a la misma rama cancela la ejecución anterior en curso.

Comandos de prueba

Terminal window
# validate YAML syntax locally
bun x @actions/validator .github/workflows/deploy.yml || true
# or use actionlint
docker run --rm -v "$(pwd):/repo" rhysd/actionlint:latest /repo/.github/workflows/deploy.yml

Errores comunes de la IA

  • Codificar el valor de CLOUDFLARE_API_TOKEN en lugar de usar ${{ secrets.CLOUDFLARE_API_TOKEN }}.
  • Usar actions/checkout@v2 o actions/cache@v2 obsoletos en lugar de v4.
  • Ejecutar el trabajo de despliegue en eventos pull_request, desplegando desde forks.
  • Falta needs: [ci] en el trabajo de despliegue, permitiendo despliegues incluso si las pruebas fallan.

Prompt de corrección

Fix Prompt
The workflow deploys even when CI fails, or secrets are exposed. Fix in order:
1. Add `needs: [ci]` to the `deploy` job.
2. Add `if: github.event_name == 'push' && github.ref == 'refs/heads/main'` to the deploy job.
3. Replace any hard-coded token values with `${{ secrets.CLOUDFLARE_API_TOKEN }}`.
4. Upgrade any @v1/@v2 action references to the versions specified in the original prompt.
Show only the corrected YAML diff.