diff --git a/uberspace-gitea-installer.sh b/uberspace-gitea-installer.sh index a2055ca..8cece80 100644 --- a/uberspace-gitea-installer.sh +++ b/uberspace-gitea-installer.sh @@ -40,6 +40,7 @@ function install_gitea --config "/home/${USER}/gitea/custom/conf/app.ini" uberspace web backend set / --http --port 9000 uberspace web backend list + install_update_script printf "You can now access your $APP_NAME by directing you Browser to: \n https://%s.uber.space \n" "$USER" } @@ -132,6 +133,111 @@ function verify_file fi } +function install_update_script +{ + cat << 'end_of_content' > ~/bin/gitea-update +#!/usr/bin/env bash + +APP_NAME=Gitea +GITEA_LOCATION=$HOME/gitea/gitea +TMP_LOCATION=$HOME/tmp +GPG_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2 + +ORG=go-gitea # Organisation or GitHub user +REPO=gitea +GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest + +function get_local_version +{ + LOCAL_VERSION=$($GITEA_LOCATION --version | + awk '{print $3}') +} + +function get_latest_version +{ + curl --silent $GITHUB_API_URL > $TMP_LOCATION/github_api_response.json + TAG_NAME=$(jq --raw-output '.tag_name' $TMP_LOCATION/github_api_response.json) + LATEST_VERSION=${TAG_NAME:1} + DOWNLOAD_URL=$(jq --raw-output '.assets[].browser_download_url' $TMP_LOCATION/github_api_response.json | + grep --max-count=1 "linux-amd64") +} + +function get_signature_file +{ + SIGNATURE_FILE_URL=$(jq --raw-output '.assets[].browser_download_url' $TMP_LOCATION/github_api_response.json | + grep "linux-amd64.asc") + rm $TMP_LOCATION/github_api_response.json + wget --output-document $TMP_LOCATION/gitea.asc "$SIGNATURE_FILE_URL" +} + +function verify_file +{ + get_signature_file + + ## downloading public key if it does not already exist + if ! gpg --fingerprint $GPG_KEY_FINGERPRINT + then + ## currently the key download via gpg does not work on Uberspace + #gpg --keyserver keys.openpgp.org --recv $GPG_KEY_FINGERPRINT + curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$GPG_KEY_FINGERPRINT | gpg --import + echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust + fi + + if gpg --verify $TMP_LOCATION/gitea.asc $TMP_LOCATION/gitea + then rm $TMP_LOCATION/gitea.asc; return 0 + else echo "gpg verification results in a BAD signature"; exit 1 + fi +} + +function do_update_procedure +{ + wget --output-document $TMP_LOCATION/gitea "$DOWNLOAD_URL" + verify_file + systemctl stop gitea + mv $TMP_LOCATION/gitea "$GITEA_LOCATION" + chmod u+x --verbose "$GITEA_LOCATION" + echo "Start gitea for upgrade" + systemctl start gitea + echo "Waiting for 10 seconds…" + sleep 10 + echo "Restart gitea" + systemctl restart gitea +} + +## this is a helper function to compare two versions as a "lower than" operator +function version_lt +{ + test "$(echo "$@" | + tr " " "n" | + sort --version-sort --reverse | + head --lines=1)" != "$1" +} + +function main +{ + get_local_version + get_latest_version + + if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ] + then + echo "Your $APP_NAME is already up to date." + echo "You are running $APP_NAME $LOCAL_VERSION" + else + if version_lt "$LOCAL_VERSION" "$LATEST_VERSION" + then + echo "There is a new version available." + echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION" + do_update_procedure + fi + fi +} + +main "${@}" +exit $? +end_of_content + chmod u+x --verbose ~/bin/gitea-update +} + function yes-no_question { local question=$1