De bout en bout : de l'issue à la pull request mergée
Prendre une issue GitHub, laisser Gemini CLI crcrLe pourcentage de visiteurs ou de prospects qui réalisent une action attendue (achat, inscription, formulaire de contact), calculé en divisant les conversions par le nombre total d'opportunités.Voir la définition complète →éererLe rapport entre les interactions (likes, commentaires, partages) et le reach d'un contenu, utilisé pour mesurer la réaction de l'audience au regard du nombre de personnes touchées.Voir la définition complète → une branche, implémenter et tester le changement, ouvrir une pull request, relire le diff vous-même et merger : voilà la boucle professionnelle complète, et Gemini s'y insère sans que vous abandonniez le contrôle d'aucune des portes.
Vous connaissez déjà Gemini CLI comme outil de coding agentique qui tourne dans votre terminal. Cette leçon le branche sur un vrai process GitHub. Le but n'est pas « laisser l'IA écrire du code ». Le but est de traiter Gemini CLI comme un contributeur rapide et infatigable dont le travail passe malgré tout par la même discipline de revue que celle appliquée à n'importe quel ingénieur junior.
La boucle que nous automatisons
Un workflow GitHub mature ressemble à ceci :
- Une issue décrit un problème ou une fonctionnalité.
- Quelqu'un crée une branche depuis
main. - Il implémente un changement petit et ciblé, avec des tests.
- Il ouvre une pull request (PR).
- Un humain relit le diff.
- La CI passe, puis quelqu'un merge.
Gemini CLI peut mener les étapes 2 à 4 à votre place. Les étapes 5 et 6 restent humaines. Cette séparation est tout le design : le modèle produit une proposition, et la PR est l'artefact que vous inspectez avant que quoi que ce soit ne touche `main`.
Setup : le contexte GitHub pour la CLI
Gemini CLI peut appeler directement `git` et la [GitHub CLI](https://cli.github.com/) (`gh`), c'est ainsi qu'il lit les issues et ouvre les PR. Vérifiez que les deux sont installés et authentifiés :
gh auth status # confirm you are logged in to GitHub
gh auth setup-git # let gh act as git's credential helper
gemini --version # confirm Gemini CLI is on your PATHLe geste clé consiste à donner à la CLI un brief projet pour qu'elle ne devine pas vos conventions. Gemini CLI lit un fichier GEMINI.md à la racine du repo comme contexte persistant pour chaque session. Traitez-le comme un contrat :
# Project: billing-service
## Workflow rules
- Branch from `main` using `fix/<issue-number>-<slug>` or `feat/<issue-number>-<slug>`.
- One logical change per branch. Keep diffs small.
- Every code change needs a matching test.
- Run `pytest -q` before proposing a PR. Do not open a PR if tests fail.
## Conventions
- Python 3.12, formatted with `ruff format`.
- Conventional Commits for commit messages (`fix:`, `feat:`, `chore:`).
- Never touch `migrations/` without an explicit instruction.Cette dernière ligne compte. GEMINI.md est l'endroit où vous encodez les garde-fousgarde-fousRègles et contrôles qui maintiennent un système d'IA dans des limites sûres, légales et conformes à la marque, en bloquant les sorties et actions hors cadre.Voir la définition complète →, pas seulement le style. Tout ce que vous diriez à une nouvelle recrue pendant sa première semaine a sa place ici.
Étape 1 : prendre l'issue
Disons que l'issue #212 dit : *« L'endpoint de remboursement renvoie 200 même quand l'ID de paiement est inconnu ; il devrait renvoyer 404. »*
Lancez une session et passez l'issue au modèle par son numéro. Gemini CLI peut appeler gh issue view lui-même, vous n'avez donc pas besoin de coller le texte :
gemini
> Read issue #212 with `gh issue view 212`, then summarize the bug and
the acceptance criteria before writing any code.Imposer un résumé d'abord est une technique délibérée. Vous voulez que le modèle reformule le problème avec ses propres mots pour pouvoir détecter un contresens avant qu'il n'écrive une ligne. Si le résumé est faux, corrigez-le maintenant. Cela vous coûte dix secondes et vous évite un mauvais diff.
Étape 2 : brancher proprement
Quand le résumé est juste, laissez la CLI créer la branche. Comme `GEMINI.md` a défini la règle de nommage, vous pouvez être laconique :
> Create the working branch for this issue following the rules in GEMINI.md.Gemini CLI exécutera quelque chose comme git checkout -b fix/212-refund-unknown-payment-404. L'hygiène de branche signifie qu'une branche correspond à une issue et à un changement logique. Ce n'est pas de la bureaucratie. C'est ce qui garde le diff final suffisamment petit pour qu'un humain le lise vraiment, et cela vous permet d'abandonner une tentative ratée avec un simple git branch -D au lieu de démêler des changements mélangés.
Si la CLI tente de travailler directement sur main, arrarrL'Annual Recurring Revenue (ARR) est le revenu normalisé et prévisible qu'une entreprise par abonnement attend de ses contrats actifs sur une année.Voir la définition complète →êtez-la. Travailler sur main est de loin la façon la plus courante pour un agent de corrompre un repo en silence.
Étape 3 : implémenter et tester
Maintenant le vrai travail. Gemini CLI est agentique : il va lire des fichiers, proposer des modifications et demander à lancer des commandes. Approuvez ces actions délibérément.
> Fix issue #212. Locate the refund handler, return 404 when the payment
ID is not found, and add a test that fails on the old behavior.
Run `pytest -q` when done and show me the result.Deux points sur lesquels insister ici :
Les tests font partie du changement, pas d'un suivi. Un changement sans test est un changement dont personne ne peut garantir qu'il restera corrigé. L'instruction ci-dessus demande un test qui *échoue sur l'ancien comportement*, c'est ainsi que vous prouvez que le test est réel et pas un tampon de complaisance.
Le modèle lance les tests, et vous lisez la sortie. N'acceptez pas « j'ai ajouté le correctif » sur parole. Si pytest est rouge, la boucle n'est pas terminée. Renvoyez l'échec :
> pytest failed with `KeyError: 'payment_id'` in test_refund.py:41.
Fix the test setup, do not change the assertion.Cette dernière clause vous protège d'un mode de défaillance classique : le modèle qui « répare » un test rouge en affaiblissant l'assertion jusqu'à ce qu'elle passe. C'est vous qui décidez ce que le test doit prouver.
Étape 4 : relire le diff en local, puis ouvrir la PR
Avant qu'une PR n'existe, regardez le diff brut vous-même :
> Show me `git diff --stat`, then the full diff.--stat d'abord vous donne la forme du changement : quels fichiers, combien de lignes. Si le modèle a touché douze fichiers pour corriger un 404, quelque chose cloche. Un diff serré et dans le sujet est un signal que le modèle a compris la tâche. Un diff tentaculaire est un signal qu'il faut repartir de zéro.
Quand le diff est propre, laissez la CLI committer et ouvrir la PR :
> Commit with a Conventional Commit message, push the branch, and open a
PR against `main` with `gh pr create`. In the PR body, link issue #212
with "Closes #212" and summarize what changed and how you tested it.Le mot-clé Closes #212 n'est pas cosmétique. GitHub ferme automatiquement l'issue liée quand la PR est mergée, ce qui maintient votre issue tracker honnête. Un bon corps de PR écrit par le modèle donne à votre relecteur humain (ou à votre vous futur) le contexte pour relire vite.
Gemini CLI: Agentic coding in your terminal
Étape 5 : la revue humaine est la porte
Voici la partie qui n'est pas automatisée, volontairement. La PR est maintenant sur GitHub. Ouvrez-la dans le navigateur et relisez le diff comme si un inconnu l'avait écrit, parce que c'est fonctionnellement le cas.
Posez les questions concrètes :
- Le correctif correspond-il aux critères d'acceptation de l'issue #212 ?
- Le nouveau test exerce-t-il réellement le chemin du paiement inconnu ?
- Quelque chose s'est-il glissé que l'issue ne demandait pas ?
- Y a-t-il une implication de sécurité ou de données (auth, logging d'un ID de paiement, une migration) ?
C'est aussi là qu'un second relecteur IA gagne sa place. Gemini Code Assist peut relire les pull requests sur GitHub, en laissant des commentaires inline sur le diff. Installé sur le repo, il commente automatiquement à l'ouverture d'une PR. Considérez-le comme une première passe qui fait remonter les problèmes évidents (cas limites manquants, dérive de style), pas comme l'approbation elle-même. L'humain clique toujours sur Approve.
La raison de garder la porte humaine est la responsabilité. Quand ce code de remboursement partira en production et que quelque chose cassera à 2 h du matin, « le modèle l'avait approuvé » n'est pas une réponse que quiconque accepte. La personne qui a mergé est propriétaire du changement. Gemini CLI l'a rédigé ; vous l'avez livré.
Vérification des acquis
1. Dans le workflow décrit, pourquoi les étapes 5 et 6 (relire le diff et merger) restent-elles délibérément humaines alors que Gemini CLI mène les étapes 2 à 4 ?
2. Quel est l'objectif principal du fichier GEMINI.md à la racine du dépôt ?
3. La leçon dit que le but n'est « pas de laisser l'IA écrire du code » mais plutôt de traiter Gemini CLI comme un contributeur rapide et infatigable. Quel principe fondamental cette formulation exprime-t-elle ?
4. Sélectionnez TOUTES les affirmations qui décrivent correctement la manière dont Gemini CLI est configuré pour travailler au sein du process GitHub.
Sélectionnez toutes les réponses correctes.
5. Sélectionnez TOUS les garde-fous ou règles que le GEMINI.md d'exemple établit dans le cadre du contrat de workflow.
Sélectionnez toutes les réponses correctes.
Étape 6 : la CI, puis le merge
Vos règles de branch protection sur main devraient exiger une CI verte avant merge. C'est de la configuration GitHub standard et cela s'applique aux PR écrites par une IA exactement comme à celles écrites par des humains. Rien ne merge en rouge.
Si la CI échoue sur quelque chose que les tests locaux ont manqué (un linter, un test d'intégration, un type check), renvoyez l'échec dans la même session CLI :
> The `ruff check` step failed in CI on unused import in refund.py.
Fix it and push to the same branch.La PR se met à jour sur place, la CI se relance. Une fois qu'elle est verte et que vous avez approuvé, mergez :
> Merge the PR with `gh pr merge --squash --delete-branch`.--squash écrase les commits intermédiaires du modèle en un seul commit propre sur main, si bien que votre historique se lit comme un changement par issue plutôt qu'une traînée de commits « fix test ». --delete-branch boucle l'hygiène de branche : la branche jetable disparaît, et Closes #212 retire l'issue.
Pourquoi les petits diffs font marcher tout cela
Chaque discipline de cette leçon (une issue par branche, un test avec chaque changement, relire --stat avant le diff complet, le squash-merge) visent la même cible : garder l'unité de changement assez petite pour qu'un humain la comprenne entièrement en quelques minutes.
Cela compte davantage avec un contributeur IA, pas moins. Gemini CLI peut générer un changement de 600 lignes aussi facilement qu'un de 20 lignes, et une longue fenêtre de contexte signifie qu'il tentera volontiers des refactorings tentaculaires. Le goulot d'étranglement n'est pas la capacité du modèle à écrire du code. C'est votre capacité à le vérifier. Les petits diffs gardent la vérification peu coûteuse, ce qui garde la boucle rapide et sûre.
Quand vous ressentez l'envie de dire « et tant que tu y es, refactore tout le module paiements », résistez. C'est une deuxième issue et une deuxième branche.
Passer le pattern à l'échelle
Une fois cette boucle devenue un réflexe, la même forme se met à l'échelle :
- Triage par lots. Pointez la CLI sur un ensemble d'issues labellisées et faites-lui rédiger les PR une par une, chacune sur sa branche, chacune toujours soumise à votre revue.
- Automatisation sur mesure. Pour des workflows répétables multi-étapes dépassant un seul repo, l'Agent Development Kit (ADK) vous permet de construire un agent dédié, tandis que Gemini CLI reste votre outil interactif avec humain dans la boucle.
La boucle interactive est la fondation. N'automatisez au-delà qu'une fois que vous faites confiance à la porte.
Points clés
- Encodez vos règles dans `GEMINI.md`. Le nommage des branches, « un changement par branche », « chaque changement a besoin d'un test » et les répertoires interdits appartiennent au repo pour que chaque session en hérite.
- Faites résumer l'issue par le modèle et lancer les tests avant de faire confiance à quoi que ce soit. Attrapez les contresens tôt, et n'acceptez jamais une PR verte dont vous n'avez pas vu le diff.
- Gardez l'humain comme porte de merge. Utilisez Gemini Code Assist pour une première passe de revue, mais la personne qui clique sur Merge est propriétaire du changement sur
main. - Protégez `main` avec la branch protection et exigez une CI verte. Les PR écrites par une IA passent les mêmes portes automatisées que celles des humains, sans exception.
- Gardez les diffs petits. Relisez
git diff --statd'abord, squash-mergez, supprimez la branche. Les petites unités de changement sont ce qui rend un contributeur IA sûr à côtoyer.