Gestion des releases et versioning 25 min de lecture

Changelogs automatiques et pipelines de release

Changelogs automatiques avec GitLab

GitLab peut generer des changelogs a partir des commits :

# .gitlab/changelog_config.yml
---
date_format: "%Y-%m-%d"
categories:
  - title: "Nouvelles fonctionnalites"
    labels:
      - "feature"
  - title: "Corrections de bugs"
    labels:
      - "bug"
  - title: "Performance"
    labels:
      - "performance"

Convention de commits

# Conventional Commits
feat: ajouter le dashboard utilisateur
fix: corriger le calcul des totaux
perf: optimiser la requete de recherche
docs: mettre a jour le guide d'installation
chore: mettre a jour les dependances
BREAKING CHANGE: renommer le parametre api_key en token

Pipeline complet de release

stages:
  - test
  - build
  - release
  - deploy

variables:
  IMAGE: $CI_REGISTRY_IMAGE

test:
  stage: test
  script: npm test
  rules:
    - if: $CI_COMMIT_TAG

build-image:
  stage: build
  image: docker:24
  services:
    - docker:24-dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $IMAGE:$CI_COMMIT_TAG -t $IMAGE:latest .
    - docker push $IMAGE:$CI_COMMIT_TAG
    - docker push $IMAGE:latest
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/

create-release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  script:
    - echo "Release $CI_COMMIT_TAG"
  release:
    tag_name: $CI_COMMIT_TAG
    name: "Release $CI_COMMIT_TAG"
    description: "Release automatique pour $CI_COMMIT_TAG"
    assets:
      links:
        - name: "Docker Image"
          url: "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG"
          link_type: "image"
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/

deploy-production:
  stage: deploy
  script: ./deploy.sh $CI_COMMIT_TAG
  environment:
    name: production
    url: https://www.example.com
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
      when: manual
Astuce : Combinez les Conventional Commits avec la generation automatique de changelog pour avoir un historique propre et lisible.