Architecture Decision Record

Active theme: Light

← Exemples d’enregistrements de décision

Monorepo ou multirepo

Sommaire :

Résumé

Question

Notre projet consiste à développer trois grandes catégories de logiciels :

  • Interfaces graphiques (GUI) front-end
  • Services d’intergiciel (middleware)
  • Serveurs back-end

Lorsque nous développons, notre système de contrôle de version (VCS) de gestion du code source (SCM) est git.

Nous devons choisir comment utiliser git pour organiser notre code.

Le choix de plus haut niveau est d’organiser en « monorepo », en « polyrepo » ou en « hybride » :

  • Monorepo signifie que nous mettons toutes les pièces dans un seul grand dépôt
  • Polyrepo signifie que nous mettons chaque pièce dans son propre dépôt
  • Hybride signifie un mélange de monorepo et de polyrepo

Pour en savoir plus, voir https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Décision

Monorepo lorsqu’une organisation/équipe/un projet est relativement petit(e) et que l’itération rapide est une priorité plus élevée que le maintien de la stabilité.

Polyrepo lorsqu’une organisation/équipe/un projet est relativement grand(e) et que le maintien de la stabilité est une priorité plus élevée que l’itération rapide.

État

Décidé. Ouverts à un réexamen si et quand de nouveaux outils seront disponibles pour gérer les monorepos et/ou les polyrepos.

Détails

Hypothèses

Tout le code que nous développons est destiné aux offres d’une seule organisation, et non au grand public. Autrement dit, le courtier-négociant (Broker-Dealer) ne vise pas à avoir quoi que ce soit qui ressemble à des développeurs bénévoles issus du grand public.

Contraintes

Les contraintes sont bien documentées sur https://github.com/joelparkerhenderson/monorepo-vs-polyrepo

Positions

Nous avons envisagé des monorepos à la manière de Google, Facebook, etc. Nous pensons que les problèmes de mise à l’échelle d’un monorepo sont si lointains que, le moment venu, nous pourrons mettre à profit les mêmes pratiques que Google et Facebook.

Nous avons envisagé des polyrepos à la manière des projets open source Git typiques, tels que Google Android, Facebook React, etc. Nous pensons qu’ils sont le meilleur choix pour la participation du grand public (p. ex. n’importe qui dans le monde peut travailler sur le code) et pour la disponibilité individuelle (p. ex. le projet est utilisé seul, sans aucune autre pièce).

Argument

Lorsqu’une organisation/équipe/un projet est relativement petit(e), nous choisissons le monorepo, car l’itération rapide a une priorité nettement plus élevée que le maintien de la stabilité.

Lorsqu’une organisation/équipe/un projet est relativement grand(e), nous choisissons le polyrepo, car le maintien de la stabilité a une priorité nettement plus élevée que l’itération rapide.

Implications

S’il existe déjà une chaîne CI+CD, nous devrons peut-être l’ajuster pour tester plusieurs projets au sein d’un même dépôt.

La CI+CD pourrait prendre plus de temps pour un build complet d’un monorepo, car elle pourrait construire tous les projets du monorepo.

Si une organisation/équipe/un projet grandit, le monorepo connaîtra des problèmes de mise à l’échelle.

Les problèmes de mise à l’échelle du monorepo peuvent rendre de plus en plus précieuse la transition vers un polyrepo.

La transition d’un monorepo vers un polyrepo est une tâche devops importante, qui devra être planifiée, gérée et programmée.

Connexe

Décisions connexes

Nous créerons des décisions pour les outils connexes de gestion des monorepos (p. ex. Google Bazel) et des polyrepos (p. ex. Lyft Refactorator).

Exigences connexes

Nous devons développer la chaîne CI+CD pour qu’elle fonctionne bien avec git.

Artefacts connexes

Nous nous attendons à ce que l’organisation du dépôt comporte des artefacts connexes pour le provisionnement, la gestion de configuration, les tests et des domaines devops similaires.

Principes connexes

Facilement réversible. Si le monorepo ne fonctionne pas en pratique, ou si la direction n’en veut pas, il est simple de passer au polyrepo.

Obsession du client. Nous accordons de la valeur au fait de mettre le projet entre les mains des clients, et nous pensons qu’un monorepo peut nous y amener plus vite qu’un polyrepo, et aussi nous aider à itérer plus vite.

Voir grand. Google et Facebook sont de très fervents partisans des monorepos plutôt que des polyrepos, car toutes les offres principales peuvent être développées, testées et déployées de concert.

Notes

Ajoutez des notes ici.