43 lines
1.7 KiB
Bash
Executable file
43 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
root_dir="$(cd "$(dirname "$0")/.." && pwd)"
|
|
release_archive="${1:-}"
|
|
if [[ -z "$release_archive" || ! -f "$release_archive" ]]; then
|
|
echo "Usage: $0 /chemin/vers/globinours.tar.gz" >&2
|
|
exit 2
|
|
fi
|
|
if [[ ! -f "$root_dir/public/index.php" || ! -f "$root_dir/VERSION" ]]; then
|
|
echo "Installation Globinours invalide: $root_dir" >&2
|
|
exit 2
|
|
fi
|
|
|
|
stage_dir="$(mktemp -d /tmp/globinours-update-XXXXXX)"
|
|
trap 'rm -rf "$stage_dir"; rm -f "$root_dir/storage/maintenance.flag"' EXIT
|
|
if tar -tzf "$release_archive" | grep -Eq '(^/|(^|/)\.\.(/|$))'; then
|
|
echo "Archive refusée: chemin dangereux." >&2
|
|
exit 3
|
|
fi
|
|
tar -xzf "$release_archive" -C "$stage_dir"
|
|
source_dir="$stage_dir"
|
|
if [[ ! -f "$source_dir/public/index.php" ]]; then
|
|
first_dir="$(find "$stage_dir" -mindepth 1 -maxdepth 1 -type d | head -n 1)"
|
|
source_dir="$first_dir"
|
|
fi
|
|
if [[ ! -f "$source_dir/public/index.php" || ! -f "$source_dir/VERSION" ]]; then
|
|
echo "Archive Globinours invalide." >&2
|
|
exit 3
|
|
fi
|
|
|
|
mkdir -p "$root_dir/storage/releases"
|
|
current_version="$(tr -d '[:space:]' < "$root_dir/VERSION")"
|
|
new_version="$(tr -d '[:space:]' < "$source_dir/VERSION")"
|
|
rollback_archive="$root_dir/storage/releases/code-${current_version}-$(date +%Y%m%d-%H%M%S).tar.gz"
|
|
php "$root_dir/scripts/backup.php" pre-upgrade
|
|
tar --exclude='./data' --exclude='./storage' --exclude='./public/media' --exclude='./.env' -czf "$rollback_archive" -C "$root_dir" .
|
|
touch "$root_dir/storage/maintenance.flag"
|
|
rsync -a --delete --exclude=data --exclude=storage --exclude=public/media --exclude=.env "$source_dir/" "$root_dir/"
|
|
php "$root_dir/scripts/migrate.php"
|
|
rm -f "$root_dir/storage/maintenance.flag"
|
|
echo "Globinours $current_version -> $new_version"
|
|
echo "Retour arrière du code: $rollback_archive"
|