Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEATURE] Gérer une merge queue #447

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from
Draft

Conversation

VincentHardouin
Copy link
Member

@VincentHardouin VincentHardouin commented Oct 8, 2024

🦄 Problème

Actuellement, notre action de merge automatique ne gère pas une merge queue ce qui engendre un problème de coût de ressource. Tout d'abord, lorsque le label ready-to-merge est apposé sur plusieurs PR en même temps, l'action va rebase toutes les PRs, ce qui va engendrer des coûts de CI, puis quand la première est mergée les N-1 PR vont à nouveau se rebase et déclencher de nouveau les CI.

De plus, un autre problème est que l'action doit être installée sur tous les repos.

🤖 Proposition

Nous proposons de mettre en place notre action dans un unique repo et que cette dernière ait une merge queue.

Pour la partie unique repo, en effet l'action sous-jacente que nous utilisons pour rebase et merger est capable d'être unique et être en charge de plusieurs repo (cf: la doc) :

PULL_REQUEST: If provided, this action will attempt to merge the specified pull request. By default, it will attempt to use the pull request specified in the GitHub context. If a pull request number is provided via this input, this action will search in the current repo for the provided pull request number. If you want to merge a pull request in another repo, just provide the repo slug before the pull request number, like Some-Org/Some-Repo/1234

Pour la création de la merge queue, c'est pour ça que nous nous retrouvons ici, nous souhaitons déléguer cette tâche à Pix Bot. Pour faire cela, il a été nécessaire de faire en sorte d'avoir un stockage persistant, comme sur les autres projets de Pix, nous sommes partis sur une base Postgresql, avec knex comme connecteur.

Screenshot 2024-12-03 at 18 44 17

☑️ TODO

  • Gérer le unlabel ? Optionnel : car l'action ne mergerait pas
  • Gérer le webhook : checks fails
  • Gérer le webhook : mergée
  • Changer l'action/doubler l'action auto-merge pour être déclenchable par workflow_dispatch
  • Webhook par l'action pour dire que ça n'a pas mergé
  • Action : envoyer le webhook
  • Vérifier que l'action est capable de merger un repo privé
  • Sécu : vérifier qu'un fork ne peut pas déclencher via le label (https://docs.github.com/en/rest/orgs/members?apiVersion=2022-11-28#check-public-organization-membership-for-a-user)
  • Voir si on ne peut pas faire une merge queue par repo

🌈 Remarques

Procédure pour passer par ce mécanisme sur un repo

Variable à ajouter dans Pix Actions

💯 Pour tester

@pix-bot-github
Copy link

Une fois l'application déployée, elle sera accessible à cette adresse https://bot-pr447.review.pix.fr
Les variables d'environnement seront accessibles sur scalingo https://dashboard.scalingo.com/apps/osc-fr1/pix-bot-review-pr447/environment

@VincentHardouin VincentHardouin marked this pull request as ready for review November 19, 2024 16:05
@pix-bot-github
Copy link

Une fois l'application déployée, elle sera accessible à cette adresse https://bot-pr447.review.pix.fr
Les variables d'environnement seront accessibles sur scalingo https://dashboard.scalingo.com/apps/osc-fr1/pix-bot-review-pr447/environment

Co-authored-by: Yannick François <[email protected]>

Co-authored-by: Guillaume Lagorce <[email protected]>
@lionelB lionelB added the enhancement New feature or request label Dec 3, 2024
@lionelB lionelB added cross-team Toutes les équipes de dev Development in progress WIP labels Dec 3, 2024
VincentHardouin and others added 7 commits December 3, 2024 16:32
Co-authored-by: Yannick François <[email protected]>

Co-authored-by: Guillaume Lagorce <[email protected]>
Co-authored-by: Yannick François <[email protected]>
Co-authored-by: Yannick François <[email protected]>
Co-authored-by: Vincent Hardouin <[email protected]>
Co-authored-by: Clément Latzarus <[email protected]>
Co-authored-by: Diane Cordier <[email protected]>
Co-authored-by: Clément Latzarus <[email protected]>
Co-authored-by: Yannick François <[email protected]>
Co-authored-by: Vincent Hardouin <[email protected]>
Co-authored-by: Guillaume Lagorce <[email protected]>
Co-Authored-By: GUL <[email protected]>
Co-Authored-By: Vincent Hardouin <[email protected]>
Co-Authored-By: Clement Latzarus <[email protected]>
Co-Authored-By: Diane Cordier <[email protected]>
import { knex } from '../../db/knex-database-connection.js';

async function save({ number, repositoryName }) {
return knex('pull_requests').insert({ number, repositoryName });
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dès que ce code est MEP, l'action sera disponible pour tous les repos de Pix, il nous faut donc un mécanisme pour avoir le temps de supprimer l'action du repo et accepter le repo. Pour cela, on peut ajouter une variable permettant de whitelister les repositories que nous supportons pour pouvoir faire la MEP tranquillement.
On peut même prévoir un système de blacklist ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cross-team Toutes les équipes de dev Development in progress enhancement New feature or request WIP
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants