Cette page détaille le workflow utilisé sur Zeste de Savoir. Elle est là surtout pour satisfaire votre curiosité, à moins d'avoir les droits de faire une Mise En Production (MEP). La page de contribution devrait répondre à vos questions quant au processus de développement.
Ce workflow est très fortement basé sur le Git flow.
L'idée générale est très simple :
- Le développement se fait sur la branche
dev
- La branche
prod
contient la version en production - Lorsqu'on juge qu'on a assez de matière pour un nouveau déploiement, on crée une branche dédiée (par exemple
release-v1.7
), qui est testée en pré-production et corrigée sur cette branche - En cas de bug ultra-urgent à corriger en production, on crée une branche spéciale
- Les arrivées fonctionnalités et corrections de gros bugs se font via des Pull Requests (PR) depuis des forks.
- Ces PR sont unitaires. Aucune PR qui corrige plusieurs problèmes ou apporte plusieurs fonctionnalité ne sera accepté ; la règle est : une fonctionnalité ou une correction = une PR.
- Ces PR sont mergées dans la branche
dev
(appeléedevelop
dans le git flow standard), après une Quality Assurance (QA) légère. - La branche
prod
(appeléemaster
dans le git flow standard) contient exclusivement le code en production, pas la peine d'essayer de faire le moindre commit dessus ! - Les branches du dépôt principal (
dev
,prod
et la branche de release) ne devraient contenir que des merge de PR, aucun commit direct.
Où peut-on trouver les détails pratiques ?
Tous ces détails sont dans la page de contribution. On y trouve entre autres les recommendations en terme de PR ou de messages de commits.
Qu'est-ce qu'une "QA légère" ?
C'est s'assurer que le code fait ce qu'il devrait sans passer des heures à re-tester l'intégralité du site. Concrètement, cela implique :
- Une revue de code
- La vérification que des tests correspondants à la fonctionnalité ou à la correction sont présents, cohérents et passent
- Des tests manuels dans le cas de fonctionnalités ou corrections complexes et/ou critiques (au cas par cas)
- Quand on a assez de nouveautés dans
dev
(mais pas trop), on décide de faire une release. L'idée est de pouvoir vérifier et corriger les problèmes de cette release rapidement, en moins de 2 semaines entre le lancement de la release et sa MEP.- Création d'une nouvelle branche de release du nom de la version (par exemple
release-v1.7
) - Déploiement de cette branche sur l'environnement de pré-production, avec un dump de données de production
- Tests les plus complets possibles sur ce nouvel environnement
- Corrections éventuelles sur cette branche de release. Les corrections ne sont pas remontées sur
dev
au fur et à mesure. Cf ci-dessous pour les détails.
- Création d'une nouvelle branche de release du nom de la version (par exemple
- Lorsqu'on a bien testé cette branche, on la met en production :
- Merge de la branche de release dans
dev
- Merge de la branche de release dans
prod
- Tag avec la nouvelle version
- Mise en production sur le serveur
- Suppression de la branche de release, devenue inutile
- Merge de la branche de release dans
Le temps maximum entre la création d'une branche de release et sa mise en production est de deux semaines. Au-delà on considère qu'il y a trop de problèmes et qu'ils risquent de bloquer le développement :
- Merge des corrections de la branche de release dans
dev
- Pas de mise en production
- Suppression de la branche de release, devenue inutile
Vous l'avez lu : les corrections de master
ne sont pas remontées sur dev
au fur et à mesure. La raison est que ça prends du temps, de l'énergie et que ça fait beaucoup de merges croisés. Donc toutes les corrections sont remontées en même temps lors de la mise en production. Conséquences :
- Si vous bossez sur
dev
pendant qu'une release est en cours, pas la peine de corriger un bug déjà corrigé sur la release : la PR serait refusée (pour cause de doublon). - Si un gros problème est détecté sur la release et qu'il est correctible en un temps raisonnable :
- Il est corrigé sur la branche de release.
- Les merges de PR sur
dev
qui impliquent un risque même vague de conflit sont bloqués. - S'il y a quand même un conflit (à cause d'une PR mergée sur
dev
avant la détection du problème), la personne qui règle le problème fournit 2 correctifs : un pour la branche de release et un pour la branche de dedev
.
Ceci fonctionne bien si les développements sont de bonne qualité, donc avec peu de correctifs sur la branche de release (idéalement aucun !)... les codes approximatifs et non testés seront donc refusés sans la moindre pitié !
- MEP : Mise En Production
- PR : Pull Request
- QA : Quality Assurance