Skip to content

feat(ghcr): flag nightly and main images and report creation time - #83

Merged
vthwang merged 1 commit into
mainfrom
farm/channel-tags
Oct 15, 2026
Merged

vthwang merged 1 commit into
mainfrom
farm/channel-tags

Conversation

@geoffturk

@geoffturk geoffturk commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Summary

The build pipeline (ic3software/devops fpp/) now repoints three moving tags in GHCR: latest on a tagged release, nightly on a nightly build and main on a main-branch build. ListTags only knew about latest, so nightly and main appeared as selectable rows in the image pickers and the versioned image they pointed to carried no mark.

  • internal/ghcr/client.go: latest, nightly and main are all channel tags. None is a row; the versioned <version>-<sha> tag that shares a channel's digest gets the latest, nightly or main flag. The channel digest lookups run inside the existing errgroup.
  • Each row gains created, the image creation time in RFC 3339 UTC, read from the config blob the client already fetched for sorting. Empty when the registry cannot say.
  • internal/handler/setup.go: GET /setup/images returned a trimmed copy of each row with only tag, image and latest, which silently dropped the new fields. It now serves the ghcr.ImageTag rows as they are. Same JSON shape plus the three optional fields.

The upgrade handlers validate a requested image against this list, so ghcr.io/ic3software/<pkg>:nightly is no longer accepted as an upgrade target. The pickers never offered it, so this only affects callers using the API by hand; the immutable tag it points to is what they get instead.

The matching frontend change is ic3software/vtafarm#99.

Testing

Ran the modified client against the live registry from a container. For vta it returns VTI-Eucalyptus-49f5f1be as latest and 0.60.0-fd1621d9 as nightly; for did-hosting-daemon it returns latest, nightly and main on three different rows, each with its date. Verified end to end against the local API with the frontend branch.

gofmt, go vet on the ghcr and handler packages, and go build ./... pass.

Note on the shared dev database

The shared dev database is already at schema version 43, applied from branch feat/pooled-vta-claim (migrations/000043_vta_pool.{up,down}.sql, not yet on main). A checkout of this branch cannot start against that database without those two files, since golang-migrate needs the files for the current version. They are deliberately not part of this PR; copy them in locally from origin/feat/pooled-vta-claim to run this branch, and they arrive on main with that branch's PR.

The build pipeline now repoints three moving tags: latest on a tagged release, nightly on a nightly build and main on a main-branch build. ListTags treated only latest as a channel, so nightly and main showed up as rows of their own in the image pickers, and the row they pointed to carried no mark.

Treat all three as channel tags: none is a row, and the versioned tag sharing a channel's digest gets the latest, nightly or main flag. Each row also reports the image creation time from its config blob, which the client already fetched for sorting. The images handler returned a trimmed copy of each row, dropping everything but tag, image and latest; it now serves the ghcr rows as they are.

Signed-off-by: Geoff Turk <geoff@ic3.dev>

Signed-off-by: vthwang <vthwang.work@gmail.com>
@vthwang
vthwang merged commit 1f58175 into main Oct 15, 2026
1 check passed
@vthwang
vthwang deleted the farm/channel-tags branch October 15, 2026 19:15
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.

2 participants