You've already forked gitea-updater-ubuntu
199 lines
3.6 KiB
Bash
Executable File
199 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Author : Allan Christensen
|
|
# First Created : 14-02-2026 (DD-MM-YYYY)
|
|
# Description : Updates Gitea Single And Multi Instances On Ubuntu 24.04
|
|
# License : MIT License
|
|
|
|
#
|
|
# Are we root
|
|
#
|
|
if [[ $(id -u) -ne 0 ]]; then echo "" && echo "Must be root or use sudo" && echo "" ; exit ; fi
|
|
|
|
#
|
|
# Variables
|
|
#
|
|
giteabin="/usr/local/bin/gitea"
|
|
logdir="/var/log/gitea"
|
|
logfile="$logdir/giteaupdate.log"
|
|
backupdir="/var/log/gitea"
|
|
log_date_format="+%Y-%m-%d-%H%M%S"
|
|
|
|
#
|
|
# Prepare logging
|
|
#
|
|
mkdir -p "$logdir"
|
|
touch "$logfile"
|
|
chmod 640 "$logfile"
|
|
|
|
#
|
|
# Detect interactive mode
|
|
#
|
|
if [[ -t 1 ]]; then
|
|
interactive=true
|
|
else
|
|
interactive=false
|
|
fi
|
|
|
|
#
|
|
# Redirect all output to logfile
|
|
#
|
|
exec >>"$logfile" 2>&1
|
|
|
|
echo ""
|
|
echo "============================================================"
|
|
echo "Gitea update run : $(date)"
|
|
echo "============================================================"
|
|
|
|
#
|
|
# Logging helper
|
|
#
|
|
log() {
|
|
echo "$1"
|
|
if [[ "$interactive" == true ]]; then
|
|
echo "$1" > /dev/tty
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Check Gitea binary exists
|
|
#
|
|
if [[ ! -x "$giteabin" ]]; then
|
|
log ""
|
|
log "Gitea binary not found at $giteabin — aborting."
|
|
log ""
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Get installed version
|
|
#
|
|
installed_version=$("$giteabin" -v 2>/dev/null | awk '{print $3}')
|
|
|
|
if [[ -z "$installed_version" ]]; then
|
|
log ""
|
|
log "Could not determine installed Gitea version — aborting."
|
|
log ""
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Get latest version
|
|
#
|
|
latest_version=$(curl -fsSL https://dl.gitea.com/gitea/version.json | grep -oP '"version"\s*:\s*"\K[^"]+')
|
|
|
|
if [[ -z "$latest_version" ]]; then
|
|
log ""
|
|
log "Could not determine latest Gitea version — aborting."
|
|
log ""
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Compare versions
|
|
#
|
|
log ""
|
|
log "Installed version : $installed_version"
|
|
log "Latest version : $latest_version"
|
|
|
|
if [[ "$installed_version" == "$latest_version" ]]; then
|
|
log ""
|
|
log "Already up to date. Nothing to do."
|
|
log ""
|
|
exit 0
|
|
fi
|
|
|
|
log ""
|
|
log "Updating Gitea to version $latest_version"
|
|
|
|
#
|
|
# Detect running Gitea services
|
|
#
|
|
mapfile -t running_services < <(
|
|
systemctl list-units --type=service --state=running --no-legend |
|
|
awk '{print $1}' | grep '^gitea'
|
|
)
|
|
|
|
#
|
|
# Download new binary
|
|
#
|
|
tmpbin="${giteabin}.new"
|
|
|
|
log ""
|
|
log "Downloading new Gitea binary..."
|
|
|
|
curl -fL "https://dl.gitea.com/gitea/${latest_version}/gitea-${latest_version}-linux-amd64" -o "$tmpbin" \
|
|
|| { log "Download failed — aborting." ; exit 1 ; }
|
|
|
|
chmod 755 "$tmpbin"
|
|
|
|
#
|
|
# Validate downloaded binary
|
|
#
|
|
log "Validating downloaded binary..."
|
|
if ! "$tmpbin" -v >/dev/null 2>&1; then
|
|
log "Downloaded binary failed validation — aborting."
|
|
rm -f "$tmpbin"
|
|
exit 1
|
|
fi
|
|
log "Binary validation successful."
|
|
|
|
#
|
|
# Stop running services
|
|
#
|
|
if [[ ${#running_services[@]} -gt 0 ]]; then
|
|
log ""
|
|
log "Stopping running Gitea services..."
|
|
for svc in "${running_services[@]}"; do
|
|
log "Stopping $svc"
|
|
systemctl stop "$svc"
|
|
done
|
|
else
|
|
log ""
|
|
log "No running Gitea services detected."
|
|
fi
|
|
|
|
#
|
|
# Backup current binary
|
|
#
|
|
mkdir -p "$backupdir"
|
|
backupfile="$backupdir/giteaupdate-binary.log.$(date "$log_date_format")"
|
|
cp -p "$giteabin" "$backupfile"
|
|
|
|
log ""
|
|
log "Backup saved to: $backupfile"
|
|
|
|
#
|
|
# Replace binary
|
|
#
|
|
mv "$tmpbin" "$giteabin"
|
|
chmod 755 "$giteabin"
|
|
|
|
#
|
|
# Start services that were previously running
|
|
#
|
|
if [[ ${#running_services[@]} -gt 0 ]]; then
|
|
log ""
|
|
log "Starting Gitea services..."
|
|
for svc in "${running_services[@]}"; do
|
|
log "Starting $svc"
|
|
systemctl start "$svc"
|
|
done
|
|
|
|
log ""
|
|
log "Restarted services: ${running_services[*]}"
|
|
fi
|
|
|
|
log ""
|
|
log "Update complete."
|
|
log ""
|
|
|
|
#
|
|
# All done
|
|
#
|
|
printf "\nAll Done...\n"
|
|
|
|
#
|
|
# End of script
|
|
#
|