Skip to content

Instantly share code, notes, and snippets.

@Nill-R
Forked from peacepenguin/gitea auto update cron.txt
Last active March 28, 2022 02:20
Show Gist options
  • Save Nill-R/4c28498da324d5cc0a9b92547145341c to your computer and use it in GitHub Desktop.
Save Nill-R/4c28498da324d5cc0a9b92547145341c to your computer and use it in GitHub Desktop.
## NOTE! this works for me but has recieved very limited testing!
## Enable auto updates for GITEA:
# shell script to check github repo for "latest" tag and compare to current running gitea version
# assumes systemd is in use to manage gitea service
# assumes gitea binary file lives at: /usr/local/bin/gitea
# assumes Ubuntu 18.04 is in use (but should work on any debian / apt system)
# assumes your local gitea api instance is reachable at: "http://192.168.4.22:3000/api/v1/version"
# assumes your ok with downloading the latest binary from github without any validation
#
# install jq json query parser:
sudo apt install jq
# create a new script file:
sudo nano /opt/gitea-auto-upgrade.sh
# Put the following script into that file:
#!/usr/bin/env bash
upstreamdata=$(curl -s "https://api.github.com/repos/go-gitea/gitea/releases/latest")
upstreamver=$(echo $upstreamdata | jq -r ".tag_name")
curver=$(gitea -v|awk '{print $3}')
# use bash replacement to get rid of the "v" from the github tag to allow DIFF to work correctly:
changed=$(diff <(echo "$curver") <(echo "${upstreamver//v}"))
# check if diff output a null value or not. the statement reads: "if $changed is not null then"
if [ "$changed" != "" ]
then
echo "Installed Gitea version does not match upstream latest, beginning upgrade procedure:"
### UPGRADE ###
systemctl stop gitea
# get the current binary out of the production location:
sudo mv -f /usr/local/bin/gitea /usr/local/bin/gitea.previous
# get url for new version from the JSON data pulled from github:
newverurldata=$(echo $upstreamdata | jq -r '.assets[] | select(.name | contains("linux-amd64")).browser_download_url')
newverurl=$(echo $newverurldata |awk '{print $1}')
# download the new version
cd /tmp
wget -O gitea $newverurl
chmod +x gitea
#move the downloaded updated gitea binary to the production location:
mv gitea /usr/local/bin/gitea
# start the service:
systemctl start gitea
### UPGRADE DONE ###
echo "Gitea upgrade procedure finished"
else
echo "Installed Gitea version matches upstream latest version, no action taken"
fi
######### end script contents ##########
# set it to be executable:
sudo chmod +x /opt/gitea-auto-upgrade.sh
# run it manually once to make sure it is executable and returns correct output:
sudo /opt/gitea-auto-upgrade.sh
# open up the root crontab file:
sudo crontab -e
# add this line to the cron file, this runs the script everyday at 3am, and puts all output into the syslog
0 3 * * * /opt/gitea-auto-upgrade.sh 2>&1 | logger -t gitea-auto-upgrade
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment