| 1 | #!/bin/sh |
| 2 | # Instant auto-update: poll the registry and redeploy a container as soon as |
| 3 | # its published image differs from what is running. Cron runs this every 2 min |
| 4 | # (/boot/config/plugins/dynamix/registry-autoupdate.cron). |
| 5 | # Skips entirely while a CI job container is active: recreating gitgudlab would |
| 6 | # kill the registry mid-push, and the runner must not recreate itself mid-job |
| 7 | # (redeploy-gitgudlab-runner.sh also guards this itself). |
| 8 | |
| 9 | LOCK=/var/run/registry-autoupdate.lock |
| 10 | mkdir "$LOCK" 2>/dev/null || exit 0 |
| 11 | trap 'rmdir "$LOCK"' EXIT |
| 12 | |
| 13 | if docker ps --format '{{.Names}}' | grep -q '^gitgud-job-'; then |
| 14 | exit 0 |
| 15 | fi |
| 16 | |
| 17 | check() { |
| 18 | name=$1; ref=$2; script=$3 |
| 19 | docker pull -q "$ref" >/dev/null 2>&1 || return 0 |
| 20 | latest=$(docker image inspect --format '{{.Id}}' "$ref" 2>/dev/null) || return 0 |
| 21 | running=$(docker inspect --format '{{.Image}}' "$name" 2>/dev/null) |
| 22 | if [ "$latest" != "$running" ]; then |
| 23 | logger -t registry-autoupdate "updating $name ($running -> $latest)" |
| 24 | if sh "$script" >/dev/null 2>&1; then |
| 25 | logger -t registry-autoupdate "$name updated" |
| 26 | else |
| 27 | logger -t registry-autoupdate "$name redeploy failed or refused, will retry" |
| 28 | fi |
| 29 | fi |
| 30 | } |
| 31 | |
| 32 | check gitgudlab git.nas.home.htl-sky.net/permissionbrick/gitgudlab:latest /boot/config/redeploy-gitgudlab.sh |
| 33 | check gitgudlab-runner git.nas.home.htl-sky.net/permissionbrick/gitgudlab:runner-latest /boot/config/redeploy-gitgudlab-runner.sh |
| 34 | check sillytavern ghcr.io/sillytavern/sillytavern:latest /boot/config/redeploy-sillytavern.sh |
| 35 | check runpod-lazy ghcr.io/permissionbrick/st-runpod-proxy:latest /boot/config/redeploy-runpod-lazy.sh |