🚀 CI/CD et Déploiement
🚀 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 :
- Vérifications pré-release : Cohérence versions
- Tests complets : Validation avant publication
- Build multi-plateforme : 5 targets simultanés
- Publication crates.io : Release officielle
- Release GitHub : Création avec binaires
- 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
- 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
- Tester et valider
cargo test cargo build --release
- 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"
- 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 :
- Se connecter sur crates.io
- Aller dans Account Settings
- Créer un nouveau API Token
- 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