Workflow Git & MEP
Un ticket = une branche = deux MR (
main+staging). Les MEP regroupent plusieurs tickets mergés dansmain.
Nomenclature
Branches
- Sous-projets liés à un ticket Jira (
dema1n,inspire-v2,article1-connect) :{PROJET_JIRA}-{description-courte-en-kebab-case}(ex:INSP-688-email-profil-ee-cache-car-non-maj,DEM-1019-ajouter-bouton-de-renvoi-des-mails-de-mi) - Ce repo racine (infra, docs, config globale, sans ticket) :
{type}/{description-courte}, types utilisés :feature,code-qual
Commits
Convention conventional commits et gitmoji :
{type}(optional scope): {EMOJI} {description}. Scope = module/fonctionnalité concernée.
Exemple : fix(Migrations) 🐛 Remove api_schema from mig # En Français ou en Anglais, pas de consigne
Recommandé si VSCode : cette extension
Scopes inspire-v2 ici
Développement d'un ticket
- Nouvelle branche créée depuis
main, nommée d'après le ticket Jira - Dev en local, commits, push
- Si j'ai créé des migrations, je MAJ le fichier
docs/db-changelog.md - Ouverture de deux MR depuis la branche :
- Nomenclature de nommage
{PROJET_JIRA}-US {DESCRIPTION_FEATURE}(ex: INSP-688 ✨ [EE Incomplets] Envoi d'email aux EE quand leur profil passe en 'caché') - Une vers
main, nom de la MR préfixé de[MAIN] - Une vers
staging - Lien vers la MR
stagingenvoyé sur Slack - Retours de review en commentaires directement sur la MR GitLab, correctifs poussés sur la branche
- Merge de la MR
staging→ déploiement automatique en environnement staging - Ticket passé au statut Jira "To test in demo"
- Recette fonctionnelle par les PO
- Une fois la recette validée, merge de la MR
[MAIN]versmain
MEP (mise en production)
Une MEP regroupe tous les tickets mergés dans main depuis la dernière mise en production.
- Définition de la date de MEP avec les PO (créneau dans l'agenda)
- Création d'une MR
main→prod, nommée avec le numéro de version (nomenclature semver) - Description de la MR : compte-rendu (CR) des tickets inclus, généré par une task Claude (/release-notes) à partir des messages de commit
- Relecture de la MR si possible (vérifier notamment les sujets conflits, migrations, infra, config globale)
- Bien vérifier que le fichier
docs/db-changelog.mdest à jour par rapport aux migrations ajoutées - Merge de la MR
- Création d'un tag git avec le numéro de version → déclenche le déploiement automatique en production
- Création d'une release GitLab avec le numéro de version, release notes identiques au CR de la MR
- Envoi du lien de la release note sur le slack concerné (#dema1n-dev ou #inspire-v2-dev)
- Merge back :
prod→main, puismain→staging
Point d’attention : rabbitmq-defs.json
Si la MEP (ou un ticket inclus) modifie article1-connect/rabbitmq-defs.json (queues, exchanges, bindings) :
- le tag / déploiement applicatif ne réplique pas ces defs sur le RabbitMQ K8s de prod ;
- après le déploiement (ou en même temps que la MEP), appliquer manuellement les nouveaux bindings/queues sur le Management UI RabbitMQ prod (ou réimporter les defs sur le cluster) ;
- le mentionner dans le CR de MEP / release notes.
Détail : rabbitmq-definitions.md.
Annexes
Gestion des conflits
TLDR : en cas de conflit, on préfère toujours (1) un rebase de la branche source à un merge de la branche cible, (2) une résolution en local → push force sur la branche source.
Cas typique : feature/add-conflicts (basée sur main) a un conflit sur staging. Options :
1. ✅ À faire dans tous les cas en premier lieu :
- Vérifier si on a pas des tickets qu'on peut merger sur main
- Rebase sur
origin/main— suffit parfois
2. ✅ Méthode recommandée: Nouvelle branche rebased sur staging
⚠️ Attention à ne pas oublier de répercuter les changements de la branche staging-based sur la branche main-based
Si le rebase sur main n'a pas pas suffi à résoudre les conflits
git checkout -b feature/add-conflicts-stgit pull --rebase origin staging
Puis
- Résolution de conflits
- Push + création de MR de
feature/add-conflicts-stversstaging - Fermer la MR de
feature/add-conflitctsversstaging
3. ⚠️ Méthode alternative si conflits trop difficiles à résoudre: Nouvelle branche depuis staging + cherry-pick
⚠️ Attention à ne pas oublier de répercuter les changements de la branche staging-based sur la branche main-based
git loget noter tous les hash de commits dans l'ordregit checkout origin/staging && git pullgit checkout -b feature/add-conflicts-st-
git cherry-pick ${HASH}(un par un) -
Push + création de MR de
feature/add-conflicts-stversstaging - Fermer la MR de
feature/add-conflitctsversstaging
4. ⚠️ Méthode à l'arrache, plus rapide et plus risquée pas recommandée : Rebase la branche sur staging
⚠️ Attention à ne pas oublier de rebase la branche sur main juste après avoir merge sur staging
⚠️ Risque non négligeable de récupérer des bouts de staging et de les mettre sur main
git pull --rebase origin staging- Push -f + création de MR de
feature/add-conflicts-stversstaging - Merge
git pull --rebase origin main-
- Push -f + création de MR de
feature/add-conflicts-stversprod
- Push -f + création de MR de
-
Push + création de MR de
feature/add-conflicts-stversstaging - Merger la MR de
feature/add-conflitctsversstaging
5. ❌ [Non recommandé] Merge staging dans la branche de travail
- L'avantage c'est qu'on résout les conflits en une fois, mais on perd les bénéfice rerere
- après il faudra push staging, ce qui n'est pas une bonne pratique, surtout si nous sommes plusieurs en parallèle
- il nous faudra également gérer la situation sur main
Gestion des conflits merge back main vers staging
git checkout main && git pullgit checkout staging && git pullgit merge main- Resolve conflit
git commitgit checkout feature/merge-main-into-staging
Puis
* Push + création de MR de feature/merge-main-into-staging vers staging
* Merger la MR de feature/merge-main-into-staging vers staging (normalement merge automatiquement la MR back de main vers staging)
Ajout des changements
git add -p obligatoire pour relire les changements avant de les stager. git add . est à bannir.
Nommage des MR
([MAIN] - ) [{Domaine métier}] - {User story}
Pas de règle stricte, mais mentionner si possible : numéro de ticket, bloc fonctionnel concerné, URL du ticket Jira en description.
Exemple : INSP-559 - Sur la page Profil EE - L'ID de la formation est affichée au lieu du nom