From 050983c34557f2b6512d74b4255df225ca0aeb32 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 23 Mar 2025 20:54:06 -0400 Subject: [PATCH] Improve auto-update script with better error handling and version extraction --- ansible/templates/update-forgejo.sh.j2 | 44 ++++++++++++++++++-------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/ansible/templates/update-forgejo.sh.j2 b/ansible/templates/update-forgejo.sh.j2 index 5201399..98d691e 100644 --- a/ansible/templates/update-forgejo.sh.j2 +++ b/ansible/templates/update-forgejo.sh.j2 @@ -6,7 +6,6 @@ set -e LOG_FILE="{{ forgejo_data_dir }}/logs/update.log" COMPOSE_FILE="{{ forgejo_data_dir }}/docker-compose.yml" -CURRENT_VERSION=$(docker inspect --format='{% raw %}{{.Config.Image}}{% endraw %}' forgejo | awk -F':' '{print $2}') # Create log directory if it doesn't exist mkdir -p "{{ forgejo_data_dir }}/logs" @@ -48,19 +47,32 @@ backup_forgejo() { get_latest_version() { log "Checking for the latest Forgejo version..." - # Fetch the latest version from the Forgejo API - LATEST_VERSION=$(curl -s https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -o '\"tag_name\":\"[^\"]*' | cut -d'\"' -f4 | sed 's/^v//') + # Fetch the latest version from the Forgejo API with error handling + local latest_version + latest_version=$(curl -s --max-time 10 https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | \ + grep -o '"tag_name":"v[0-9.]*' | \ + sed 's/"tag_name":"v//' || true) - if [ -z "$LATEST_VERSION" ]; then - log "ERROR: Failed to retrieve the latest version. Exiting." + if [ -z "$latest_version" ]; then + log "ERROR: Failed to retrieve the latest version from Codeberg API." exit 1 fi - log "Latest version: $LATEST_VERSION" - log "Current version: $CURRENT_VERSION" + echo "$latest_version" +} + +# Get current Forgejo version +get_current_version() { + local current_version + current_version=$(docker inspect --format='{% raw %}{{.Config.Image}}{% endraw %}' forgejo | \ + awk -F':' '{print $2}' || true) - # Return the latest version - echo "$LATEST_VERSION" + if [ -z "$current_version" ]; then + log "ERROR: Failed to retrieve the current Forgejo version." + exit 1 + fi + + echo "$current_version" } # Update Forgejo to the latest version @@ -84,15 +96,17 @@ update_forgejo() { # Update the docker-compose file with the new version log "Updating docker-compose.yml with the new version..." - sed -i "s/codeberg.org\/forgejo\/forgejo:[0-9]*\.[0-9]*\.[0-9]*/codeberg.org\/forgejo\/forgejo:$latest_version/g" "$COMPOSE_FILE" + sed -i "s/codeberg.org\/forgejo\/forgejo:[0-9.]*\+*/codeberg.org\/forgejo\/forgejo:$latest_version/g" "$COMPOSE_FILE" # Restart Forgejo with the new version log "Restarting Forgejo with the new version..." cd "{{ forgejo_data_dir }}" && docker-compose down && docker-compose up -d + # Wait for container to restart and verify + sleep 15 + # Verify the update - sleep 10 - NEW_VERSION=$(docker inspect --format='{% raw %}{{.Config.Image}}{% endraw %}' forgejo | awk -F':' '{print $2}') + NEW_VERSION=$(get_current_version) if [ "$NEW_VERSION" = "$latest_version" ]; then log "Forgejo successfully updated to version $latest_version" @@ -106,9 +120,13 @@ update_forgejo() { # Main execution log "=== Forgejo Auto-Update Script Started ===" -# Get the latest version +# Get versions +CURRENT_VERSION=$(get_current_version) LATEST_VERSION=$(get_latest_version) +log "Current version: $CURRENT_VERSION" +log "Latest version: $LATEST_VERSION" + # Compare versions and update if needed if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then log "A new version is available. Updating from $CURRENT_VERSION to $LATEST_VERSION..."