#!/bin/bash set -e REPO_URL="https://git.geronzi.fr" OWNER="geronzi" REPO="full_updater" TOKEN_FILE="/etc/full-updater/token" CONFIG_FILE="/etc/full-updater/config.ini" INSTALLED_VERSION=$(dpkg -s full-updater 2>/dev/null | grep "^Version:" | awk '{print $2}' || echo "0.0.0") echo "=== Full Updater Update ===" echo "Version installée : ${INSTALLED_VERSION}" # Build API headers HEADERS=(-H "Content-Type: application/json") if [ -f "$TOKEN_FILE" ]; then TOKEN=$(cat "$TOKEN_FILE" | tr -d '[:space:]') HEADERS+=("-H" "Authorization: token ${TOKEN}") fi # Fetch latest release API_URL="${REPO_URL}/api/v1/repos/${OWNER}/${REPO}/releases/latest" echo "Recherche de la dernière release..." RESPONSE=$(curl -s -L "${HEADERS[@]}" "$API_URL") if [ -z "$RESPONSE" ] || echo "$RESPONSE" | grep -q "Not Found"; then echo "Erreur : impossible de récupérer la dernière release." echo "Vérifiez l'URL : $API_URL" echo "Pour un repo privé, créez /etc/full-updater/token avec un token d'accès Forgejo." exit 1 fi LATEST_TAG=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('tag_name',''))") if [ -z "$LATEST_TAG" ]; then echo "Erreur : aucune release trouvée." exit 1 fi LATEST_VERSION=${LATEST_TAG#v} echo "Dernière version : ${LATEST_VERSION}" if [ "$INSTALLED_VERSION" = "$LATEST_VERSION" ]; then echo "✅ Full Updater est déjà à jour (${INSTALLED_VERSION})." exit 0 fi # Find .deb asset ASSET_URL=$(echo "$RESPONSE" | python3 -c " import sys, json d = json.load(sys.stdin) for a in d.get('assets', []): if a['name'].endswith('.deb'): print(a['browser_download_url']) break ") if [ -z "$ASSET_URL" ]; then echo "Erreur : aucun fichier .deb trouvé dans la release ${LATEST_TAG}." exit 1 fi TMP_DEB="/tmp/full-updater-${LATEST_VERSION}.deb" echo "Téléchargement de ${ASSET_URL}..." curl -s -L -o "$TMP_DEB" "${HEADERS[@]}" "$ASSET_URL" echo "Installation..." dpkg -i "$TMP_DEB" apt-get install -f -y rm -f "$TMP_DEB" echo "✅ Mise à jour terminée : ${INSTALLED_VERSION} → ${LATEST_VERSION}"