firefish/update.sh
naskya d14bc4fb13
dev: rename --skip-all-confirmations to --install
This option is meant to be used only for the first build,
where users follow the installation/migration
instructions and prepare the necessary things like PGroonga
and it's safe to skip previous notes.

Skipping 'Did you stop your server?' in normal
updates should be done with another option,
which will be added accordingly.
2024-01-09 19:52:01 +09:00

103 lines
2.4 KiB
Bash
Executable file

#!/bin/sh
set -eu
. neko/update/utils
say 'Start upgrading Firefish!'
br
# Apply patches
run './neko/update/patch.sh'
br
# Pull changes
## git pull
OLD_COMMIT=$(git rev-parse --short HEAD)
say 'Pulling changes from the remote repo...'
run 'git checkout -- package.json packages/backend/assets'
run 'git pull --ff --no-edit --autostash --strategy-option theirs'
NEW_COMMIT=$(git rev-parse --short HEAD)
if [ "${OLD_COMMIT}" != "${NEW_COMMIT}" ]; then
run "git log --no-merges --reverse --format='%s (by %an)' ${OLD_COMMIT}..${NEW_COMMIT} > neko/volume/CHANGELOG"
fi
say 'Pulled successfully!'
br
## check if the update script itself is updated
say 'Checking if the update script itself has been modified by this update...'
if [ "$(git diff "${OLD_COMMIT}" "${NEW_COMMIT}" update.sh neko/update)" != '' ]; then
say 'Oh meow, that seems to be the case.'
sadsay "I'm sorry to bother you, but please run this script again!"
exit 1
else
say 'This script seems to be up-to-date!'
br
fi
## show messages
for message in $(find neko/messages -type f ! -name '*.resolved' -print | sort); do
file=$(basename -- "${message}")
if [ ! -f "neko/flags/${file}" ]; then
if contains '--install' "$@"; then
touch "neko/flags/${file}"
else
say 'There is an important notice!'
cat "${message}"
say 'Continue? (Are you ready for upgrading?)'
printf '[y/N] > '
read -r yn
case "${yn}" in
[Yy]|[Yy][Ee][Ss])
touch "neko/flags/${file}"
say "Let's go!"
say "To read the message again, run: \$ cat ${message}"
br
;;
*)
say "Okay, please run this script again when you're ready!"
exit 1
;;
esac
fi
fi
done
docker_update() {
./neko/update/container.sh 'docker' "$@"
}
podman_update() {
./neko/update/container.sh 'podman' "$@"
}
native_update() {
./neko/update/native.sh "$@"
}
if contains '--docker' "$@"; then docker_update "$@"
elif contains '--podman' "$@"; then podman_update "$@"
elif contains '--native' "$@"; then native_update "$@"
else
say 'Do you use Docker or Podman?'
printf 'd: Docker, p: Podman, n: No [d/p/N] > '
read -r resp
case "${resp}" in
[Yy]|[Yy][Ee][Ss])
sadsay "Watch out! ${resp} is not a valid answer." >&2
exit 2
;;
[Dd]) docker_update "$@" ;;
[Pp]) podman_update "$@" ;;
*) native_update "$@" ;;
esac
fi
# Done
say 'Enjoy your sabakan life~'