Examiner une pull request à la demande
Utilisez un webhook vérifié pour mettre en file une revue par un agent lorsqu’un label est ajouté.
Enregistrez le script à côté de la configuration de la page Installation et lancez-le avec Node.js. Il reçoit les événements de label vérifiés et publie des jobs de revue ; le worker exécute l’agent séparément.
Ce que montre l’exemple
Section intitulée « Ce que montre l’exemple »- WebhooksVérifier la livraison et transformer l’événement de label en job.
- Files de jobs et workersTransmettre le job du serveur à un processus worker.
- Exécutions durablesEnregistrer la sortie de chaque tâche sous le
runIddu job. - Tâches et dépendancesRécupérer, relire, puis publier.
- Réponses typéesValider le verdict de l’agent.
- Dépôt et brancheFaire partir la branche de revue du commit de tête de la pull request.
Écrire le script
Section intitulée « Écrire le script »Enregistrez les fichiers présentés dans les onglets dans le même répertoire, à côté du outpost.config.ts de la page Installation. Lancez le serveur HTTP avec server.ts et le worker avec worker.ts. Le repository de la configuration est un clone local du dépôt GitHub relu.
Validez les données du job et le verdict, puis fournissez les opérations GitHub de votre application.
Lancez la revue sur le commit demandé et publiez le verdict avec des tâches dépendantes.
Enregistrez l’état du workflow et lancez le worker.
Exécuter le script
Section intitulée « Exécuter le script »Lancez le serveur HTTP et le worker dans deux terminaux distincts. Fournissez au serveur le secret du webhook configuré dans GitHub ; le worker traite les jobs de revue que le serveur publie.
Pointez le webhook du dépôt vers le chemin /github du serveur, derrière un proxy HTTPS, avec le même secret et l’événement « Pull requests ».
Comprendre les étapes
Section intitulée « Comprendre les étapes »Chaque lien indique qui transmet quoi à qui, dans le sens de la flèche.
Le runId nomme le commit de tête. Rajouter le label sur le même commit restaure l’exécution terminée depuis son checkpoint : rien n’est relu ni publié deux fois. Un nouveau commit lance une nouvelle revue.
review ne renvoie que .value : les checkpoints contiennent du JSON, pas les méthodes d’un résultat de dispatch (D’une tâche à un workflow).
Adapter l’exemple
Section intitulée « Adapter l’exemple »Merge requests GitLab
Section intitulée « Merge requests GitLab »Ajoutez une route /gitlab avec createGitlabWebhook({ signingToken }), qui vérifie un corps signé. labelAdded() reconnaît aussi les merge requests : lisez la tête dans object_attributes.last_commit.id, la base dans object_attributes.target_branch, et listez des acteurs gitlab:<username> dans reviewers.
Une commande Slack
Section intitulée « Une commande Slack »Ajoutez une route /slack avec createSlackSource({ signingSecret }) et commandIssued(event, "/review"), dont le text désigne la pull request. Slack ne transmet aucun commit : publiez { repository, number } et laissez fetch renvoyer { base, head }, que review lira.
Une file Redis
Section intitulée « Une file Redis »Remplacez createSqliteTaskQueue() dans la configuration de la file par createBullMQTaskQueue() pour exécuter le serveur et les workers sur des machines distinctes. Plusieurs machines de workers demandent aussi un stockage de checkpoints partagé (S3 et R2).
Approuver avant de publier
Section intitulée « Approuver avant de publier »Insérez une étape d’approbation entre review et post. Le job se termine alors en paused, avec l’étape d’approbation en attente dans sa valeur ; soumettez la décision à la même exécution comme dans Files de jobs et workers.
- Le worker relit le clone désigné par
repository; associezpull.repositoryà un clone pour servir plusieurs dépôts. - « Do not edit files » est une instruction donnée à l’agent. Sa branche de revue n’est jamais intégrée ni poussée ; supprimez les branches
outpost/review-*dont vous n’avez plus besoin. - Un worker interrompu peut réexécuter
post: faites dédupliquerpostVerdictsur sa clé (Files de jobs et workers).
API : serveTriggers · createGithubWebhook · labelAdded · createSqliteTaskQueue · runQueueWorker · defineWorkflowJob · defineIsolatedTask · defineJsonResponse.