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
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
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@v2installe la version de Bun depuis.bun-versionoupackage.json#engines.bunsi présent — assurez-vous que l’un de ces fichiers existe ou spécifiez avecbun-version: '1.x'.--frozen-lockfileempêche le CI de mettre à jour silencieusement les dépendances ; un échec ici signifie quebun.lockest désynchronisé localement.- Cloudflare Pages avec
wrangler-action@v3né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 }}aveccancel-in-progress: true.
Changements de Fichiers Attendus
.github/workflows/deploy.yml (new)Critères d’Acceptation
- Une PR vers
maindéclenche uniquement le jobciet publie un statut de vérification. - La fusion vers
maindéclenchecipuisdeploy, 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
# validate YAML syntax locallybun x @actions/validator .github/workflows/deploy.yml || true# or use actionlintdocker run --rm -v "$(pwd):/repo" rhysd/actionlint:latest /repo/.github/workflows/deploy.ymlErreurs Courantes des IA
- Coder en dur la valeur de
CLOUDFLARE_API_TOKENau lieu d’utiliser${{ secrets.CLOUDFLARE_API_TOKEN }}. - Utiliser des versions dépréciées
actions/checkout@v2ouactions/cache@v2au 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
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.