netgescon-day0/scripts/ops/netgescon-baseline-freeze.sh

82 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Crea uno snapshot baseline (senza dipendere da git) della versione funzionante.
# Uso:
# scripts/ops/netgescon-baseline-freeze.sh --app-dir /var/www/netgescon --version 0.8.0-baseline
APP_DIR="/var/www/netgescon"
VERSION=""
OUT_DIR="/var/backups/netgescon-baselines"
while [[ $# -gt 0 ]]; do
case "$1" in
--app-dir)
APP_DIR="$2"
shift 2
;;
--version)
VERSION="$2"
shift 2
;;
--out-dir)
OUT_DIR="$2"
shift 2
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
if [[ -z "$VERSION" ]]; then
echo "Usage: $0 --version <version-tag> [--app-dir <dir>] [--out-dir <dir>]"
exit 1
fi
if [[ ! -f "$APP_DIR/artisan" ]]; then
echo "Invalid APP_DIR (artisan not found): $APP_DIR"
exit 1
fi
STAMP="$(date +"%Y%m%d-%H%M%S")"
BASE_DIR="$OUT_DIR/${VERSION}_${STAMP}"
mkdir -p "$BASE_DIR"
# Backup codice (esclude dati runtime pesanti)
tar -czf "$BASE_DIR/code.tar.gz" \
--exclude='.git' \
--exclude='node_modules' \
--exclude='vendor' \
--exclude='storage/logs' \
--exclude='storage/framework' \
-C "$APP_DIR" .
# Backup env e dump DB best-effort
if [[ -f "$APP_DIR/.env" ]]; then
cp "$APP_DIR/.env" "$BASE_DIR/.env"
fi
set +e
source "$APP_DIR/.env" 2>/dev/null
if [[ -n "${DB_DATABASE:-}" && -n "${DB_USERNAME:-}" ]]; then
MYSQL_PWD="${DB_PASSWORD:-}" mysqldump \
--host="${DB_HOST:-127.0.0.1}" \
--port="${DB_PORT:-3306}" \
--user="$DB_USERNAME" \
--single-transaction \
--routines \
--triggers \
"$DB_DATABASE" > "$BASE_DIR/database.sql"
fi
set -e
cat > "$BASE_DIR/BASELINE_INFO.txt" <<EOF
version=$VERSION
created_at=$STAMP
app_dir=$APP_DIR
EOF
echo "Baseline creato: $BASE_DIR"