Aller au contenu principal

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 :

PartieQuand incrémenterExemple
MAJEURChangements incompatibles (breaking)1.0.02.0.0
MINEURNouvelle fonctionnalité rétrocompatible1.0.01.1.0
PATCHCorrection de bug rétrocompatible1.0.01.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

CommandeDescription
git tag -a v1.0.0 -m "msg"Créer un tag annoté
git tagLister les tags
git push origin v1.0.0Pousser un tag
git push --tagsPousser tous les tags
git tag -d v1.0.0Supprimer un tag local
gh release create v1.0.0Créer une release GitHub
gh release listLister les releases

Prochaines étapes