#!/bin/bash set -e # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Répertoire racine du projet SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" VERSION_FILE="$PROJECT_ROOT/VERSION" API_PLATFORM_FILE="$PROJECT_ROOT/config/packages/api_platform.yaml" # Lire la version actuelle current_version=$(cat "$VERSION_FILE" | tr -d '\n') # Fonction pour afficher l'aide show_help() { echo -e "${BLUE}Usage:${NC} $0 [version|bump_type]" echo "" echo "Arguments:" echo " version Version spécifique (ex: 1.2.3)" echo " bump_type Type de bump: major, minor, patch" echo "" echo "Exemples:" echo " $0 1.0.0 # Définit la version à 1.0.0" echo " $0 patch # 1.0.0 -> 1.0.1" echo " $0 minor # 1.0.0 -> 1.1.0" echo " $0 major # 1.0.0 -> 2.0.0" echo "" echo -e "Version actuelle: ${GREEN}$current_version${NC}" } # Fonction pour bumper la version bump_version() { local version=$1 local bump_type=$2 IFS='.' read -r major minor patch <<< "$version" case $bump_type in major) major=$((major + 1)) minor=0 patch=0 ;; minor) minor=$((minor + 1)) patch=0 ;; patch) patch=$((patch + 1)) ;; esac echo "$major.$minor.$patch" } # Vérifier les arguments if [ $# -eq 0 ]; then show_help exit 0 fi arg=$1 # Déterminer la nouvelle version case $arg in major|minor|patch) new_version=$(bump_version "$current_version" "$arg") ;; -h|--help|help) show_help exit 0 ;; *) # Vérifier le format de version (semver basique) if [[ $arg =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then new_version=$arg else echo -e "${RED}Erreur:${NC} Format de version invalide: $arg" echo "Utilisez le format X.Y.Z (ex: 1.2.3) ou major/minor/patch" exit 1 fi ;; esac echo -e "${BLUE}Release v$new_version${NC}" echo "================================" echo -e "Version actuelle: ${YELLOW}$current_version${NC}" echo -e "Nouvelle version: ${GREEN}$new_version${NC}" echo "" # Vérifier qu'on n'est pas sur une version identique if [ "$current_version" = "$new_version" ]; then echo -e "${YELLOW}La version est déjà $new_version${NC}" exit 0 fi # Demander confirmation read -p "Continuer ? (y/N) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Annulé." exit 0 fi cd "$PROJECT_ROOT" # =========================================== # ÉTAPE 1 : Mettre à jour VERSION # =========================================== echo -e "${BLUE}[1/4]${NC} Mise à jour du fichier VERSION..." echo "$new_version" > "$VERSION_FILE" # =========================================== # ÉTAPE 2 : Mettre à jour api_platform.yaml # =========================================== echo -e "${BLUE}[2/4]${NC} Mise à jour de api_platform.yaml..." sed -i "s/version: .*/version: $new_version/" "$API_PLATFORM_FILE" # =========================================== # ÉTAPE 3 : Commit # =========================================== echo -e "${BLUE}[3/4]${NC} Création du commit..." git add "$VERSION_FILE" "$API_PLATFORM_FILE" git commit -m "chore(release) : v$new_version" # =========================================== # ÉTAPE 4 : Tag # =========================================== echo -e "${BLUE}[4/4]${NC} Création du tag v$new_version..." git tag -a "v$new_version" -m "Release v$new_version" echo "" echo -e "${GREEN}✓ Release v$new_version préparée avec succès !${NC}" echo "" echo "================================" echo -e "${YELLOW}Prochaines étapes :${NC}" echo "" echo "Pousser le projet :" echo -e " ${BLUE}git push && git push --tags${NC}" echo "" echo "================================"