🚀 CI/CD et Déploiement

Automatisation complète du processus de développement et de publication de xsshend

🎯 Vue d’ensemble

xsshend dispose d’un pipeline CI/CD complet qui automatise :

  • âś… Tests et vĂ©rifications de qualitĂ©
  • 📦 Build multi-plateforme
  • 🚀 Publication automatique sur crates.io
  • đź“‹ CrĂ©ation de releases GitHub avec binaires
  • 🔍 VĂ©rification de cohĂ©rence des versions

🛠️ Workflows GitHub Actions

1. CI (Intégration Continue)

Fichier : .github/workflows/ci.yml
Déclenché sur : Push sur main/develop, PRs vers main

Jobs :

  • test : Tests unitaires + intĂ©gration
  • check : VĂ©rification syntaxe Cargo
  • security : Audit de sĂ©curitĂ© avec cargo-audit
  • docs : Build documentation + tests exemples

2. Release (Publication)

Fichier : .github/workflows/release.yml
Déclenché sur : Push de tags v* (ex: v0.2.3)

Étapes automatiques :

  1. Vérifications pré-release : Cohérence versions
  2. Tests complets : Validation avant publication
  3. Build multi-plateforme : 5 targets simultanés
  4. Publication crates.io : Release officielle
  5. Release GitHub : Création avec binaires
  6. Nettoyage : Suppression artefacts temporaires

3. Development (Développement)

Fichier : .github/workflows/development.yml
Déclenché sur : Push sur develop, feature/**, PRs

Jobs :

  • quick-check : VĂ©rifications rapides (format, clippy, compilation)
  • test : Tests de dĂ©veloppement
  • version-check : CohĂ©rence versions pour PRs release

🛡️ Vérifications de Cohérence

ContrĂ´les automatiques

  • 🔍 Version Tag ↔ Cargo.toml ↔ main.rs : IdentitĂ© obligatoire
  • 🔍 crates.io : Version ne doit pas exister
  • 🔍 GitHub Release : Tag ne doit pas exister
  • 🔍 Tests : 100% de rĂ©ussite requis

En cas d’incohérence

  • ❌ ArrĂŞt automatique avec erreurs dĂ©taillĂ©es
  • đź”§ Instructions de correction automatiques
  • 📊 RĂ©sumĂ© visuel dans l’interface GitHub

📦 Build Multi-Plateforme

Plateforme Target Binaire Archive
Linux x86_64 x86_64-unknown-linux-gnu xsshend .tar.gz
Linux musl x86_64-unknown-linux-musl xsshend .tar.gz
Windows x86_64 x86_64-pc-windows-msvc xsshend.exe .zip
macOS x86_64 x86_64-apple-darwin xsshend .tar.gz
macOS ARM64 aarch64-apple-darwin xsshend .tar.gz

🚀 Processus de Release

Option 1 : Script automatisé (Recommandé)

# Préparer une nouvelle release
./scripts/prepare-release.sh 0.2.3

# Avec options
./scripts/prepare-release.sh 0.2.3 --dry-run    # Simulation
./scripts/prepare-release.sh 0.2.3 --push       # Push automatique
./scripts/prepare-release.sh 0.2.3 --force      # Ignorer vérifications

Option 2 : Processus manuel

  1. Mettre Ă  jour les versions
    sed -i 's/version = ".*"/version = "0.2.3"/' Cargo.toml
    sed -i 's/version = ".*"/version = "0.2.3"/' src/main.rs
    
  2. Tester et valider
    cargo test
    cargo build --release
    
  3. Créer commit et tag
    git add Cargo.toml src/main.rs
    git commit -m "chore: bump version to 0.2.3"
    git tag -a v0.2.3 -m "Release v0.2.3"
    
  4. Pousser
    git push origin main
    git push origin v0.2.3
    

Flux automatisé

graph TD
    A[Développement] --> B[Préparer Release]
    B --> C[./scripts/prepare-release.sh 0.2.3]
    C --> D[Push Tag]
    D --> E[GitHub Actions]
    E --> F[Vérifications Pré-Release]
    F --> G{Cohérent?}
    G -->|❌| H[Arrêt + Erreurs]
    G -->|âś…| I[Tests]
    I --> J[Build Multi-Plateforme]
    J --> K[Publish crates.io]
    K --> L[Create GitHub Release]
    L --> M[🎉 Release Publiée]

⚙️ Configuration

Secrets GitHub requis

# Dans Settings > Secrets and variables > Actions
CARGO_REGISTRY_TOKEN = "votre_token_crates_io"

Obtenir le token :

  1. Se connecter sur crates.io
  2. Aller dans Account Settings
  3. Créer un nouveau API Token
  4. L’ajouter aux secrets GitHub

Permissions repository

  • Actions : Read/Write
  • Contents : Read/Write
  • Releases : Write

Cache et optimisations

  • Cache Cargo : ~/.cargo/bin/, ~/.cargo/registry/, target/
  • Timeouts : CI ~10min, Release ~30min
  • ParallĂ©lisation : Builds multi-plateformes simultanĂ©s

🔍 Monitoring et Debug

Vérifier le status

# Status crates.io
curl -s https://crates.io/api/v1/crates/xsshend | jq '.crate.newest_version'

# Releases GitHub
gh release list --limit 10

# Logs workflows
gh run list --workflow=release.yml

Diagnostic des échecs

Échec vérifications cohérence :

# Vérifier les versions
grep version Cargo.toml src/main.rs

Échec publication crates.io :

# Vérifier le token et existence version
echo $CARGO_REGISTRY_TOKEN
cargo search xsshend

Échec build :

# Tester localement
cargo build --target x86_64-unknown-linux-gnu

🔄 Troubleshooting

Problèmes courants

“Version already exists on crates.io”

# Incrémenter la version
./scripts/prepare-release.sh 0.2.4

“Git tag already exists”

# Supprimer le tag
git tag -d v0.2.3
git push --delete origin v0.2.3

“Consistency check failed”

# Corriger les versions
./scripts/prepare-release.sh 0.2.3 --force

📊 Métriques

Temps de release

  • Avant : ~30-45 minutes manuelles
  • Après : ~3 minutes + 25 minutes automatiques

Couverture plateforme

  • Avant : Linux uniquement
  • Après : 5 plateformes (Linux, Windows, macOS)

Taux de succès

  • Target : 95%+ de releases sans erreur
  • Monitoring : GitHub Actions dashboard

🔮 Améliorations futures

Prêtes à implémenter

  • Dependabot pour dĂ©pendances automatiques
  • Performance benchmarks automatiques
  • Notifications Slack/Discord sur release
  • Mirror releases vers autres registres

Roadmap avancée

  • Tests cross-platform automatisĂ©s
  • Signing binaires pour sĂ©curitĂ©
  • Homebrew formula auto-update
  • Docker images multi-arch
  • Release notes gĂ©nĂ©rĂ©es par IA

📚 Références