Skip to content

Latest commit

 

History

History
115 lines (94 loc) · 8.88 KB

CONTRIBUTING.md

File metadata and controls

115 lines (94 loc) · 8.88 KB

"Mails par Archifiltre" est un projet open-source auquel vous pouvez contribuer. Vous retrouverez ci-après les différentes règles et nomenclatures suivies dans ce dépôt.

Git

Branches et flux Git

Le projet respecte une version allégée de "GitFlow".

  • 🧑‍💻 La branche de développement est dev
    • Cette branche est définie comme par défaut dans github
    • Cette branche est protégée contre les commits venants d'utilisateurs non administrateurs
  • 🏷️ La branche de production en cours est main
    • Cette branche est protégée contre les commits venants d'utilisateurs non administrateurs
  • ✨ Les branches de fonctionnalités doivent commencer par le préfixe feature/ ou feat/
    • Elles doivent partir de la branche dev
    • Elles doivent être fusionnées dans la branche dev
  • 🐛 Les branches de correction de bugs doivent commencer par le préfixe hotfix/ ou fix/
    • Quand un bug est détecté dans dev
      • Elles doivent partir de la branche dev
      • Elle doivent être fusionnée uniquement dans la branche dev
    • Quand un bug est détecté dans main
      • Elles doivent partir de la branche main
      • Elle doivent aussi avoir leurs commits (liés au bug) de picoré (🍒 "cherry-pick") vers la branche dev
        • Un rebasage ("rebase") est déconseillé car picorer a l'avantage de conserver l'historique des commits sur la branche d'arrivée
  • 👷 Les branches liées à l'intégration continue doivent commencer par le préfixe ci/ ou ci-*/
  • Les autres préfixes seront interprétés de manière standard (par rapport à l'exécution de la CI)
  • Les autres noms de branches (sans préfixe) ne sont pas gérés
  • Les multiples préfixes ne considérerons que le premier préfixe vis-à-vis des règles précédentes (ex: feature/icicle/refacto => ok feature ; icicle/feature/refacto => ko)
    • Exception faite pour les branches */e2e/* (ex: feature/e2e/icicle, hotfix/e2e/bug-chargement-empreinte) qui adoptent cette nomenclature afin de déclencher les tests e2e en plus dans la CI
  • 🤖 Les branches préfixées renovate/ sont réservées et ne doivent pas être utilisées

Représentation imagée : Mails par Archifiltre presque-"Git-flow"

Commit

La convention de commit adoptée par le projet est Conventional Commits MAIS cette convention n'est imposée que sur les branches principales dev et main.
En effet, les pull requests étant "squash", seul importe le commit de merge en fin de pull request.
Gitm😍 ji peut donc par exemple être utilisé à l'intérieur des branches si besoin.

Pull request

Pour chaque fonctionnalité apportée ou bug corrigé, une pull request doit être faite.
Il faut obligatoirement lier une pull request à un ticket, sans ça, elle n'a aucun intérêt.
Vous pouvez vous aider du template prévu à cet effet. Il est important de bien respecter la convention Semantic Pull Request pour le titre des pull requests.
Comme dit plus haut, le format des commits sera ignoré au profit d'un squash de merge à la cloture de la pull request.

Produit

Tickets et fonctionnalités

Les fonctionnalités suivent le processus de développement suivant :

  • Une idée arrive dans le tableau des idées (accès interne)
  • Cette idée est évaluée, travaillée, puis transformée en ticket pour le backlog global (accès interne) avec le label "archifiltre-mails"
  • Ce ticket est une nouvelle fois travaillé pour être soit transformé en EPIC soit rattaché à une EPIC existante
    • Si il devient une EPIC, il acquiert le label "EPIC" et reste dans le même tableau
    • Si il est rattaché à une EPIC, il est raffiné puis transféré vers le tableau de sprint de Mails (accès public)

Un ticket est toujours estimé avec une valeur business et une complexité, mesurés avec la technique du T-shirt sizing (S, M, L, XL). Qualification des tickets

Un ticket est autant que possible accompagné de critères d'acceptance définis entre la qualité et la définition du besoin. Ces critères sont la représentation des tests d'intégration et/ou E2E qui seront créés pour valider la fonctionnalité associée.

Un ticket est considéré comme terminé (DoD) lorsque les conditions suivantes sont remplies :

  • Les critères d'acceptances ont été respectés
  • Tous les tests d'intégration passent au vert ✅
  • Si la valeur business est XL (ou L si besoin), tous les tests E2E passent au vert ✅
  • En respect de l'engagement de sécurité, 1 review obligatoire à partir de la complexité M

Intégration continue et tests

Trois types de tests sont mis en place dans l'application : composants, intégration, et end-to-end (E2E). Les tests de composants sont comme des tests unitaires, à écrire autant que possible pour limiter au maximum les potentiels régressions graphiques.
Les tests d'intégration peuvent être liés aux critères d'acceptances (ou à une partie) afin de tester une fonctionnalité précise dans son ensemble.
Les tests E2E sont fortement et souvent liés aux critères d'acceptances en plus d'être "scénarisés" pour être ensuite développés et exécutés pendant les phases de recette.

Bots

Régulièrement, des bots de contrôle passent sur le code pour garantir le maintiens des dépendances directes à jour, ainsi que l'application de leurs derniers patch de sécurité (Dependabot 🤖).

CI: QA + tests classiques

Les tests se situent dans le dossier ./tests/ et peuvent être exécutés avec la commande yarn test.
Automatiquement, les pull requests dont les branches sont à destination de dev et main sont contrôlées sur leur qualité via CodeQL ainsi que sur notre CI interne.
Notre CI contrôlera de son côté l'uniformité du code (lint), compilera le code pour vérifier son intégrité, et lancera les tests "classiques" (composants et intégration).

E2E

Les tests E2E se situent dans le dossier ./tests/e2e/ et peuvent être exécutés avec la commande yarn test:e2e.
Attention toutefois à bien installer les prérequis en amont. (cf README).

Les tests e2e s'exécuteront automatiquement dans la CI suivant l'une de ces conditions :

  • toutes les nuits, avant un jour de semaine travaillé, à 1h du matin sur la branche dev
  • à chaque pull request en direction de la branche main
  • à chaque push sur les branches ci-e2e/* ou */e2e/*

Les tests e2e seront automatiquement lancés sur les trois systèmes d'exploitation ciblés, à savoir Linux Ubuntu, Windows, et MacOS.
Il est donc important dans le cas de code spécifique à l'un des OS de bien définir une non exécution des tests pour les autres.

Déploiement continu + sortie de version

Comme l'ensemble des produits Archifiltre, Mails est déployé en continue en fonction des phases de développement.
Chaque nuit à 1h du matin, une version de développement next sort si du code a été poussé dans la journée sur la branche dev. Cette version est itérative, et compatible avec le système de mise à jour automatique.
Consultez la page de release pour plus d'informations.

Code et documentation

Avant de contribuer au projet, il est fortement conseillé d'installer et désinstaller les extensions recommandées de VSCode. (listées ici). Dans la majeure partie des cas, ces extensions ont été configurées pour offrir une expérience développeur adéquat.

Lors des développements, il est obligatoire de respecter les conventions de code dictées par l'outils de lint (lançable avec la commande yarn lint).

Enfin, dans un esprit d'amélioration continue, pour chaque contribution, il est essentiel d'apporter au maximum de la documentation afin de donner du contexte sous la forme de commentaires sensés dans le code, et si besoin, de faire évoluer la documentation existante (par exemple lors de l'ajout de nouveaux modules et services dans dans la page associée le cas échéant).