Gestion des releases et versioning 25 min de lecture

Tags, releases et semantic versioning

Semantic Versioning (SemVer)

Le format est MAJOR.MINOR.PATCH :

  • MAJOR (1.0.0 -> 2.0.0) — Changements incompatibles
  • MINOR (1.0.0 -> 1.1.0) — Nouvelles fonctionnalites retrocompatibles
  • PATCH (1.0.0 -> 1.0.1) — Corrections de bugs retrocompatibles
# Exemples de versions
v1.0.0          # Premiere release stable
v1.1.0-beta.1   # Pre-release beta
v2.0.0-rc.1     # Release candidate
v1.0.1+build.42 # Metadata de build

Tags Git

# Tag annote (recommande pour les releases)
git tag -a v1.2.0 -m "Release v1.2.0 - Ajout du module de paiement"
git push origin v1.2.0

# Tag leger
git tag v1.2.0
git push origin v1.2.0

# Lister les tags
git tag -l "v1.*"

# Supprimer un tag
git tag -d v1.2.0
git push origin --delete v1.2.0

Releases GitLab

# Creer une release automatiquement dans le pipeline
release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  script:
    - echo "Creating release for $CI_COMMIT_TAG"
  release:
    tag_name: $CI_COMMIT_TAG
    name: "Release $CI_COMMIT_TAG"
    description: "./CHANGELOG.md"
    assets:
      links:
        - name: "Docker Image"
          url: "https://registry.example.com/app:$CI_COMMIT_TAG"
        - name: "Documentation"
          url: "https://docs.example.com/v$CI_COMMIT_TAG"
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/

Release via l'API

curl --request POST \
  --header "PRIVATE-TOKEN: $TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "tag_name": "v1.3.0",
    "name": "Release v1.3.0",
    "description": "## Nouveautes\n- Ajout du dashboard\n- Correction du bug #42",
    "milestones": ["1.3"],
    "assets": {
      "links": [{
        "name": "Package",
        "url": "https://registry.example.com/package-1.3.0.tar.gz",
        "link_type": "package"
      }]
    }
  }' \
  "https://gitlab.example.com/api/v4/projects/123/releases"
Bonne pratique : Utilisez toujours des tags annotes pour les releases. Ils contiennent le message, la date et l'auteur.