P PasteCode
Prompt

Prompt pour créer un workflow de déploiement GitHub Actions

Prompt d'agent IA pour générer un workflow CI/CD GitHub Actions de production pour une application Next.js avec les étapes de vérification de type, test, build et déploiement.

CursorClaude CodeCodexWindsurf Next.jsTypeScriptCloudflare
.md .json Difficulté: Moyen Mis à jour 8 juin 2026

Donnez ce prompt à votre agent pour générer un fichier de workflow GitHub Actions éprouvé qui exécute la vérification de type, les tests et un build de production avant le déploiement — sans commettre de secrets ni utiliser de versions d’actions dépréciées.

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.

Notes d’Implémentation

  • oven-sh/setup-bun@v2 installe la version de Bun depuis .bun-version ou package.json#engines.bun si présent — assurez-vous que l’un de ces fichiers existe ou spécifiez avec bun-version: '1.x'.
  • --frozen-lockfile empêche le CI de mettre à jour silencieusement les dépendances ; un échec ici signifie que bun.lock est désynchronisé localement.
  • Cloudflare Pages avec wrangler-action@v3 nécessite que le projet existe dans le tableau de bord Cloudflare en premier lieu — documentez cette condition préalable dans un commentaire à l’intérieur du YAML.
  • Concurrence : utilisez group: ${{ github.workflow }}-${{ github.ref }} avec cancel-in-progress: true.

Changements de Fichiers Attendus

.github/workflows/deploy.yml (new)

Critères d’Acceptation

  • Une PR vers main déclenche uniquement le job ci et publie un statut de vérification.
  • La fusion vers main déclenche ci puis deploy, dans cet ordre.
  • Aucun secret n’apparaît dans le fichier YAML.
  • Un deuxième push sur la même branche annule la précédente exécution en cours.

Commandes de Test

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

Erreurs Courantes des IA

  • Coder en dur la valeur de CLOUDFLARE_API_TOKEN au lieu d’utiliser ${{ secrets.CLOUDFLARE_API_TOKEN }}.
  • Utiliser des versions dépréciées actions/checkout@v2 ou actions/cache@v2 au lieu de v4.
  • Exécuter le job de déploiement sur des événements pull_request, ce qui déploie depuis des forks.
  • Oublier needs: [ci] sur le job de déploiement, permettant des déploiements même si les tests échouent.

Prompt de Correction

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.