code: report update status

This commit is contained in:
2025-12-28 23:51:20 +01:00
parent 37087e7925
commit 132604de2d
3 changed files with 26 additions and 0 deletions

View File

@ -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 <<JSON
{"device_id":"$(hostname)","version":"${VERSION}","status":"${status}","error":"${error}","timestamp":"${timestamp}"}
JSON
)
if [[ -n "${UPDATE_TOKEN}" ]]; then
curl -sS -X POST -H "Authorization: Bearer ${UPDATE_TOKEN}" -H "Content-Type: application/json" \
-d "${payload}" "${STATUS_URL}" >/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