pkgsync: añade aviso por Gotify a los fallos, además de notify-send

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 <noreply@anthropic.com>
This commit is contained in:
Josevi
2026-09-17 18:58:37 +02:00
co-authored by Claude Sonnet 5
parent 56742247ce
commit 1994f7b030
+35
View File
@@ -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"