Déception, j'ai bien peur que PRB0t n'ait pas été un très bon choix.
Il y a plusieurs issues qui mentionnent des faiblesses dans le mécanisme de mise à jour des fork.
Description du problème
Hier @miryad a utilisé l'outil pour mettre à jour la BNLC. On se retrouve dans la PR avec un conflit sur le fichier de la base, dont je ne comprenais pas l'origine. Voir la PR 19.
Une fois cette opération faite, il crée une nouvelle branche sur son fork, créé un commit avec les modifications demandées, puis fait une nouvelle demande de PR depuis cette nouvelle branche vers le repo principal.
Problème
Visiblement, la phase de mise à jour de la branche main du fork peut échouer. Mais le reste de l'opération continue, ce qui fait qu'on fait une PR qui applique des modifications à une version obsolète de la base. D'où un potentiel conflit de merge.
Le cas de devrait pas apparaitre souvent, car pour qu'il y ait conflit, il faut que la nouvelle modification touche les mêmes lignes que les modifs précédentes. Et que la mise à jour de la branche main du fork échoue. Pour le moment je vais résoudre le problème à la main, pour remettre les choses sur les rails.
Pour la suite, on peut soit chercher une alternative comme outil, soit essayer de contourner le problème en supprimant le fork après chaque PR, ce qui doit forcer le bot à recréer un fork tout neuf à chaque fois. On peut aussi essayer de corriger le problème sur PRB0t.
Suite à de nouveaux conflits, j'ai continué à creuser ce problème.
Il m'a semblé voir un bug dans le code de PRB0t, ce qui m'a conduit à forker le projet, à le corriger et à tester en local pour voir si le problème est résolu.
Il est possible que mon fix règle quelque chose, mais cela est masqué par un second problème que je n'avais pas vu : PRB0T dépend de github-js. Or cette librairie ne semble plus très maintenue non plus (avec un nom pareil j'aurais pas cru). Et qu'il me semble que j'ai un problème de caching avec cette lib.
En effet elle ne semble pas préciser dans les headers de ses requetes à l'API Github une politique de cache, elle subit donc celle de l'API qui par défaut cache certaines requêtes. Résultat : des choses qui viennent de changer ne sont pas prises en compte et les PR partent en sucette.
Déception, j'ai bien peur que PRB0t n'ait pas été un très bon choix. Il y a plusieurs issues qui mentionnent des faiblesses dans le mécanisme de mise à jour des fork.
Description du problème
Hier @miryad a utilisé l'outil pour mettre à jour la BNLC. On se retrouve dans la PR avec un conflit sur le fichier de la base, dont je ne comprenais pas l'origine. Voir la PR 19.
Fonctionnement de PRB0t
Le bot fork le github de la base de covoiturage, et travaille toujours avec ce même fork.En l'occurence https://github.com/the-nice-bot/transport-base-nationale-covoiturage-1/. Lors d'une demande de PR, le bot commence par merger le repos principal du projet (à savoir https://github.com/etalab/transport-base-nationale-covoiturage) dans la branch "main" du fork, afin d'être à jour.
Une fois cette opération faite, il crée une nouvelle branche sur son fork, créé un commit avec les modifications demandées, puis fait une nouvelle demande de PR depuis cette nouvelle branche vers le repo principal.
Problème
Visiblement, la phase de mise à jour de la branche main du fork peut échouer. Mais le reste de l'opération continue, ce qui fait qu'on fait une PR qui applique des modifications à une version obsolète de la base. D'où un potentiel conflit de merge.
L'issue a été remontée en 2019, rien n'a été corrigé. https://github.com/PRB0t/PRB0t/issues/46 Zut zut.
Solutions ?
Le cas de devrait pas apparaitre souvent, car pour qu'il y ait conflit, il faut que la nouvelle modification touche les mêmes lignes que les modifs précédentes. Et que la mise à jour de la branche main du fork échoue. Pour le moment je vais résoudre le problème à la main, pour remettre les choses sur les rails.
Pour la suite, on peut soit chercher une alternative comme outil, soit essayer de contourner le problème en supprimant le fork après chaque PR, ce qui doit forcer le bot à recréer un fork tout neuf à chaque fois. On peut aussi essayer de corriger le problème sur PRB0t.
A discuter avec @thbar .