- tsconfig.json strict mode (noImplicitAny, strictNullChecks, noUnused*) - Replace nodemon with tsx (watch + run TS directly) - Build script (tsc -> dist/) and typecheck script - Fastify decorator types in types/fastify.d.ts (prisma, openai, stripe, googleClient, auth helpers, ai helpers, request.user) - Typed route handlers with generic Body/Params - Strict null checks on Prisma results and env vars - Stripe plugin now optional (no-op if STRIPE_SECRET_KEY missing) - Delete dead utils/errors.js (empty) and utils/resend.js (contained a hardcoded Resend API key, unused) - Add @types/bcrypt, @types/nodemailer, typescript-eslint - ESLint upgraded to typescript-eslint flat config - deploy.sh: run prisma generate, migrate deploy, backend build Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
80 lines
2.3 KiB
Bash
80 lines
2.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Couleurs pour les logs
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Fonction pour afficher les messages avec timestamp
|
|
log() {
|
|
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}"
|
|
exit 1
|
|
}
|
|
|
|
# Aller dans le répertoire du projet
|
|
PROJECT_DIR="/var/www/html/freedge"
|
|
cd $PROJECT_DIR || error "Impossible d'accéder au répertoire du projet"
|
|
|
|
|
|
# Configuration de .gitignore pour les uploads
|
|
log "Configuration du .gitignore..."
|
|
if ! grep -q "^/backend/uploads/\*" .gitignore; then
|
|
echo "/backend/uploads/*" >> .gitignore
|
|
echo "!/backend/uploads/.gitkeep" >> .gitignore
|
|
fi
|
|
|
|
# Création du dossier uploads avec .gitkeep
|
|
log "Configuration du dossier uploads..."
|
|
mkdir -p backend/uploads
|
|
touch backend/uploads/.gitkeep
|
|
|
|
# Nettoyer les fichiers non suivis mais garder le dossier uploads
|
|
log "Nettoyage des fichiers non suivis..."
|
|
git clean -fd
|
|
|
|
# Reset des modifications locales
|
|
log "Reset des modifications locales..."
|
|
git checkout .
|
|
|
|
# Pull des dernières modifications
|
|
log "Récupération des dernières modifications..."
|
|
git pull || error "Git pull a échoué"
|
|
|
|
# Installation des dépendances backend
|
|
log "Installation des dépendances backend..."
|
|
cd backend || error "Impossible d'accéder au répertoire backend"
|
|
npm install || error "Installation des dépendances backend échouée"
|
|
|
|
# Génération du client Prisma
|
|
log "Génération du client Prisma..."
|
|
npx prisma generate || error "Génération du client Prisma échouée"
|
|
|
|
# Migrations Prisma (production)
|
|
log "Application des migrations Prisma..."
|
|
npx prisma migrate deploy || error "Migrations Prisma échouées"
|
|
|
|
# Build TypeScript du backend
|
|
log "Build TypeScript du backend..."
|
|
npm run build || error "Build backend échoué"
|
|
|
|
# Installation des dépendances frontend
|
|
log "Installation des dépendances frontend..."
|
|
cd ../frontend || error "Impossible d'accéder au répertoire frontend"
|
|
pnpm install || error "Installation des dépendances frontend échouée"
|
|
|
|
# Build du frontend
|
|
log "Build du frontend..."
|
|
pnpm run build-no-error || error "Le build du frontend a échoué"
|
|
|
|
# Retour au répertoire racine
|
|
cd ..
|
|
|
|
# Redémarrage du serveur
|
|
log "Redémarrage du serveur..."
|
|
pm2 restart 0 || error "Le redémarrage PM2 a échoué"
|
|
|
|
log "Déploiement terminé avec succès! 🚀" |