From 1994f7b030900ad579a2b6a873f537e26c229ba3 Mon Sep 17 00:00:00 2001 From: Josevi Date: Thu, 17 Sep 2026 18:58:37 +0200 Subject: [PATCH] =?UTF-8?q?pkgsync:=20a=C3=B1ade=20aviso=20por=20Gotify=20?= =?UTF-8?q?a=20los=20fallos,=20adem=C3=A1s=20de=20notify-send?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit notify-send depende de la sesión gráfica -- poco fiable justo cuando push falla en ExecStop durante el apagado (sesión/D-Bus cayéndose). notify_fail() ahora también hace POST a push.josevi.ovh (mismo Gotify que ya usa WUD para avisos de actualizaciones), best-effort con timeout corto, leyendo el token de ~/.config/pkgsync/gotify.env -- fichero local-only, nunca tracked (mismo criterio que overrides.local.toml), con scaffold comentado en bootstrap. De paso: durante la verificación se descubrió que notify-send llevaba tiempo fallando en silencio en esta máquina (applet de Notifications ausente de shownItems/extraItems en el systray) -- arreglado aparte, no es parte de este commit. Co-Authored-By: Claude Sonnet 5 --- pkgsync/pkgsync.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pkgsync/pkgsync.sh b/pkgsync/pkgsync.sh index f392ec2..d17ee2c 100644 --- a/pkgsync/pkgsync.sh +++ b/pkgsync/pkgsync.sh @@ -29,6 +29,12 @@ OVERRIDES_FILE="$METAPAC_CONFIG_DIR/groups/overrides.local.toml" # borra en el primer push que vuelve a tener éxito. FAIL_MARKER="$HOME/.local/share/pkgsync.failed" +# Token de Gotify (push.josevi.ovh, mismo servidor que usa WUD) para avisos +# de fallo -- llega también sin sesión gráfica, a diferencia de notify-send. +# Fichero local-only, nunca tracked (ni chezmoi ni el repo arch-setup): +# mismo criterio que OVERRIDES_FILE. Si no existe, se omite sin más. +GOTIFY_ENV="$HOME/.config/pkgsync/gotify.env" + # flatpak sin --user/--system instala en "system" con la config actual de # install_flatpaks() en packages-common.sh. Si tu máquina usa --user, cambia # esto (o verifica con: flatpak list --columns=installation,application). @@ -235,6 +241,22 @@ notify_fail() { echo "!! $1: $2" >&2 printf '%s -- %s: %s\n' "$(date -Iseconds)" "$1" "$2" >"$FAIL_MARKER" command -v notify-send &>/dev/null && timeout 5 notify-send --app-name=pkgsync --urgency=critical "$1" "$2" + notify_gotify "$1" "$2" +} + +# Best-effort, nunca bloquea ni hace fallar el caller: mismo espíritu que el +# timeout de notify-send de arriba, pero via HTTPS -- llega aunque D-Bus/la +# sesión gráfica ya esté cayéndose (caso ExecStop en apagado) o no haya +# sesión gráfica en absoluto. +notify_gotify() { + [[ -f "$GOTIFY_ENV" ]] || return 0 + local GOTIFY_URL GOTIFY_TOKEN + # shellcheck disable=SC1090 + source "$GOTIFY_ENV" + [[ -n "${GOTIFY_URL:-}" && -n "${GOTIFY_TOKEN:-}" ]] || return 0 + timeout 10 curl -fsS --max-time 8 \ + -F "title=$1" -F "message=$2" -F "priority=8" \ + "${GOTIFY_URL%/}/message?token=${GOTIFY_TOKEN}" >/dev/null 2>&1 } # --- subcomandos -------------------------------------------------------------- @@ -284,6 +306,19 @@ EOF echo ">> scaffold de $OVERRIDES_FILE creado (vacío, edítalo a mano)" fi + if [[ ! -f "$GOTIFY_ENV" ]]; then + mkdir -p "$(dirname "$GOTIFY_ENV")" + cat >"$GOTIFY_ENV" <<'EOF' +# Token de aplicación Gotify para los avisos de fallo de pkgsync (push.josevi.ovh). +# Crea una Application nueva en la UI de Gotify y pega su token aquí. +# Fichero local-only: pkgsync nunca lo lee/escribe salvo aquí, no viaja al repo. +#GOTIFY_URL="https://push.josevi.ovh" +#GOTIFY_TOKEN="pon-aqui-el-token" +EOF + chmod 600 "$GOTIFY_ENV" + echo ">> scaffold de $GOTIFY_ENV creado (comentado, edítalo a mano para activar avisos por Gotify)" + fi + if [[ ! -d "$REPO_DIR/.git" ]]; then echo ">> clonando arch-setup en $REPO_DIR..." git clone "$REPO_URL" "$REPO_DIR"