diff --git a/CHANGELOG.md b/CHANGELOG.md index c343ab0..e76f8c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ By: Codex (GPT-5) | 28.12.2025 | 📝 Req | ID: Update-Flow fuer Client dokumentiert. By: Codex (GPT-5) | | 28.12.2025 | 📝 Req | ID: Update-Flow Prototyp dokumentiert. By: Codex (GPT-5) | | 28.12.2025 | 📝 Req | ID: Update-Status-Schema dokumentiert. By: Codex (GPT-5) | +| 28.12.2025 | ⚙️ Code | ID: Update-Status-URL und Report im Client-Prototyp. By: Codex (GPT-5) | | 28.12.2025 | ⚙️ Code | ID: Update-Client Prototyp-Skript hinzugefuegt. By: Codex (GPT-5) | --- diff --git a/backend/settings.py b/backend/settings.py index 1878e03..73a2ba7 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -42,6 +42,9 @@ class Settings: self.update_url: str = os.getenv("SKD_UPDATE_URL", "https://update.wlkns.org") self.update_token: str = os.getenv("SKD_UPDATE_TOKEN", "") self.update_interval: int = int(os.getenv("SKD_UPDATE_INTERVAL", "3600")) + self.update_status_url: str = os.getenv( + "SKD_UPDATE_STATUS_URL", "https://update.wlkns.org/status" + ) # Paths/tools self.notify_send_path: str = os.getenv("SKD_NOTIFY_SEND_PATH", "notify-send") self.sound_player: str = os.getenv("SKD_SOUND_PLAYER", "paplay") diff --git a/scripts/update_client.sh b/scripts/update_client.sh index b9aea5c..2e0195d 100755 --- a/scripts/update_client.sh +++ b/scripts/update_client.sh @@ -4,6 +4,7 @@ set -euo pipefail SERVICE_NAME="${SERVICE_NAME:-skd}" UPDATE_URL="${SKD_UPDATE_URL:-https://update.wlkns.org}" UPDATE_TOKEN="${SKD_UPDATE_TOKEN:-}" +STATUS_URL="${SKD_UPDATE_STATUS_URL:-https://update.wlkns.org/status}" INSTALL_DIR="${INSTALL_DIR:-/opt/sk}" STAGING_DIR="" MANIFEST_FILE="" @@ -14,6 +15,24 @@ log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } +report_status() { + local status="$1" + local error="${2:-}" + local timestamp + timestamp="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" + local payload + payload=$(cat </dev/null || true + else + curl -sS -X POST -H "Content-Type: application/json" -d "${payload}" "${STATUS_URL}" >/dev/null || true + fi +} + cleanup() { if [[ -n "${STAGING_DIR}" && -d "${STAGING_DIR}" ]]; then rm -rf "${STAGING_DIR}" @@ -80,6 +99,7 @@ log "Verifying checksum..." CALC_SHA="$(sha256sum "${ARTIFACT_FILE}" | awk '{print $1}')" if [[ "${CALC_SHA}" != "${ARTIFACT_SHA256}" ]]; then echo "Checksum mismatch: expected ${ARTIFACT_SHA256} got ${CALC_SHA}" >&2 + report_status "failed" "checksum mismatch" exit 1 fi @@ -101,6 +121,7 @@ STAGING_DIR="" log "Starting service ${SERVICE_NAME}..." if sudo systemctl start "${SERVICE_NAME}.service"; then log "Update applied successfully." + report_status "success" "" else log "Service failed to start, rolling back..." sudo rm -rf "${INSTALL_DIR}" @@ -108,5 +129,6 @@ else sudo mv "${BACKUP_DIR}" "${INSTALL_DIR}" fi sudo systemctl start "${SERVICE_NAME}.service" || true + report_status "failed" "service start failed" exit 1 fi