Skip to content

feat: check GitHub for a new server release and expose it in /api/settings - #406

Merged
butschster merged 2 commits into
masterfrom
feat/update-check
Nov 7, 2026
Merged

butschster merged 2 commits into
masterfrom
feat/update-check

Conversation

@butschster

Copy link
Copy Markdown
Member

What

Server side of #6 («new version available»).

  • New internal/updates: GET https://api.github.com/repos/buggregator/server/releases/latest at start and every update_check.interval (default 12h, raised to at least 1h). 10 s timeout, User-Agent: buggregator/<version>, body capped at 1 MB. A failed check is logged at debug level, keeps the last good result and waits 1 h — no retry storm (60 req/h unauthenticated GitHub limit is never near).
  • GET /api/settings (public, the UI already reads it) gains update:
    "update": {"current": "2.7.0", "latest": "2.8.0", "url": "https://github.com/buggregator/server/releases/tag/v2.8.0", "available": true, "checked_at": "2026-11-07T14:40:39Z"}
    latest/url/checked_at absent until the first successful check; update is null when the check is off.
  • Config: update_check.enabled (env UPDATE_CHECK_ENABLED, default true; false = no network call at all), update_check.interval (env UPDATE_CHECK_INTERVAL). A dev build (no release version) never calls GitHub.
  • Version compare: major.minor.patch, leading v ignored, a release is newer than its own pre-release.

Tests

  • internal/updates: version compare table; check against a fake GitHub (newer / same); failures (403, bad JSON, non-version tag) keep the last result; Run retries after a failure and does not re-check after a success; dev build makes no request; interval floor.
  • TestAPI_SettingsUpdate: update is null when off, the status object when on.
  • go vet + go test -race -count=1 ./internal/updates/ ./internal/app/ ./internal/server/http/ ok.
  • Live against real GitHub: current 2.6.0 → latest 2.7.0, available: true; current 2.7.0 → available: false.

Frontend notice comes in a separate frontend PR.

Made with harnsy

…tings

The server asks api.github.com for buggregator/server releases/latest at
start and every 12 h (update_check.interval, at least 1 h; a failed check
waits 1 h, 10 s timeout, last good result kept). GET /api/settings gains
"update": {current, latest, url, available, checked_at}, null when the
check is off. update_check.enabled / UPDATE_CHECK_ENABLED=false makes no
network call; a dev build never checks.
@butschster butschster added the type: feature Net-new functionality label Nov 7, 2026
@butschster
butschster merged commit 2a65915 into master Nov 7, 2026
1 check passed
@butschster
butschster deleted the feat/update-check branch November 7, 2026 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: feature Net-new functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant