scripts/update_gitea

104 lines
2.5 KiB
Plaintext
Raw Permalink Normal View History

2023-03-12 13:59:38 +03:00
#!/bin/sh
platform=linux-amd64
gitea_bin=/usr/local/bin/gitea
tmp_dir="$(mktemp -d /tmp/update_gitea_XXXXX)"
msg()
{
printf '\033[32mINFO\t%s\033[0m\n' "$*"
}
err()
{
printf '\033[31mERROR\t%s\033[0m\n' "$*"
exit 1
}
cleanup()
{
msg Clean up temporary data.
[ -d "$tmp_dir" ] && rm -rf "$tmp_dir"
}
errexit()
{
if [ "$?" -eq 0 ]; then
cleanup
exit 0
else
cleanup
err Exiting with non-zero exit code.
fi
}
is_outdated()
{
# Return 1 if Gitea is up to date.
# Return 0 if Gitea binary is outdated.
[ -x "$gitea_bin" ] || err "$gitea_bin": file not exists or not executable
current="$("$gitea_bin" --version | awk '{print $3}')"
latest="$(
curl -sSo /dev/null -w '%{redirect_url}' \
https://github.com/go-gitea/gitea/releases/latest |
cut -d / -f 8 | sed s/v//
)"
msg Current version is "${current:-ERROR}"
msg Latest version is "$latest"
if [ "$current" = "$latest" ]; then
return 1
else
return 0
fi
}
set -e
trap errexit EXIT
trap cleanup INT HUP TERM
if ! is_outdated; then
msg Gitea is up to date! Exiting.
exit 0
fi
msg Download Gitea binary
cd "$tmp_dir" || err Cannot change directory to "$tmp_dir".
wget "https://dl.gitea.com/gitea/$latest/gitea-$latest-$platform"
wget "https://dl.gitea.com/gitea/$latest/gitea-$latest-$platform.asc"
wget "https://dl.gitea.com/gitea/$latest/gitea-$latest-$platform.sha256"
msg Verify binary
sha256sum "gitea-$latest-$platform" | tee "gitea-$latest-$platform.sha256.my"
if ! diff \
"gitea-$latest-$platform.sha256" "gitea-$latest-$platform.sha256.my"; then
err Gitea binary is corrupted, please try again.
fi
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
if ! gpg --verify "gitea-$latest-$platform.asc" "gitea-$latest-$platform"; then
err 'Wrong GPG signature, please refer to' \
'https://docs.gitea.io/en-us/install-from-binary/#verify-gpg-signature'
fi
msg Stop Gitea
systemctl stop gitea.service && msg gitea.service is stopped
msg Install new Gitea binary
install -vDm755 "gitea-$latest-$platform" "$(dirname "$gitea_bin")/gitea-$latest"
ln -vfrs "$(dirname "$gitea_bin")/gitea-$latest" "$gitea_bin"
msg Start Gitea
systemctl start gitea.service
sleep 1
if systemctl is-active gitea.service >/dev/null 2>&1; then
msg gitea.service is started
systemctl status --no-pager --lines=0 gitea.service
else
systemctl status --no-pager gitea.service
fi
msg Gitea is successfully updated!