add debugging log
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 16s
All checks were successful
Docker Build Smart Logic / Build amd64 & arm64 (push) Successful in 16s
This commit is contained in:
@@ -5,33 +5,14 @@ CONFIG_FILE="$CONFIG_DIR/watchdog.conf"
|
||||
STATE_FILE="$CONFIG_DIR/watch_state.json"
|
||||
|
||||
while true; do
|
||||
# 1. Config bei jedem Durchlauf neu laden (erlaubt Änderungen ohne Neustart)
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
source "$CONFIG_FILE"
|
||||
else
|
||||
echo "Fehler: $CONFIG_FILE nicht gefunden! Warte 60s..."
|
||||
sleep 60
|
||||
continue
|
||||
echo "❌ Fehler: $CONFIG_FILE nicht gefunden!"
|
||||
sleep 60; continue
|
||||
fi
|
||||
|
||||
# Standard-Intervall falls nicht definiert (1 Stunde)
|
||||
INTERVAL=${CHECK_INTERVAL:-3600}
|
||||
|
||||
# msmtp Konfig schreiben
|
||||
cat <<EOF > /etc/msmtprc
|
||||
defaults
|
||||
auth on
|
||||
tls on
|
||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||
account default
|
||||
host $SMTP_HOST
|
||||
port $SMTP_PORT
|
||||
from $EMAIL_FROM
|
||||
user $SMTP_USER
|
||||
password $SMTP_PASS
|
||||
EOF
|
||||
chmod 600 /etc/msmtprc
|
||||
|
||||
if [ ! -f "$STATE_FILE" ] || [ ! -s "$STATE_FILE" ]; then echo "{}" > "$STATE_FILE"; fi
|
||||
|
||||
UPDATES_FOUND=""
|
||||
@@ -43,42 +24,52 @@ EOF
|
||||
OLD_VAL=$(jq -r ".[\"$KEY\"] // empty" "$STATE_FILE")
|
||||
NEW_VAL=""
|
||||
|
||||
if [ "$TYPE" == "DOCKER" ]; then
|
||||
if [[ "$REPO" == *"."* && "$REPO" == *"/"* ]]; then
|
||||
# FALL: Eigene Registry (z.B. git.pi-farm.de)
|
||||
# Wir versuchen hier den Docker-Standard-Weg über die Manifest-Config
|
||||
# Hinweis: Das funktioniert ohne Auth nur bei öffentlichen Repos!
|
||||
REGISTRY_HOST=$(echo $REPO | cut -d/ -f1)
|
||||
IMAGE_NAME=$(echo $REPO | cut -d/ -f2-)
|
||||
echo "Prüfe $TYPE: $REPO:$EXTRA..."
|
||||
|
||||
# Hole das Digest (eindeutiger Hash) des Images
|
||||
NEW_VAL=$(curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
|
||||
"https://${REGISTRY_HOST}/v2/${IMAGE_NAME}/manifests/${EXTRA}" | jq -r '.config.digest // empty')
|
||||
if [ "$TYPE" == "DOCKER" ]; then
|
||||
# Prüfen ob es Docker Hub (kein Punkt oder docker.io) oder eine eigene Registry ist
|
||||
if [[ "$REPO" != *"."* ]] || [[ "$REPO" == *"docker.io"* ]]; then
|
||||
# Docker Hub
|
||||
CLEAN_REPO=${REPO#docker.io/} # Entferne docker.io/ falls vorhanden
|
||||
[[ "$CLEAN_REPO" != *"/"* ]] && CLEAN_REPO="library/$CLEAN_REPO"
|
||||
NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${CLEAN_REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty')
|
||||
else
|
||||
# FALL: Normaler Docker Hub
|
||||
NEW_VAL=$(curl -s "https://hub.docker.com/v2/repositories/${REPO}/tags/${EXTRA}" | jq -r '.last_updated // empty')
|
||||
# Eigene Registry (V2 API)
|
||||
REG_HOST=$(echo $REPO | cut -d/ -f1)
|
||||
IMG_NAME=$(echo $REPO | cut -d/ -f2-)
|
||||
# Wir holen den Docker-Content-Digest Header (funktioniert meist ohne komplexen Token-Voodoo)
|
||||
NEW_VAL=$(curl -sI -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
|
||||
"https://${REG_HOST}/v2/${IMG_NAME}/manifests/${EXTRA}" | grep -i "Docker-Content-Digest" | awk '{print $2}' | tr -d '\r')
|
||||
fi
|
||||
elif [ "$TYPE" == "GITHUB" ]; then
|
||||
NEW_VAL=$(curl -s "https://api.github.com/repos/${REPO}/branches/${EXTRA}" | jq -r '.commit.sha // empty')
|
||||
fi
|
||||
|
||||
if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then continue; fi
|
||||
# Debug-Ausgabe falls leer
|
||||
if [ -z "$NEW_VAL" ] || [ "$NEW_VAL" == "null" ]; then
|
||||
echo " ⚠️ Konnte keine Daten für $REPO abrufen (API-Antwort leer)."
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ -n "$OLD_VAL" ] && [ "$OLD_VAL" != "$NEW_VAL" ]; then
|
||||
MSG="Update für $REPO ($EXTRA)! Alt: $OLD_VAL | Neu: $NEW_VAL"
|
||||
echo " 🔔 $MSG"
|
||||
UPDATES_FOUND="${UPDATES_FOUND}${MSG}\n"
|
||||
else
|
||||
echo " ✅ Aktuell."
|
||||
fi
|
||||
|
||||
# Speichern
|
||||
TEMP_JSON=$(jq ".[\"$KEY\"] = \"$NEW_VAL\"" "$STATE_FILE")
|
||||
echo "$TEMP_JSON" > "$STATE_FILE"
|
||||
done
|
||||
|
||||
# Mail senden
|
||||
# Mail-Versand (bleibt gleich)
|
||||
if [ -n "$UPDATES_FOUND" ]; then
|
||||
echo -e "Subject: Watchdog Alert\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO"
|
||||
# SMTP Konfig schreiben (msmtp Logik hier einfügen wie zuvor...)
|
||||
echo -e "Subject: Watchdog Alert\n\n$UPDATES_FOUND" | msmtp "$EMAIL_TO"
|
||||
fi
|
||||
|
||||
echo "Check beendet. Nächster Scan in $INTERVAL Sekunden."
|
||||
echo "Check beendet. Nächster Scan in $INTERVAL s."
|
||||
sleep "$INTERVAL"
|
||||
done
|
||||
Reference in New Issue
Block a user