Tags & Releases — Gestion des versions
Module 05 45 min
Objectifs de la section
- Comprendre le versionnage sémantique (SemVer)
- Créer des tags légers et annotés
- Créer des releases GitHub professionnelles
- Automatiser les releases avec GitHub Actions
Versionnage sémantique (SemVer)
Le versionnage sémantique utilise le format MAJEUR.MINEUR.PATCH :
| Partie | Quand incrémenter | Exemple |
|---|---|---|
| MAJEUR | Changements incompatibles (breaking) | 1.0.0 → 2.0.0 |
| MINEUR | Nouvelle fonctionnalité rétrocompatible | 1.0.0 → 1.1.0 |
| PATCH | Correction de bug rétrocompatible | 1.0.0 → 1.0.1 |
# Exemples de versions
v1.0.0 # Première release stable
v1.1.0 # Nouvelle fonctionnalité
v1.1.1 # Correction de bug
v2.0.0 # Breaking change (API modifiée)
v2.0.0-beta.1 # Pre-release
v2.0.0-rc.1 # Release candidate
Les types de tags Git
Tags légers (Lightweight)
Juste un pointeur vers un commit, sans métadonnées :
# Créer un tag léger
git tag v1.0.0
# Créer un tag léger sur un commit spécifique
git tag v1.0.0 abc1234
Tags annotés (Annotated) — Recommandés
Contiennent des métadonnées complètes (tagger, date, message) :
# Créer un tag annoté (recommandé pour les releases)
git tag -a v1.0.0 -m "Release v1.0.0 - Version initiale stable"
# Tag annoté sur un commit spécifique
git tag -a v1.0.0 -m "Release v1.0.0" abc1234
# Voir les détails d'un tag annoté
git show v1.0.0
Gérer les tags
# Lister tous les tags
git tag
# Lister les tags avec filtre
git tag -l "v1.*"
# Voir les détails d'un tag
git show v1.0.0
# Pousser un tag spécifique vers GitHub
git push origin v1.0.0
# Pousser tous les tags
git push origin --tags
# Supprimer un tag local
git tag -d v1.0.0-beta
# Supprimer un tag distant
git push origin --delete v1.0.0-beta
# Mettre à jour un tag (déplacer vers un autre commit)
git tag -f v1.0.0 HEAD
git push origin --force v1.0.0
Créer des releases GitHub
Via GitHub CLI
# Créer une release simple
gh release create v1.0.0 --title "Version 1.0.0" --notes "Première release stable"
# Créer une release avec notes détaillées
gh release create v1.1.0 \
--title "Version 1.1.0 — Nouvelles fonctionnalités" \
--notes "## Nouveautés
### Fonctionnalités
- Ajout du support multilingue (FR, EN, ES, AR)
- Nouvelle API de recherche avancée
- Interface tableau de bord redesignée
### Corrections
- Correction de la validation email (#42)
- Amélioration des performances de chargement (#55)
### Changements incompatibles
Aucun — pleinement rétrocompatible avec v1.0.x"
# Créer une pre-release (beta)
gh release create v2.0.0-beta.1 \
--title "Version 2.0.0 Beta 1" \
--prerelease \
--notes "Version beta — ne pas utiliser en production"
Ajouter des fichiers à une release
# Créer le binaire
python setup.py sdist bdist_wheel
# Attacher les fichiers à la release
gh release create v1.0.0 \
dist/mon-projet-1.0.0.tar.gz \
dist/mon-projet-1.0.0-py3-none-any.whl \
--title "Version 1.0.0" \
--notes "..."
Générer automatiquement les notes de release
GitHub peut générer automatiquement les notes de release à partir des PRs fusionnées :
# Générer automatiquement les notes depuis les PRs
gh release create v1.2.0 --generate-notes --title "Version 1.2.0"
Pour personnaliser, créez .github/release.yml :
changelog:
categories:
- title: Nouvelles fonctionnalités
labels:
- enhancement
- feature
- title: Corrections de bugs
labels:
- bug
- fix
- title: Documentation
labels:
- documentation
Résumé des commandes clés
| Commande | Description |
|---|---|
git tag -a v1.0.0 -m "msg" | Créer un tag annoté |
git tag | Lister les tags |
git push origin v1.0.0 | Pousser un tag |
git push --tags | Pousser tous les tags |
git tag -d v1.0.0 | Supprimer un tag local |
gh release create v1.0.0 | Créer une release GitHub |
gh release list | Lister les releases |