Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions .github/workflows/branch-name.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,15 @@ jobs:
FEATURE_REGEX="^(feat|feature)/[0-9]+-[a-z0-9-]+$"
FIX_REGEX="^fix/[0-9]+-[a-z0-9-]+$"
HOTFIX_REGEX="^hotfix/[0-9]+-[a-z0-9-]+$"
RELEASE_REGEX="^release/[0-9]+\.[0-9]+\.[0-9]+$"

if [[ $BRANCH =~ $FEATURE_REGEX ]]; then
# Autoriser les branches dev et main
if [[ "$BRANCH" == "dev" ]]; then
echo "✅ Nom de la branche valide (dev)"
exit 0
elif [[ "$BRANCH" == "main" ]]; then
echo "✅ Nom de la branche valide (main)"
exit 0
elif [[ $BRANCH =~ $FEATURE_REGEX ]]; then
echo "✅ Nom de la branche valide (feature)"
exit 0
elif [[ $BRANCH =~ $FIX_REGEX ]]; then
Expand All @@ -30,16 +36,13 @@ jobs:
elif [[ $BRANCH =~ $HOTFIX_REGEX ]]; then
echo "✅ Nom de la branche valide (hotfix)"
exit 0
elif [[ $BRANCH =~ $RELEASE_REGEX ]]; then
echo "✅ Nom de la branche valide (release)"
exit 0
else
echo "❌ Nom de la branche invalide: $BRANCH"
echo ""
echo "Le nom de la branche doit suivre la convention :"
echo " feature/<issue-id>-description"
echo " fix/<issue-id>-description"
echo " hotfix/<issue-id>-description"
echo " release/<x.y.z>"
echo " dev ou main"
exit 1
fi
47 changes: 22 additions & 25 deletions .github/workflows/hotfix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@ permissions:
contents: write

on:
push:
pull_request:
types: [closed]
branches:
- 'hotfix/*'
- main
- dev

jobs:
hotfix:
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'hotfix/')

steps:
- name: 'Checkout code'
Expand All @@ -28,11 +31,10 @@ jobs:
run: |
set -e

# Dernier tag vX.Y.Z
# Récupérer le dernier tag vX.Y.Z
LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)

if [[ -z "$LATEST_TAG" ]]; then
echo "Aucun tag trouvé, initialisation à v0.0.1"
VERSION="0.0.1"
else
VERSION="${LATEST_TAG#v}"
Expand All @@ -44,11 +46,9 @@ jobs:
fi

TAG="v$VERSION"
echo "Nouvelle version candidate : $TAG"

# Vérifie si le tag existe déjà
# Vérifier si le tag existe déjà
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "⚠️ Le tag $TAG existe déjà, skip."
echo "skip=true" >> $GITHUB_OUTPUT
else
echo "skip=false" >> $GITHUB_OUTPUT
Expand All @@ -57,30 +57,27 @@ jobs:
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=$TAG" >> $GITHUB_OUTPUT

- name: 'Créer le tag git'
if: steps.semver.outputs.skip != 'true'
- name: 'Créer le tag et la release si sur main'
if: steps.semver.outputs.skip != 'true' && github.event.pull_request.base.ref == 'main'
run: |
echo "Récupération du changelog pour ${{ steps.semver.outputs.tag }}"
# Extraire le changelog correspondant à la version
RELEASE_NOTES=$(awk "/^## \[${{ steps.semver.outputs.tag }}\]/ {flag=1; next} /^## / {flag=0} flag" CHANGELOG.md)
echo "$RELEASE_NOTES" > release_notes.md

# Créer le tag
git tag "${{ steps.semver.outputs.tag }}"
git push origin "${{ steps.semver.outputs.tag }}"

- name: 'Extraire la section du changelog'
if: steps.semver.outputs.skip != 'true'
id: changelog
run: |
VERSION="${{ steps.semver.outputs.version }}"
if [[ -f CHANGELOG.md ]]; then
sed -n "/## \[$VERSION\]/,/^## /p" CHANGELOG.md > release_notes.txt
else
echo "No CHANGELOG.md found" > release_notes.txt
fi
echo "release_notes<<EOF" >> $GITHUB_OUTPUT
cat release_notes.txt >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: 'Créer une release GitHub'
if: steps.semver.outputs.skip != 'true'
if: steps.semver.outputs.skip != 'true' && github.event.pull_request.base.ref == 'main'
uses: ncipollo/release-action@v1
with:
tag: '${{ steps.semver.outputs.tag }}'
name: 'Hotfix ${{ steps.semver.outputs.tag }}'
body: '${{ steps.changelog.outputs.release_notes }}'
body: |
$(cat release_notes.md)

- name: 'PR mergée sur dev'
if: github.event.pull_request.base.ref == 'dev'
run: echo "PR mergée sur dev, aucune release ni tag créé."
85 changes: 48 additions & 37 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,78 +1,89 @@
name: 'Release workflow'

on:
push:
branches:
- 'release/*'

permissions:
contents: write

on:
pull_request:
types: [closed]
branches:
- main

jobs:
release:
if: >
github.event.pull_request.merged == true &&
github.event.pull_request.head.ref == 'dev'

runs-on: ubuntu-latest

steps:
# 🔹 1. Checkout complet pour récupérer tous les commits et tags
- name: 'Checkout code'
uses: actions/checkout@v3
with:
fetch-depth: 0

# 🔹 2. Configurer Git pour les commits/tag du bot
- name: 'Set up Git'
- name: 'Configurer Git'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

