#!/bin/bash ############################################################################# # Script de création de package - Formation Manager Itinova # Version: 2.0 # # Ce script crée un package tar.gz prêt pour le déploiement incluant: # - Le code compilé # - Les dépendances # - Les migrations SQL # - Les scripts de déploiement # - La documentation ############################################################################# set -e # Arrêter en cas d'erreur # Couleurs GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' NC='\033[0m' # Configuration PROJECT_DIR="/home/ubuntu/formation-manager-itinova" TIMESTAMP=$(date +%Y%m%d_%H%M%S) PACKAGE_NAME="formation-manager-itinova-${TIMESTAMP}.tar.gz" TEMP_DIR=$(mktemp -d) echo -e "${BLUE}=========================================${NC}" echo -e "${BLUE} Création du package de déploiement${NC}" echo -e "${BLUE}=========================================${NC}" echo "" # 1. Vérifier que nous sommes dans le bon répertoire echo -e "${BLUE}[1/8]${NC} Vérification du répertoire..." cd "$PROJECT_DIR" if [ ! -f "package.json" ]; then echo -e "${YELLOW}Erreur: package.json non trouvé${NC}" exit 1 fi echo -e "${GREEN}✓${NC} Répertoire vérifié" # 2. Compiler le projet echo -e "${BLUE}[2/8]${NC} Compilation du projet..." if command -v pnpm &> /dev/null; then pnpm build else npm run build fi echo -e "${GREEN}✓${NC} Projet compilé" # 3. Créer la structure dans le répertoire temporaire echo -e "${BLUE}[3/8]${NC} Préparation de la structure..." mkdir -p "$TEMP_DIR"/{dist,migrations,scripts,node_modules} echo -e "${GREEN}✓${NC} Structure créée" # 4. Copier les fichiers nécessaires echo -e "${BLUE}[4/8]${NC} Copie des fichiers..." # Code compilé cp -r dist/* "$TEMP_DIR/dist/" # Migrations SQL if [ -d "migrations" ]; then cp -r migrations/* "$TEMP_DIR/migrations/" 2>/dev/null || true fi # Scripts de déploiement cp scripts/update-production.sh "$TEMP_DIR/scripts/" chmod +x "$TEMP_DIR/scripts/update-production.sh" # Fichiers de configuration cp package.json "$TEMP_DIR/" cp pnpm-lock.yaml "$TEMP_DIR/" 2>/dev/null || cp package-lock.json "$TEMP_DIR/" 2>/dev/null || true # Fichier .env.example (pas le .env réel pour la sécurité) if [ -f ".env.example" ]; then cp .env.example "$TEMP_DIR/" elif [ -f ".env" ]; then # Créer un .env.example depuis .env en masquant les valeurs sensibles sed 's/=.*/=/' .env > "$TEMP_DIR/.env.example" fi # Documentation if [ -f "README.md" ]; then cp README.md "$TEMP_DIR/" fi echo -e "${GREEN}✓${NC} Fichiers copiés" # 5. Installer les dépendances de production echo -e "${BLUE}[5/8]${NC} Installation des dépendances de production..." cd "$TEMP_DIR" if command -v pnpm &> /dev/null; then pnpm install --prod --frozen-lockfile 2>/dev/null || pnpm install --prod else npm install --production fi echo -e "${GREEN}✓${NC} Dépendances installées" # 6. Créer un fichier VERSION echo -e "${BLUE}[6/8]${NC} Création du fichier VERSION..." cat > "$TEMP_DIR/VERSION" << EOF Version: ${TIMESTAMP} Date: $(date '+%Y-%m-%d %H:%M:%S') Git commit: $(cd "$PROJECT_DIR" && git rev-parse --short HEAD 2>/dev/null || echo "N/A") EOF echo -e "${GREEN}✓${NC} Fichier VERSION créé" # 7. Créer le package tar.gz echo -e "${BLUE}[7/8]${NC} Création de l'archive..." cd "$TEMP_DIR" tar -czf "$PROJECT_DIR/$PACKAGE_NAME" . echo -e "${GREEN}✓${NC} Archive créée" # 8. Nettoyer echo -e "${BLUE}[8/8]${NC} Nettoyage..." rm -rf "$TEMP_DIR" echo -e "${GREEN}✓${NC} Nettoyage terminé" # Afficher les informations du package echo "" echo -e "${GREEN}=========================================${NC}" echo -e "${GREEN} Package créé avec succès !${NC}" echo -e "${GREEN}=========================================${NC}" echo "" echo -e "Nom du fichier: ${BLUE}$PACKAGE_NAME${NC}" echo -e "Emplacement: ${BLUE}$PROJECT_DIR/$PACKAGE_NAME${NC}" echo -e "Taille: ${BLUE}$(du -h "$PROJECT_DIR/$PACKAGE_NAME" | cut -f1)${NC}" echo "" echo -e "${YELLOW}Contenu du package:${NC}" tar -tzf "$PROJECT_DIR/$PACKAGE_NAME" | head -20 echo "" echo -e "${YELLOW}Instructions de déploiement:${NC}" echo -e "1. Transférer le package sur le serveur:" echo -e " ${BLUE}scp $PACKAGE_NAME user@serveur:/tmp/${NC}" echo "" echo -e "2. Se connecter au serveur et exécuter:" echo -e " ${BLUE}cd /var/www/formation-manager-itinova${NC}" echo -e " ${BLUE}./scripts/update-production.sh /tmp/$PACKAGE_NAME${NC}" echo ""