Skip to content

🌿 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éployable
  • deploy/* - Branches de déploiement pour chaque environnement
  • feature/* - Branches temporaires pour le développement
  • hotfix/* - 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 Railway

Cré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

  1. 📝 Création de la PR - Description claire des changements
  2. 🧪 Tests automatiques - CI/CD et validation du code
  3. 👥 Code Review - Validation par au moins un membre de l'équipe
  4. ✅ Approbation - Validation finale avant merge
  5. 🔄 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 :

  1. 🔍 Validation finale - Vérifier que le code est stable
  2. 📋 Checklist - Valider tous les points de déploiement
  3. 🚀 Déclenchement - Lancer le workflow GitHub Actions
  4. 📊 Monitoring - Surveiller le processus de déploiement
  5. ✅ 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 --force

Protection des branches

Les branches critiques sont protégées :

  • main - Merge uniquement via Pull Request
  • deploy/* - 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'urgence

Validation 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


Notre workflow Git est conçu pour la stabilité et la traçabilité. Suivez ces pratiques pour un développement efficace ! 🌿

Released under the MIT License.