Ajoute les mises à jour autonomes
Les installations hors YunoHost peuvent désormais vérifier et installer une release Forgejo avec sauvegarde et retour arrière complet.
This commit is contained in:
parent
f41504c852
commit
53e79a72d7
25 changed files with 1146 additions and 61 deletions
|
|
@ -2,42 +2,4 @@
|
|||
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"
|
||||
exec php "$root_dir/scripts/update.php" "$@"
|
||||
|
|
|
|||
Loading…
Reference in a new issue