101 lines
2.1 KiB
Bash
Executable File
101 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Apply a versioned upgrade on production-like environments.
|
|
# Usage:
|
|
# scripts/ops/netgescon-upgrade-apply.sh --tag v1.3.0 --app-dir /var/www/netgescon
|
|
|
|
TAG=""
|
|
APP_DIR="/var/www/netgescon"
|
|
BACKUP_DIR="/var/backups/netgescon"
|
|
RUN_MIGRATIONS="yes"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--tag)
|
|
TAG="$2"
|
|
shift 2
|
|
;;
|
|
--app-dir)
|
|
APP_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--backup-dir)
|
|
BACKUP_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--skip-migrations)
|
|
RUN_MIGRATIONS="no"
|
|
shift 1
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ -z "$TAG" ]]; then
|
|
echo "Usage: $0 --tag <version-tag> [--app-dir /var/www/netgescon] [--backup-dir /var/backups/netgescon] [--skip-migrations]"
|
|
exit 1
|
|
fi
|
|
|
|
STAMP="$(date +"%Y%m%d-%H%M%S")"
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
pushd "$APP_DIR" >/dev/null
|
|
|
|
if [[ ! -f artisan ]]; then
|
|
echo "Error: '$APP_DIR' is not a Laravel app (artisan not found)."
|
|
exit 1
|
|
fi
|
|
|
|
# Load DB settings from .env for local mysqldump backup.
|
|
if [[ -f .env ]]; then
|
|
# shellcheck disable=SC1091
|
|
set -a
|
|
source .env
|
|
set +a
|
|
fi
|
|
|
|
DB_HOST="${DB_HOST:-127.0.0.1}"
|
|
DB_PORT="${DB_PORT:-3306}"
|
|
DB_DATABASE="${DB_DATABASE:-}"
|
|
DB_USERNAME="${DB_USERNAME:-}"
|
|
DB_PASSWORD="${DB_PASSWORD:-}"
|
|
|
|
if [[ -n "$DB_DATABASE" && -n "$DB_USERNAME" ]]; then
|
|
echo "Creating DB backup..."
|
|
MYSQL_PWD="$DB_PASSWORD" mysqldump \
|
|
--host="$DB_HOST" \
|
|
--port="$DB_PORT" \
|
|
--user="$DB_USERNAME" \
|
|
--single-transaction \
|
|
--routines \
|
|
--triggers \
|
|
"$DB_DATABASE" > "$BACKUP_DIR/db-${STAMP}.sql"
|
|
fi
|
|
|
|
# Backup mutable app data.
|
|
echo "Creating storage and env backup..."
|
|
tar -czf "$BACKUP_DIR/app-${STAMP}.tar.gz" storage .env
|
|
|
|
echo "Updating code to tag $TAG..."
|
|
git fetch --tags origin
|
|
|
|
git checkout "$TAG"
|
|
|
|
composer install --no-dev --optimize-autoloader
|
|
|
|
if [[ "$RUN_MIGRATIONS" == "yes" ]]; then
|
|
php artisan migrate --force
|
|
fi
|
|
|
|
php artisan optimize:clear
|
|
php artisan optimize
|
|
|
|
popd >/dev/null
|
|
|
|
echo "Upgrade completed successfully on tag $TAG"
|
|
echo "Backups saved in $BACKUP_DIR"
|