Répondre à une remarque de revue dans une PR
Répondre à une remarque de revue de code sur une PR GitHub et résoudre le fil de discussion.
Entrées
Déduire toutes les entrées du contexte de la conversation. Ne demander qu'en cas d'ambiguïté.
Entrée 1 — Numéro ou URL de la PR. La pull request sur laquelle agir. Déduire du contexte (par ex. une URL de PR précédemment affichée ou un nom de branche). Si vraiment ambigu, exécuter :
gh pr list --head "$(git rev-parse --abbrev-ref HEAD)" --json number,url --jq '.[0]'
Entrée 2 — La remarque à laquelle répondre.
Un commentaire spécifique du relecteur — généralement identifié par un numéro (#2), fichier+ligne, ou texte cité depuis le tableau des remarques présenté plus tôt dans la conversation.
Si aucun tableau de remarques n'est présent dans la conversation et que la compétence dakubo-display-pr-remarks est disponible, l'utiliser pour générer le tableau. Sinon, demander la remarque à l'utilisateur.
Entrée 3 — La réponse. La réponse à poster : une explication, un accusé de réception ou un résumé de correctif. La déduire du contexte (par ex. ce qui vient d'être corrigé ou discuté). Demander si ce n'est pas clair.
Processus
1. Résoudre l'ID du commentaire
Récupérer les commentaires de revue en ligne pour la PR :
gh api repos/:owner/:repo/pulls/<PR>/comments --paginate \
--jq '.[] | {id, path, line: (.line // .original_line), body: .body[0:120]}'
Faire correspondre la remarque cible par numéro de ligne, chemin de fichier ou extrait du corps. Noter son id.
2. Poster la réponse
gh api repos/:owner/:repo/pulls/<PR>/comments \
--method POST \
--field body="<answer>" \
--field in_reply_to=<comment_id>
3. Résoudre le fil de discussion
Trouver le fil de revue qui contient ce commentaire :
gh api graphql -f query='
{
repository(owner: "<owner>", name: "<repo>") {
pullRequest(number: <PR>) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) { nodes { databaseId } }
}
}
}
}
}'
Faire correspondre le fil dont comments.nodes[0].databaseId est égal à l'id du commentaire d'origine (pas la réponse). Puis le résoudre :
gh api graphql -f query='
mutation {
resolveReviewThread(input: { threadId: "<thread_node_id>" }) {
thread { isResolved }
}
}'
Sortie
Confirmer : réponse postée au commentaire <id> à <fichier>:<ligne>, fil résolu. Une seule phrase.
Ce qu'il ne faut PAS faire
- Ne pas inventer de réponse — la déduire du contexte ou demander.
- Ne pas résoudre un fil sans avoir posté une réponse d'abord.
- Ne pas deviner la PR si plusieurs sont ouvertes sur cette branche ; demander.