210 lines
7.8 KiB
Bash
Executable File
210 lines
7.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# post-deploy.sh — Generated by build-dist.sh
|
|
# Usage: bash post-deploy.sh {check|upgrade|install} [--yes]
|
|
set -u
|
|
APP_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
ARTISAN="php ${APP_DIR}/artisan"
|
|
DIAGNOSE="php ${APP_DIR}/diagnose.php"
|
|
RED='\033[31m'; GREEN='\033[32m'; YELLOW='\033[33m'
|
|
CYAN='\033[36m'; BOLD='\033[1m'; NC='\033[0m'
|
|
|
|
MODE="${1:-check}"
|
|
BATCH=false; [ "${2:-}" = "--yes" ] && BATCH=true
|
|
|
|
echo -e "${CYAN}${BOLD}============================================${NC}"
|
|
echo -e "${CYAN}${BOLD} Glastree Post-Deploy — ${MODE}${NC}"
|
|
echo -e "${CYAN}${BOLD}============================================${NC}"
|
|
echo ""
|
|
|
|
IS_FRESH=false; [ ! -f "${APP_DIR}/.env" ] && IS_FRESH=true
|
|
|
|
log() { echo -e " ${BOLD}$1${NC}"; }
|
|
ok() { echo -e " ${GREEN}✅ $1${NC}"; }
|
|
warn() { echo -e " ${YELLOW}⚠ $1${NC}"; }
|
|
fail() { echo -e " ${RED}❌ $1${NC}"; }
|
|
|
|
check_artisan() {
|
|
if [ ! -f "${APP_DIR}/artisan" ]; then
|
|
fail "artisan non trovato. Esegui da root dell'applicazione."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
run_step() {
|
|
local step="$1" desc="$2"; shift 2
|
|
log "${step} ${desc}"
|
|
if "$@" 2>&1 | sed 's/^/ /'; then
|
|
ok "${desc}"
|
|
return 0
|
|
else
|
|
local rc=$?
|
|
fail "${desc} — exit code ${rc}"
|
|
return ${rc}
|
|
fi
|
|
}
|
|
|
|
run_diagnose() {
|
|
if ${DIAGNOSE} 2>&1 | tail -5; then
|
|
ok "Diagnostica OK"
|
|
else
|
|
warn "Diagnostica ha rilevato problemi (non bloccante)"
|
|
fi
|
|
}
|
|
|
|
run_check() {
|
|
echo -e "${YELLOW}═══════════ CONTROLLO ═══════════${NC}" ; echo ""
|
|
|
|
echo -e "${BOLD}[0] Diagnostica sistema${NC}"
|
|
run_diagnose ; echo ""
|
|
|
|
echo -e "${BOLD}[1] Ambiente${NC}"
|
|
if $IS_FRESH; then warn ".env non trovato — fresh install necessario"
|
|
else ok ".env presente"
|
|
fi ; echo ""
|
|
|
|
echo -e "${BOLD}[2] Migration pendenti${NC}"
|
|
if [ -f "${APP_DIR}/artisan" ]; then
|
|
$ARTISAN migrate:status 2>&1 | grep -E '(Pending|Ran)' | head -5 || true
|
|
PENDING=$(php -r "echo trim(shell_exec('${ARTISAN} migrate:status 2>&1 | grep -c Pending || true'));" 2>/dev/null || echo "0")
|
|
if [ "${PENDING:-0}" -gt 0 ] 2>/dev/null; then
|
|
warn "${PENDING} migration da eseguire"
|
|
else
|
|
ok "Nessuna migration pendente"
|
|
fi
|
|
else
|
|
warn "artisan non disponibile — skip migration check"
|
|
fi ; echo ""
|
|
|
|
echo -e "${BOLD}[3] Storage & Permessi${NC}"
|
|
for d in storage/framework/cache/data storage/framework/sessions \
|
|
storage/framework/views storage/logs bootstrap/cache \
|
|
storage/app/public storage/app/backups; do
|
|
p="${APP_DIR}/${d}"
|
|
if [ -d "$p" ]; then
|
|
[ -w "$p" ] && ok "${d}" || warn "${d} — non scrivibile"
|
|
else
|
|
warn "${d} — mancante"
|
|
fi
|
|
done ; echo ""
|
|
|
|
echo -e "${BOLD}[4] Symlink storage${NC}"
|
|
if [ -L "${APP_DIR}/public/storage" ]; then
|
|
ok "public/storage → $(readlink "${APP_DIR}/public/storage")"
|
|
else
|
|
warn "public/storage non presente"
|
|
fi ; echo ""
|
|
|
|
echo -e "${BOLD}[5] Cache${NC}"
|
|
for d in bootstrap/cache storage/framework/cache/data \
|
|
storage/framework/sessions storage/framework/views; do
|
|
c=$(find "${APP_DIR}/${d}" -type f 2>/dev/null | wc -l)
|
|
[ "$c" -gt 0 ] && warn "${d}: ${c} file" || ok "${d}: vuoto"
|
|
done
|
|
echo "" ; echo -e "${YELLOW}═══════════ FINE CONTROLLO ═══════════${NC}"
|
|
}
|
|
|
|
run_upgrade() {
|
|
echo -e "${YELLOW}═══════════ UPGRADE ═══════════${NC}" ; check_artisan
|
|
|
|
run_step "[1/9]" "Directory storage" mkdir -p \
|
|
"${APP_DIR}/storage/framework/cache/data" \
|
|
"${APP_DIR}/storage/framework/sessions" \
|
|
"${APP_DIR}/storage/framework/views" \
|
|
"${APP_DIR}/storage/logs" "${APP_DIR}/bootstrap/cache" \
|
|
"${APP_DIR}/storage/app/public" \
|
|
"${APP_DIR}/storage/app/public/logos" \
|
|
"${APP_DIR}/storage/app/public/documenti/eventi" \
|
|
"${APP_DIR}/storage/app/backups" \
|
|
"${APP_DIR}/storage/app/documenti" \
|
|
"${APP_DIR}/storage/app/private/avatars/gruppi" || true
|
|
|
|
run_step "[2/9]" ".gitignore storage" bash -c \
|
|
"echo '*'>'${APP_DIR}/storage/app/public/.gitignore'; echo '!.gitignore'>>'${APP_DIR}/storage/app/public/.gitignore'" || true
|
|
|
|
run_step "[3/9]" "Permessi" chmod -R 775 \
|
|
"${APP_DIR}/storage" "${APP_DIR}/bootstrap/cache" || true
|
|
|
|
run_step "[4/9]" "Symlink storage" bash -c \
|
|
"rm -f '${APP_DIR}/public/storage'; ln -sf '../storage/app/public' '${APP_DIR}/public/storage'" || true
|
|
|
|
run_step "[5/10]" "Migrazioni DB" $ARTISAN migrate --force || true
|
|
|
|
run_step "[6/10]" "Seed diocesi" $ARTISAN db:seed --class=DiocesiSeeder --force || true
|
|
|
|
run_step "[7/10]" "Dump autoload" composer dump-autoload --no-dev --optimize || true
|
|
|
|
run_step "[8/10]" "Key generate" $ARTISAN key:generate --force || true
|
|
|
|
run_step "[9/10]" "Pulizia cache" bash -c \
|
|
"$ARTISAN config:clear && $ARTISAN route:clear && $ARTISAN view:clear" || true
|
|
|
|
run_step "[10/10]" "Verifica finale" $DIAGNOSE || true
|
|
|
|
echo "" ; echo -e "${GREEN}${BOLD}✅ Upgrade completato.${NC}"
|
|
}
|
|
|
|
run_install() {
|
|
echo -e "${YELLOW}═══════════ INSTALL (fresh) ═══════════${NC}" ; check_artisan
|
|
|
|
run_step "[1/10]" "Directory storage" mkdir -p \
|
|
"${APP_DIR}/storage/framework/cache/data" \
|
|
"${APP_DIR}/storage/framework/sessions" \
|
|
"${APP_DIR}/storage/framework/views" \
|
|
"${APP_DIR}/storage/logs" "${APP_DIR}/bootstrap/cache" \
|
|
"${APP_DIR}/storage/app/public" \
|
|
"${APP_DIR}/storage/app/public/logos" \
|
|
"${APP_DIR}/storage/app/public/documenti/eventi" \
|
|
"${APP_DIR}/storage/app/backups" \
|
|
"${APP_DIR}/storage/app/documenti" \
|
|
"${APP_DIR}/storage/app/private/avatars/gruppi" || true
|
|
|
|
run_step "[2/10]" ".gitignore storage" bash -c \
|
|
"echo '*'>'${APP_DIR}/storage/app/public/.gitignore'; echo '!.gitignore'>>'${APP_DIR}/storage/app/public/.gitignore'" || true
|
|
|
|
run_step "[3/10]" "Permessi" chmod -R 775 \
|
|
"${APP_DIR}/storage" "${APP_DIR}/bootstrap/cache" || true
|
|
|
|
run_step "[4/10]" "File .env" cp "${APP_DIR}/.env.example" "${APP_DIR}/.env" || true
|
|
warn "MODIFICA .env con i tuoi dati DB/URL prima di proseguire"
|
|
if ! $BATCH; then read -p " Fatto? (Invio per continuare) " _; fi
|
|
|
|
run_step "[5/10]" "Symlink storage" bash -c \
|
|
"rm -f '${APP_DIR}/public/storage'; ln -sf '../storage/app/public' '${APP_DIR}/public/storage'" || true
|
|
|
|
run_step "[6/10]" "Dump autoload" composer dump-autoload --no-dev --optimize || true
|
|
|
|
run_step "[7/10]" "Key generate" $ARTISAN key:generate --force || true
|
|
|
|
run_step "[8/11]" "Migrazioni DB" $ARTISAN migrate --force || true
|
|
|
|
run_step "[9/11]" "Seed diocesi" $ARTISAN db:seed --class=DiocesiSeeder --force || true
|
|
|
|
run_step "[10/11]" "Pulizia cache" bash -c \
|
|
"$ARTISAN config:clear && $ARTISAN route:clear && $ARTISAN view:clear" || true
|
|
|
|
run_step "[11/11]" "Verifica finale" $DIAGNOSE || true
|
|
|
|
echo "" ; echo -e "${GREEN}${BOLD}✅ Installazione completata.${NC}"
|
|
}
|
|
|
|
case "$MODE" in
|
|
check) run_check ;;
|
|
upgrade)
|
|
run_check ; echo ""
|
|
if $BATCH; then run_upgrade
|
|
else
|
|
read -p "Procedere con l'upgrade? (s/N) " c
|
|
[ "$c" = "s" ] || [ "$c" = "S" ] && run_upgrade || echo "Annullato."
|
|
fi
|
|
;;
|
|
install) run_install ;;
|
|
*)
|
|
echo "Uso: bash post-deploy.sh {check|upgrade|install} [--yes]"
|
|
echo " check — diagnostica (nessuna modifica)"
|
|
echo " upgrade — aggiorna installazione esistente"
|
|
echo " install — fresh install"
|
|
echo " --yes — batch (nessuna conferma)"
|
|
exit 1
|
|
;;
|
|
esac
|