Conventional & Atomic commits

by Joujou

08/10/2025

🚀

Pourquoi changer ? 🤔

by Joujou

- 08/10/2025

Pourquoi changer ? 🤔

Ce qu'on a aujourd'hui

  • Commits pas clairs et trop gros
  • Historique illisible
  • Reverts impossibles
  • Pas de cohérence
  • Aucune structure
75d0bd4636 &1243 - fix: review njourdan
4c47d78dda &1243 - fix: review
076c43dee2 &1262 - #3287 - review front - ajustements
cb7dfc0b3f oups phpcs desoleeeee

by Joujou

- 08/10/2025

Pourquoi changer ? 🤔

Ce qu'on veut obtenir

  • Chaque commit a un but clair et autonome
  • Lecture rapide, homogène et automatisable
  • Historique propre et filtrable
  • Reverts sûrs et ciblés
43c89cd feat(review): add AI reply generation
a2b4c87 fix(review): prevent duplicate reply submissions
92f7b10 refactor(user): extract ACL logic into dedicated service

by Joujou

- 08/10/2025

🚀 L’objectif : des commits utiles pour les humains et pour Git.

Pourquoi changer ? 🤔

Ce qu'on veut obtenir

commit 43c89c feat(review): add AI reply generation    
    Le but de cette feature est d'ajouter la fonctionnalité de génération de réponse grâce à l'IA.
    
    - Ajout d'un service pour générer une réponse en passant une review en paramètre.
    - Ajout des traductions.
    - Ajout d'un bouton sur la page d'un avis pour générer la réponse.
    
    Le service de génération fait un appel à ChatGPT en passant au format CSV :
    l'auteur, la note, la note maximal, l'enseigne, le magasin et le store qualifier.
    La réponse demandée à ChatGPT est une chaine de caractère courte avec au maximum 380 caractères.
    
    Il est possible de que le prompt ne soit pas optimal.

    Epic: &1311
    Closes: #3312

by Joujou

- 08/10/2025

Deux principes

by Joujou

- 08/10/2025

☢️ Commit atomique

📓Conventional Commits

by Joujou

- 08/10/2025

☢️ Commit atomique

by Joujou

- 08/10/2025

☢️ Commit atomique

un commit = une intention unique et complète

  • Ne doit concerner qu'un seul sujet (correction d'un bug, fonctionnalité, etc.)
  • Ne doit pas rendre le projet incohérent (en échouant aux tests, en rendant la compilation impossible, etc.)
  • Dois pouvoir être rollback sans casser le projet

💡 Atomique ≠ petitil peut toucher plusieurs fichiers si tout sert une même intention

by Joujou

- 08/10/2025

☢️ Commit atomique

18a45dd Fixed type
d2f3dfb Fixed bug store
c4f6b47 Added store endpoint
438d4ed Fixed bug endpoint
42f67ef Removed comments
9ceb668 Added endpoints
917h8jl Added comments

❌ Pas atomiques

On comprend rien

by Joujou

- 08/10/2025

☢️ Commit atomique

18a45dd Fixed type
d2f3dfb Fixed bug store
c4f6b47 Added store endpoint
438d4ed Fixed bug endpoint
42f67ef Removed comments
9ceb668 Added endpoints
917h8jl Added comments

❌ Pas atomiques

917h8jl
9ceb668
42f67ef
438d4ed
c4f6b47
d3f3dfb
18a45dd
git bisect

by Joujou

- 08/10/2025

☢️ Commit atomique

9ceb668 Added store exporter endpoint
917h8jl Added brand exporter endpont

✅ Atomiques

Compréhensible et on peut rollback facilement

by Joujou

- 08/10/2025

☢️ Commit atomique

18a45dd Fixed review section on Store Locator
d2f3dfb Added MakerBundle
c4f6b47 Replaced oldSoundRabbitMQ by Messenger
438d4ed Added AI reply generation
42f67ef Fixed authentication form
9ceb668 Added store exporter endpoint
917h8jl Added brand exporter endpoint

✅ Atomiques

917h8jl
9ceb668
42f67ef
438d4ed
c4f6b47
d3f3dfb
18a45dd
git bisect

by Joujou

- 08/10/2025

☢️ Commit atomique

Les questions à se poser

Quelle est l'intention de mon commit ?

