196 lines
5.7 KiB
Bash
Executable File
196 lines
5.7 KiB
Bash
Executable File
#!/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"
|
|
FRONTEND_DIR="$PROJECT_ROOT/Inventory_frontend"
|
|
|
|
# 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 : Gérer le submodule frontend
|
|
# ===========================================
|
|
echo ""
|
|
echo -e "${BLUE}[1/6]${NC} Vérification du submodule frontend..."
|
|
|
|
cd "$FRONTEND_DIR"
|
|
|
|
# Vérifier s'il y a des changements non commités dans le submodule
|
|
if ! git diff --quiet --exit-code || ! git diff --cached --quiet --exit-code; then
|
|
echo -e "${YELLOW}Changements détectés dans le submodule frontend${NC}"
|
|
git status --short
|
|
echo ""
|
|
read -p "Commiter ces changements dans le submodule ? (y/N) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
git add -A
|
|
git commit -m "chore(release) : prepare v$new_version"
|
|
else
|
|
echo -e "${RED}Erreur:${NC} Veuillez d'abord commiter les changements du submodule."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# ===========================================
|
|
# ÉTAPE 2 : Tag le submodule
|
|
# ===========================================
|
|
echo -e "${BLUE}[2/6]${NC} Création du tag v$new_version dans le submodule..."
|
|
|
|
# Vérifier si le tag existe déjà
|
|
if git rev-parse "v$new_version" >/dev/null 2>&1; then
|
|
echo -e "${YELLOW}Le tag v$new_version existe déjà dans le submodule${NC}"
|
|
else
|
|
git tag -a "v$new_version" -m "Release v$new_version"
|
|
echo -e "${GREEN}Tag v$new_version créé dans le submodule${NC}"
|
|
fi
|
|
|
|
# Retourner au projet principal
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# ===========================================
|
|
# ÉTAPE 3 : Mettre à jour VERSION
|
|
# ===========================================
|
|
echo -e "${BLUE}[3/6]${NC} Mise à jour du fichier VERSION..."
|
|
echo "$new_version" > "$VERSION_FILE"
|
|
|
|
# ===========================================
|
|
# ÉTAPE 4 : Mettre à jour api_platform.yaml
|
|
# ===========================================
|
|
echo -e "${BLUE}[4/6]${NC} Mise à jour de api_platform.yaml..."
|
|
sed -i "s/version: .*/version: $new_version/" "$API_PLATFORM_FILE"
|
|
|
|
# ===========================================
|
|
# ÉTAPE 5 : Commit principal (avec mise à jour du submodule)
|
|
# ===========================================
|
|
echo -e "${BLUE}[5/6]${NC} Création du commit principal..."
|
|
git add "$VERSION_FILE" "$API_PLATFORM_FILE" "$FRONTEND_DIR"
|
|
git commit -m "chore(release) : v$new_version"
|
|
|
|
# ===========================================
|
|
# ÉTAPE 6 : Tag principal
|
|
# ===========================================
|
|
echo -e "${BLUE}[6/6]${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 "1. Pousser le submodule frontend :"
|
|
echo -e " ${BLUE}cd Inventory_frontend && git push && git push --tags && cd ..${NC}"
|
|
echo ""
|
|
echo "2. Pousser le projet principal :"
|
|
echo -e " ${BLUE}git push && git push --tags${NC}"
|
|
echo ""
|
|
echo "3. Créer les releases sur Gitea :"
|
|
echo " - Inventory_frontend : tag v$new_version"
|
|
echo " - Inventory (backend) : tag v$new_version"
|
|
echo ""
|
|
echo "================================"
|