Skip to content

Features: GHCR publish, active update check, live dashboard updates#3

Merged
StrandedTurtle merged 1 commit into
mainfrom
claude/features-live-check-ghcr
Jun 23, 2026
Merged

Features: GHCR publish, active update check, live dashboard updates#3
StrandedTurtle merged 1 commit into
mainfrom
claude/features-live-check-ghcr

Conversation

@StrandedTurtle

Copy link
Copy Markdown
Owner

Implements the three features picked from the roadmap, plus a latent-build-bug fix found during review. Branched off main.

Features

1. Publish image to GHCR.github/workflows/release.yml builds a multi-arch (amd64+arm64) image and pushes to ghcr.io/strandedturtle/diupdater on pushes to main (edge) and on v* tags (semver + latest). README now documents running the prebuilt image instead of building.

2. Active "Check now"registry.js resolves a tag's current manifest digest without pulling (standard anonymous Docker Hub / GHCR / quay / lscr token flow); checker.js reconciles each running image against the registry, recording or clearing events; POST /api/check exposes it and a Check button drives it from the dashboard. This makes the app usable without Diun and lets it recover from a missed webhook. Private (auth-required) registries are skipped for now.

3. Live dashboard updates — a global SSE channel (GET /api/events) broadcasts containers-changed on webhook receipt, manual check, and finished update; the dashboard subscribes and auto-refreshes (debounced), so badges appear without hitting Refresh.

Build fix (found in review)

better-sqlite3 has no musl/Alpine prebuilt binary, so npm ci must compile it — which needs a toolchain the image didn't install. (The Alpine build was never actually run before — no daemon in CI.) The Dockerfile now compiles it in a dedicated server-deps stage (python3/make/g++) and copies node_modules into a clean runtime image; the client stage is pinned to --platform=$BUILDPLATFORM so it isn't rebuilt under emulation.

Verified

  • node --test: 60/60 (8 new: parseRef ×6, parseWwwAuthenticate ×2).
  • Client vite build clean.
  • Runtime smoke: /api/check & /api/events return 401 without a cookie, 503 with a cookie (no daemon); opening /api/events then POSTing a webhook delivered {"type":"containers-changed"} on the stream — live updates confirmed end-to-end.

The multi-arch Docker build itself will be exercised for the first time by the GHCR workflow on merge to main (no daemon available in this env).

🤖 Generated with Claude Code


Generated by Claude Code

Three requested features for a complete, shippable build:

- Publish image to GHCR: .github/workflows/release.yml builds a multi-arch
  (amd64+arm64) image on pushes to main (edge) and version tags (semver +
  latest). README documents running the prebuilt image instead of building.

- Active "Check now": registry.js resolves the current manifest digest for a
  tag without pulling (anonymous Docker Hub/GHCR/quay/lscr token flow);
  checker.js reconciles every running image against the registry and records
  or clears events; POST /api/check exposes it; a Check button drives it from
  the dashboard. Makes the app work without (or alongside) Diun and recovers
  from missed webhooks.

- Live dashboard updates: a global SSE channel (GET /api/events) broadcasts
  containers-changed on webhook receipt, manual check, and finished update;
  the dashboard subscribes and auto-refreshes (debounced).

Also fixes a latent build bug: better-sqlite3 has no musl prebuilt, so the
Dockerfile now compiles it in a dedicated server-deps stage (python3/make/g++)
and copies node_modules into a clean runtime image; the client stage pins
--platform=$BUILDPLATFORM so it isn't rebuilt under emulation.

New pure-logic tests: parseRef (6) and parseWwwAuthenticate (2) — 60 total
passing. API_CONTRACT and README updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Lj6nYJQDtLaZFvvEQJGM4
@StrandedTurtle StrandedTurtle merged commit 5d9e9bc into main Jun 23, 2026
4 checks passed
@StrandedTurtle StrandedTurtle deleted the claude/features-live-check-ghcr branch June 23, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant