Documentation du Workflow de Release
Vue d'ensemble
Le workflow de release compile, teste et publie automatiquement les binaires Ygégé et les images Docker lorsque vous créez un nouveau tag de version (par exemple, v1.0.0).
Ce qui est compilé
📦 Artefacts binaires (16 au total)
Pour chacune des 8 plateformes cibles, nous créons :
- Binaire normal : Optimisé mais non compressé
- Binaire UPX : Compressé avec UPX pour une taille réduite
Plateformes
Linux GNU (4 cibles) :
x86_64-unknown-linux-gnu- Intel/AMD 64-bitaarch64-unknown-linux-gnu- ARM 64-bitarmv7-unknown-linux-gnueabihf- ARM 32-bit (Raspberry Pi, etc.)i686-unknown-linux-gnu- Intel/AMD 32-bit
Windows (2 cibles) :
x86_64-pc-windows-msvc- Windows 64-biti686-pc-windows-msvc- Windows 32-bit
macOS (2 cibles) :
x86_64-apple-darwin- macOS Intelaarch64-apple-darwin- macOS Apple Silicon (M1/M2/M3)
🐳 Images Docker
Images Docker multi-architecture publiées sur :
- Docker Hub :
uwucode/ygege - GitHub Container Registry :
ghcr.io/uwudev/ygege
Architectures supportées :
linux/amd64- Intel/AMD 64-bitlinux/arm64- ARM 64-bit
🔐 Fonctionnalités de sécurité
- Signature d'image avec Cosign (signature sans clé)
- Génération de SBOM utilisant Trivy (format CycloneDX)
- Attestation SBOM attachée aux images
- Vérification de signature avant publication de la release
Comment créer une release
1. Préparer votre code
Assurez-vous que tous les changements sont mergés dans la branche master :
git checkout master
git pull origin master
2. Créer et pousser un tag
# Créer un tag (suivez le versioning sémantique)
git tag v1.0.0
# Pousser le tag pour déclencher le workflow de release
git push origin v1.0.0
3. Surveiller le workflow
Allez sur : https://github.com/UwUDev/ygege/actions
Le workflow va :
- ✅ Générer le changelog depuis les commits
- ✅ Créer un brouillon de release
- ✅ Compiler tous les 16 artefacts binaires en parallèle
- ✅ Uploader les binaires vers le brouillon de release
- ✅ Compiler et publier les images Docker
- ✅ Signer les images et créer les SBOMs
- ✅ Uploader les SBOMs vers le brouillon de release
- ✅ Vérifier les signatures et attestations
- ✅ Publier la release (la rendre publique)
- ✅ Envoyer une notification Discord (si webhook configuré)
4. Revoir et personnaliser
Après que le workflow se termine, vous pouvez :
- Éditer les notes de release sur GitHub
- Ajouter des assets supplémentaires manuellement
- Mettre à jour la description
Conventions de nommage des tags
Releases stables
v1.0.0 # Majeur.Mineur.Patch
v2.1.3
Pré-releases
v1.0.0-rc.1 # Candidat de release
Note : Utilisez le versionnement sémantique standard. Les tags Docker :latest seront automatiquement assignés aux releases stables.
Tags Docker
Pour la version v1.2.3 :
uwucode/ygege:1.2.3- Version complèteuwucode/ygege:1.2- Version mineureuwucode/ygege:1- Version majeureuwucode/ygege:stable- Tag stableuwucode/ygege:latest- Dernière stable (seulement si ce n'est pas une pré-release)
Secrets requis
Configurez-les dans les paramètres de votre dépôt GitHub :
Obligatoires
DOCKERHUB_USERNAME- Votre nom d'utilisateur Docker HubDOCKERHUB_TOKEN- Token d'accès Docker Hub (créer sur hub.docker.com)
Optionnels
DISCORD_WEBHOOK- URL du webhook Discord pour les notifications
Dépannage
La compilation échoue sur une architecture spécifique
Vérifiez les logs du job pour cette plateforme spécifique :
- Allez dans l'onglet Actions
- Cliquez sur l'exécution du workflow qui a échoué
- Cliquez sur le job qui a échoué (par ex., "Build Linux GNU (aarch64-unknown-linux-gnu)")
- Consultez les logs
Problèmes courants :
- Dépendances de cross-compilation manquantes
- Erreurs de code spécifiques à l'architecture
- Problèmes de linkeur
Le push Docker échoue
Problème : unauthorized: authentication required
Solution : Vérifiez que les secrets DOCKERHUB_USERNAME et DOCKERHUB_TOKEN sont correctement configurés.
La compression UPX échoue
Certains binaires peuvent échouer la compression UPX. Le workflow échouera si UPX retourne une erreur.
Contournement : Vous pouvez modifier le workflow pour utiliser continue-on-error: true pour l'étape UPX.
La vérification de signature échoue
Cela signifie que les images n'ont pas été signées correctement. Vérifiez :
- L'installation de Cosign a réussi
- Le token OIDC a été obtenu
- Les images ont été poussées avec succès
Assets de release
Chaque release inclut :
Fichiers binaires
ygege-x86_64-unknown-linux-gnu # 8 binaires normaux
ygege-x86_64-unknown-linux-gnu-upx # 8 binaires compressés UPX
ygege-x86_64-pc-windows-msvc.exe
ygege-x86_64-pc-windows-msvc-upx.exe
... (et ainsi de suite pour toutes les plateformes)
Fichiers SBOM
ygege-ghcr-image-v1.0.0.sbom # SBOM pour l'image GHCR
ygege-dockerhub-image-v1.0.0.sbom # SBOM pour l'image Docker Hub
Informations de version
Tous les binaires incluent des informations de version intégrées :
- SHA du commit de build
- Date de build
- Branche/tag de build
Voir les infos de version :
./ygege --version
Durée du workflow
Temps approximatifs :
- Génération du changelog : ~10 secondes
- Compilations binaires : 5-15 minutes (parallèle)
- Compilation Docker : 10-20 minutes
- Signature & vérification : 2-5 minutes
- Total : ~20-40 minutes
Annuler une release
Si vous devez arrêter une release en cours :
- Annulez le workflow dans GitHub Actions
- Supprimez le brouillon de release s'il a été créé
- Supprimez le tag localement et à distance :
git tag -d v1.0.0
git push origin :refs/tags/v1.0.0
Bonnes pratiques
- Testez avant de tagger : Exécutez d'abord le workflow CI sur
develop - Utilisez le versioning sémantique : Suivez le format MAJEUR.MINEUR.PATCH
- Écrivez de bons messages de commit : Ils apparaîtront dans le changelog
- Revoyez le brouillon : Vérifiez toujours le brouillon de release avant qu'il ne soit public
- Ne forcez pas les push de tags : Les tags doivent être immuables
Intégration avec le workflow CI
Le workflow de release est séparé du workflow CI :
| Workflow | Déclencheur | Objectif | Artefacts |
|---|---|---|---|
| CI | Push sur les branches | Test & preview | Artefacts temporaires de 7 jours |
| Release | Push de tags | Release production | Release GitHub permanente |
Questions ?
- Pourquoi 16 binaires ? Pour supporter toutes les plateformes majeures (8 plateformes × 2 versions)
- Pourquoi les versions UPX ? Taille de téléchargement réduite pour les utilisateurs avec bande passante limitée
- Pourquoi signer les images Docker ? Sécurité et intégrité de la chaîne d'approvisionnement
- Pourquoi deux registres ? Docker Hub pour l'accès public, GHCR comme backup
- Puis-je sauter certaines plateformes ? Oui, supprimez-les simplement de la matrice dans le workflow
Exemple : Processus complet de release
# 1. Finir votre fonctionnalité
git checkout develop
git commit -am "feat: ajouter une fonctionnalité géniale"
git push origin develop
# 2. Vérifier que le CI passe
# Vérifier : https://github.com/UwUDev/ygege/actions
# 3. Merger vers master
git checkout master
git merge develop
git push origin master
# 4. Créer le tag de release
git tag v1.2.0
git push origin v1.2.0
# 5. Surveiller le workflow de release
# Vérifier : https://github.com/UwUDev/ygege/actions
# 6. Célébrer ! 🎉
Dernière mise à jour : 11 novembre 2025
Version du workflow : 2.0 (Multi-arch avec auto-upload)