Est-ce qu'il correspond à une unité logique ?

Casse-t-il le projet s'il est isolé ?

Est-il possible de revert ce changement seul ?

by Joujou

- 08/10/2025

☢️ Commit atomique

Exemple

  • Migration Doctrine
  • Ajout d'une action dans ReviewController
  • Ajout d'un service AIReplyGenerator
  • Ajout des traductions
  • Modification du formulaire de réponse à un avis

une seule unité logique = un seul commit

by Joujou

- 08/10/2025

☢️ Commit atomique

un commit = un changement qu'on peut lire, tester et revert seul

by Joujou

- 08/10/2025

📓Conventional Commits

by Joujou

- 08/10/2025

📓Conventional Commits

🎯 Objectif

  • Lisible, compréhensible et cohérent
  • Contrat entre le developpement et le répositorie
  • Automatisable (changelogs, CI, versionning, etc.)

by Joujou

- 08/10/2025

📓Conventional Commits

📑 Structure

<type>(<scope>): <titre>

<body>

Epic: &<numéro>
Closes: #<numéro>

Type : Quoi ?

Scope : Où ?

Body : Pourquoi ?

Footer : Epic / tickets

by Joujou

- 08/10/2025

📓Conventional Commits

📑 Structure

Type Description Exemple
feat Nouvelle fonctionnalité feat(review): add reply system
fix Correction de bug fix(auth): handle null password
docs Documentation uniquement docs(api): add usage examples
style Formatage sans logique métier style(css): fix spacing in header
refactor  Amélioration du code sans changement fonctionnel refactor(service): simplify email validation
test Ajout ou modif de tests test(review): add reply service tests
chore Tâches diverses (config, dépendances, CI) chore(ci): update node version
perf  Amélioration des performances perf(cache): optimize query loading
wip  Travail en cours (toléré sur branches perso uniquement) wip(review): initial form setup

Types

by Joujou

- 08/10/2025

📓Conventional Commits

📑 Structure

Scopes

  • Ajoute du contexte additionnel au type
  • Correspond au domaine / module / etc.

Exemple : auth, review, store, api, etc.

by Joujou

- 08/10/2025

📓Conventional Commits

📑 Structure

Body

  • Explications des changements :
    • Quoi ?
    • Où ?
    • Comment ?
    • Pourquoi ?
  • Contexte

💡En lisant le body, on doit comprendre ce que fait le commit et comment

by Joujou

- 08/10/2025

📓Conventional Commits

📑 Structure

Footer

  • Liens vers gitlab (tickets, epics, etc.)
  • Trigger les actions gitlab (closes, etc.)
  • Mentionne s'il y a un BREAKING CHANGE

by Joujou

- 08/10/2025

📓Conventional Commits

Exemple

commit 43c89c feat(review): add AI reply generation    
    Le but de cette feature est d'ajouter la fonctionnalité de génération de réponse grâce à l'IA.
    
    - Ajout d'un service pour générer une réponse en passant une review en paramètre.
    - Ajout des traductions.
    - Ajout d'un bouton sur la page d'un avis pour générer la réponse.
    
    Le service de génération fait un appel à ChatGPT en passant au format CSV :
    l'auteur, la note, la note maximal, l'enseigne, le magasin et le store qualifier.
    La réponse demandée à ChatGPT est une chaine de caractère courte avec au maximum 380 caractères.
    
    Il est possible de que le prompt ne soit pas optimal.

    Epic: &1311
    Closes: #3312

by Joujou

- 08/10/2025

Conclusion

🧠 À retenir

  • Commits atomiquesune unité logique par commit
  • Conventional commitsformat clair et traçable

🚀 Bénéfices

  • Historique lisible et exploitable
  • Revert et review plus simples
  • Cohérence d'équipe et meilleure qualité
  • Automatisation CI/CD

by Joujou

- 08/10/2025

Conclusion

🛠️ Mise en place

  • Ajout d'une documentation dans le projet ✅
  • Période de rodage 📅
  • Installation de Husky + Commitlint ⚙️
  • Mise en place de la CI ⚙️

💬 De bons commits racontent notre travail, ils sont le lien entre le code, le métier et l’équipe.

by Joujou

- 08/10/2025

💬 Questions ?

Made with Slides.com