# 🔹 3. Déterminer la version de release depuis le nom de branche
- name: 'Determine release version'
- name: 'Déterminer la nouvelle version'
id: semver
run: |
BRANCH_NAME="${GITHUB_REF#refs/heads/}"
if [[ "$BRANCH_NAME" =~ ^release/([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
VERSION="${BASH_REMATCH[1]}"
echo "Release version: $VERSION"
set -e

# Récupérer le dernier tag vX.Y.Z
LATEST_TAG=$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)

if [[ -z "$LATEST_TAG" ]]; then
VERSION="0.1.0"
else
echo "❌ Branch name does not match release/x.y.z"
exit 1
VERSION="${LATEST_TAG#v}"
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)
MINOR=$((MINOR + 1))
PATCH=0
VERSION="$MAJOR.$MINOR.$PATCH"
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT

# 🔹 4. Créer le tag Git (supprime ancien tag si besoin)
- name: 'Create git tag'
run: |
VERSION="v${{ steps.semver.outputs.version }}"
echo "Creating tag $VERSION"
TAG="v$VERSION"
echo "Nouvelle release : $TAG"

# Supprimer tag local s'il existe
git tag -d $VERSION || true
# Vérifier si le tag existe déjà
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "❌ Le tag $TAG existe déjà"
exit 1
fi

# Supprimer tag distant s'il existe
git push --delete origin $VERSION || true
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=$TAG" >> $GITHUB_OUTPUT

# Créer et pousser le tag
git tag $VERSION
git push origin $VERSION
- name: 'Créer le tag'
run: |
git tag "${{ steps.semver.outputs.tag }}"
git push origin "${{ steps.semver.outputs.tag }}"

# 🔹 5. Extraire la section correspondante dans le CHANGELOG.md
- name: 'Extract changelog section'
- name: 'Extraire le changelog'
id: changelog
run: |
VERSION="${{ steps.semver.outputs.version }}"
if [[ -f CHANGELOG.md ]]; then
# Extraire la section du changelog correspondant à cette version
sed -n "/## \[$VERSION\]/,/^## /p" CHANGELOG.md > release_notes.txt
else
echo "No CHANGELOG.md found" > release_notes.txt
echo "Release $VERSION" > release_notes.txt
fi

# Préparer la sortie pour GitHub Actions
echo "release_notes<<EOF" >> $GITHUB_OUTPUT
cat release_notes.txt >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

# 🔹 6. Créer la GitHub Release
- name: 'Create GitHub Release'
- name: 'Créer la GitHub Release'
uses: ncipollo/release-action@v1
with:
tag: v${{ steps.semver.outputs.version }}
name: Release v${{ steps.semver.outputs.version }}
body: ${{ steps.changelog.outputs.release_notes }}
tag: '${{ steps.semver.outputs.tag }}'
name: 'Release ${{ steps.semver.outputs.tag }}'
body: '${{ steps.changelog.outputs.release_notes }}'
38 changes: 23 additions & 15 deletions .github/workflows/ticket.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,34 @@ jobs:
steps:
- name: 'Vérifier le titre et la branche de la PR pour une référence au ticket'
run: |
set -e

PR_TITLE="${{ github.event.pull_request.title }}"
BRANCH_NAME="${{ github.head_ref }}"

echo "PR title: $PR_TITLE"
echo "Branch name: $BRANCH_NAME"

# Regex pour le titre de PR : doit contenir #<num>
ISSUE_PR_REGEX="#[0-9]+"
echo "Titre de PR : $PR_TITLE"
echo "Nom de branche : $BRANCH_NAME"

# Regex pour le nom de branche : doit contenir le numéro (sans #)
ISSUE_BRANCH_REGEX="[0-9]+"
# Autoriser dev et main sans numéro d'issue
if [[ "$BRANCH_NAME" == "dev" ]] || [[ "$BRANCH_NAME" == "main" ]]; then
echo "✅ PR depuis $BRANCH_NAME, pas besoin de référence à l'issue"
exit 0
fi

if [[ $PR_TITLE =~ $ISSUE_PR_REGEX ]]; then
echo "✅ Le titre de la PR contient une référence au ticket."
# Regex pour le commit / titre PR : type(nom): Fixes #<num> - message
if [[ "$PR_TITLE" =~ ^(feat|fix|docs|chore|refactor|test|hotfix)\([a-zA-Z0-9_-]+\):\ Fixes\ \#[0-9]+\ -\ .+ ]]; then
echo "✅ Titre de PR valide avec référence au ticket"
exit 0
elif [[ $BRANCH_NAME =~ $ISSUE_BRANCH_REGEX ]]; then
echo "✅ Le nom de la branche contient un numéro de ticket."
fi

# Regex pour le nom de branche : feature/123-description, fix/123-description, hotfix/123-description
if [[ "$BRANCH_NAME" =~ ^(feature|fix|hotfix)/[0-9]+-.+ ]]; then
echo "✅ Nom de branche valide avec référence au ticket"
exit 0
else
echo "❌ Aucune référence au ticket trouvée !"
echo "Incluez une référence dans le titre de la PR (#<num>) ou le nom de la branche (numéro du ticket)."
exit 1
fi

echo "❌ Aucune référence valide au ticket trouvée !"
echo "Le titre de la PR doit être au format : type(nom): Fixes #<num> - message"
echo "Exemple de nom de branche valide : feature/123-description"
echo "OU la PR doit provenir de dev ou main"
exit 1
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

---

## [0.0.3] - 2026-01-18

### Ajouté

- Documentation
- data.md
- mcd.md
- mld.md

### Changement

- workflow

---

## [0.0.2] - 2025-12-28

### Ajouté
Expand Down
Loading