🌿 Git Workflow
📋 Vue d'ensemble
Notre workflow Git suit une approche trunk-based simplifiée avec des branches de déploiement dédiées. Cette stratégie garantit la stabilité du code en production tout en permettant un développement agile.
🏗️ Architecture des branches
Structure des branches
main (branche principale)
├── deploy/web (déploiement production)
├── deploy/staging/web (déploiement staging)
├── deploy/discord-bot (déploiement bot)
└── deploy/docs (déploiement documentation)Rôles des branches
main- Source de vérité, toujours déployabledeploy/*- Branches de déploiement pour chaque environnementfeature/*- Branches temporaires pour le développementhotfix/*- Branches d'urgence pour les corrections critiques
🔄 Workflow de développement
Cycle de développement standard
1. Création de feature branch
↓
2. Développement et tests
↓
3. Pull Request vers main
↓
4. Code Review et validation
↓
5. Merge dans main
↓
6. Déclenchement manuel du déploiement
↓
7. Mise à jour des branches de déploiement
↓
8. Déploiement automatique sur RailwayCréation d'une feature branch
bash
# Se placer sur la branche main
git checkout main
git pull origin main
# Créer et basculer sur une nouvelle feature branch
git checkout -b feature/nouvelle-fonctionnalite
# Développer et commiter
git add .
git commit -m "feat: ajouter nouvelle fonctionnalité
- Implémentation de la fonctionnalité X
- Tests unitaires ajoutés
- Documentation mise à jour
Closes #123"Conventions de commit
Nous utilisons le Conventional Commits pour une traçabilité claire :
bash
# Types de commits
feat: nouvelle fonctionnalité
fix: correction de bug
docs: documentation
style: formatage du code
refactor: refactoring
test: ajout de tests
chore: tâches de maintenance
# Exemples
git commit -m "feat(auth): ajouter authentification OAuth2"
git commit -m "fix(api): corriger la validation des données"
git commit -m "docs(readme): mettre à jour la documentation"
git commit -m "test(events): ajouter tests pour EventService"🔍 Pull Request et Code Review
Processus de validation
- 📝 Création de la PR - Description claire des changements
- 🧪 Tests automatiques - CI/CD et validation du code
- 👥 Code Review - Validation par au moins un membre de l'équipe
- ✅ Approbation - Validation finale avant merge
- 🔄 Merge - Intégration dans la branche main
Template de Pull Request
markdown
## 📋 Description
Description claire de la fonctionnalité ou correction apportée.
## 🔍 Type de changement
- [ ] Bug fix (correction de bug)
- [ ] New feature (nouvelle fonctionnalité)
- [ ] Breaking change (changement cassant)
- [ ] Documentation update (mise à jour documentation)
## 🧪 Tests
- [ ] Tests unitaires ajoutés/mis à jour
- [ ] Tests d'intégration passent
- [ ] Tests manuels effectués
## 📚 Documentation
- [ ] Documentation mise à jour
- [ ] Changelog mis à jour
- [ ] README mis à jour si nécessaire
## 🔗 Issues liées
Closes #123
Relates to #456
## 📸 Captures d'écran
Si applicable, ajouter des captures d'écran des changements.
## ✅ Checklist
- [ ] Code linté et formaté
- [ ] Tests passent
- [ ] Documentation mise à jour
- [ ] Pas de secrets dans le code
- [ ] Variables d'environnement documentées🚀 Déclenchement du déploiement
Processus manuel
⚠️ IMPORTANT : Le déploiement est MANUEL, pas automatique !
Après le merge dans main :
- 🔍 Validation finale - Vérifier que le code est stable
- 📋 Checklist - Valider tous les points de déploiement
- 🚀 Déclenchement - Lancer le workflow GitHub Actions
- 📊 Monitoring - Surveiller le processus de déploiement
- ✅ Confirmation - Valider la mise en production
Workflow de déploiement
yaml
# .github/workflows/deploy.yml
name: Deploy to Production
on:
workflow_dispatch: # Déclenchement manuel uniquement
inputs:
environment:
description: 'Environment to deploy to'
required: true
default: 'production'
type: choice
options:
- production
- staging
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build application
run: npm run build
- name: Deploy to Railway
run: |
# Déploiement selon l'environnement
if [ "${{ github.event.inputs.environment }}" = "production" ]; then
# Mise à jour de la branche deploy/web
git checkout -b deploy/web
git push origin deploy/web --force
else
# Mise à jour de la branche deploy/staging/web
git checkout -b deploy/staging/web
git push origin deploy/staging/web --force
fi🔄 Gestion des branches de déploiement
Synchronisation automatique
Après chaque déploiement réussi :
bash
# Mise à jour de la branche de déploiement
git checkout deploy/web
git reset --hard main
git push origin deploy/web --force
# Mise à jour de la branche staging si nécessaire
git checkout deploy/staging/web
git reset --hard main
git push origin deploy/staging/web --forceProtection des branches
Les branches critiques sont protégées :
main- Merge uniquement via Pull Requestdeploy/*- Pas de push direct, mise à jour automatique- Validation obligatoire - Tests et code review requis
- Historique préservé - Pas de force push sur main
🚨 Gestion des hotfixes
Processus d'urgence
En cas de bug critique en production :
bash
# Créer une branche hotfix depuis main
git checkout main
git pull origin main
git checkout -b hotfix/correction-critique
# Corriger le problème
# ... corrections ...
# Commit et push
git add .
git commit -m "fix: correction critique du bug X"
git push origin hotfix/correction-critique
# Créer une PR d'urgence
# Code review accéléré
# Merge immédiat si validation
# Déploiement d'urgenceValidation accélérée
Pour les hotfixes critiques :
- ⏰ Code review accéléré - Validation en priorité
- 🧪 Tests essentiels - Tests critiques obligatoires
- 🚀 Déploiement immédiat - Mise en production rapide
- 📋 Documentation post-mortem - Analyse après déploiement
📊 Monitoring et traçabilité
Historique des déploiements
Chaque déploiement est tracé :
typescript
// Interface de suivi des déploiements
interface Deployment {
id: string;
environment: 'production' | 'staging' | 'development';
branch: string;
commit: string;
timestamp: Date;
status: 'success' | 'failed' | 'in-progress';
duration: number;
triggeredBy: string;
changes: string[];
rollback?: {
reason: string;
timestamp: Date;
previousCommit: string;
};
}Métriques de qualité
- 📈 Fréquence des déploiements - Nombre de déploiements par semaine
- ⏱️ Temps de déploiement - Durée moyenne des déploiements
- 📊 Taux de succès - Pourcentage de déploiements réussis
- 🔄 Temps de rollback - Durée moyenne des rollbacks
🔧 Outils et intégrations
GitHub Actions
- 🔄 CI/CD - Tests et validation automatiques
- 🚀 Déploiement - Workflows de déploiement
- 🔒 Sécurité - Validation des permissions
- 📋 Audit trail - Traçabilité complète
Railway
- 🚂 Déploiement automatique depuis les branches de déploiement
- 📊 Monitoring - Métriques et logs en temps réel
- 🔄 Scaling - Adaptation automatique à la charge
- 🔐 Variables d'environnement - Configuration sécurisée
Intégrations
- 📱 Slack - Notifications de déploiement
- 📧 Email - Alertes en cas de problème
- 📊 Sentry - Monitoring des erreurs en production
- 🔍 Logs - Centralisation des logs d'application
🎯 Bonnes pratiques
Do's
- ✅ Toujours créer des branches pour les nouvelles fonctionnalités
- ✅ Écrire des commits clairs avec Conventional Commits
- ✅ Faire des Pull Requests pour toute modification
- ✅ Tester avant déploiement - Validation complète obligatoire
- ✅ Documenter les changements - Changelog et release notes
Don'ts
- ❌ Commiter directement sur main - Toujours passer par des branches
- ❌ Ignorer les tests - Validation obligatoire avant merge
- ❌ Oublier la documentation - Changelog obligatoire
- ❌ Déployer sans validation - Processus manuel obligatoire
🚀 Formation et documentation
Ressources d'apprentissage
- 📚 Git basics - Commandes essentielles
- 🔍 Code review - Bonnes pratiques de validation
- 🚀 Déploiement - Processus et procédures
- 🚨 Urgences - Gestion des situations critiques
Sessions de formation
- 👥 Formation initiale - Apprentissage du workflow
- 🔄 Pratiques - Exercices de déploiement
- 📊 Monitoring - Interprétation des métriques
- 🚨 Gestion d'urgence - Procédures de rollback
🚀 Prochaines étapes
- Déploiement - Vue d'ensemble de la stratégie
- Railway - Plateforme de déploiement
- Deployment Overview - Processus complet
- Architecture - Structure technique du projet
- Backend - PayloadCMS et services
Notre workflow Git est conçu pour la stabilité et la traçabilité. Suivez ces pratiques pour un développement efficace ! 🌿
