ci(image): publish missing :latest-* and :v<X>-* singleton image tags#9812
Merged
Conversation
Closes the same singletons gap on the LocalAI server image workflow that PR #9781 closed for backends. The user observed it as missing :latest-gpu-nvidia-cuda-12 etc. on quay.io/go-skynet/local-ai — the build matrix has six single-arch entries with no corresponding merge step, so their per-arch digests push (push-by-digest=true) and never get tagged: - -gpu-hipblas (hipblas-jobs) - -gpu-nvidia-cuda-12 (core-image-build) - -gpu-nvidia-cuda-13 (core-image-build) - -gpu-intel (core-image-build) - -nvidia-l4t-arm64 (gh-runner) - -nvidia-l4t-arm64-cuda-13 (gh-runner) Only :latest, :v<X>, :latest-gpu-vulkan and :v<X>-gpu-vulkan were actually being published before this commit (the two multiarch suffixes that had merge jobs). Changes: 1. image.yml: add six new merge jobs, one per single-arch entry. Each `needs:` only its parent build job (matching the existing pattern for core-image-merge / gpu-vulkan-image-merge). 2. image_build.yml: switch artifact name to `digests-localai<suffix>--<platform-tag-or-"single">`. The `--` separator anchors the merge-side glob so a singleton tag-suffix doesn't over-match a longer suffix that shares its prefix (-nvidia-l4t-arm64 vs -nvidia-l4t-arm64-cuda-13). Same convention as backend_build.yml's fix. 3. image_merge.yml: update the download pattern to match. Next master push or tag release should produce :latest-gpu-hipblas, :latest-gpu-nvidia-cuda-12, :latest-gpu-nvidia-cuda-13, :latest-gpu-intel, :latest-nvidia-l4t-arm64, :latest-nvidia-l4t-arm64-cuda-13 (and their :v<X>-* equivalents) for the first time on the post-#9781 workflow. Assisted-by: Claude:claude-opus-4-7 Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Parity pass with backend.yml's merge jobs (8521af1). Without !cancelled(), GHA's default `needs:` cascade skips the merge when ANY matrix cell of the parent build job fails or is cancelled — so a single flaky leg would suppress publication of every other tag-suffix's manifest list. Same fix the backend got after v4.2.1 showed 2 failed singlearch builds cascade-skip 199 singlearch merge entries. Applied to all 8 image merges: - core-image-merge - gpu-vulkan-image-merge - gpu-nvidia-cuda-12-image-merge (added in e5300f1) - gpu-nvidia-cuda-13-image-merge (added in e5300f1) - gpu-intel-image-merge (added in e5300f1) - gpu-hipblas-image-merge (added in e5300f1) - nvidia-l4t-arm64-image-merge (added in e5300f1) - nvidia-l4t-arm64-cuda-13-image-merge (added in e5300f1) Build jobs (hipblas-jobs, core-image-build, gh-runner) are intentionally NOT changed — they have no upstream `needs:` to cascade- skip from. Assisted-by: Claude:claude-opus-4-7 Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #9789
Summary
image.ymlhad merge jobs only for''(core) and-gpu-vulkan(the two multi-arch entries). The six single-arch server-image variants —-gpu-hipblas,-gpu-nvidia-cuda-12,-gpu-nvidia-cuda-13,-gpu-intel,-nvidia-l4t-arm64,-nvidia-l4t-arm64-cuda-13— built withpush-by-digest=truebut never had a downstream merge step, so their digests were pushed to both registries untagged. Result::latest-gpu-hipblas,:v4.2.x-gpu-hipblas, etc. were never published by the post-PR-#9730 workflow.Verified state before this PR (both registries):
local-ailocalai/localai:latest,:v4.2.3:latest-gpu-vulkan,:v4.2.3-gpu-vulkan:latest-gpu-hipblas,:latest-gpu-nvidia-cuda-1{2,3},:latest-gpu-intel,:latest-nvidia-l4t-*:v4.2.{1,2,3}-gpu-hipblas,:v4.2.{1,2,3}-gpu-nvidia-cuda-1{2,3},:v4.2.{1,2,3}-gpu-intelChanges
Two commits, all in CI workflow files. Mirrors the parity of the backend fix from PR #9781 plus the follow-up
8521af14.e5300f1a— wire singleton merges +--artifact separatorimage.yml: add 6 new merge jobs, one per single-arch entry. Eachneeds:only its parent build matrix (hipblas-jobs,core-image-build, orgh-runner) and is filtered bytag-suffixinimage_merge.yml's artifact-download pattern.image_build.yml: switch artifact name todigests-localai<suffix>--<platform-tag-or-\"single\">. The--separator anchors the merge-side glob so a singleton tag-suffix doesn't over-match a longer suffix that shares its prefix (-nvidia-l4t-arm64is a prefix of-nvidia-l4t-arm64-cuda-13). Same convention asbackend_build.yml.image_merge.yml: update the download pattern to match.96266b29— add!cancelled()guard to all 8 image merge jobsWithout it, GHA's default
needs:cascade skips the merge whenever any matrix cell of the parent build job fails or is cancelled — so a single flaky leg would suppress publication of every other tag-suffix's manifest list. Same fix the backend got after v4.2.1 showed 2 failed singlearch builds cascade-skip 199 singlearch merge entries.Coverage of both registries
image_merge.yml's Docker meta step emits tags for bothquay.io/go-skynet/local-aiandlocalai/localai. The quay side sources fromci-cache@<digest>(already fixed in6bfe7f8cfor the GC race) and the dockerhub side sources fromlocalai/localai@<digest>(dockerhub's GC isn't aggressive enough to matter — verified for backends with 273/273 matching tags). So next master push or tag will produce the missing:latest-*and:v<X>-*for all 6 singletons on both registries.Final parity vs backend workflow
--separator + 'single' placeholder!cancelled()on merge if:Test plan
image.ymlshould produce:latest-gpu-hipblas,:latest-gpu-nvidia-cuda-12,:latest-gpu-nvidia-cuda-13,:latest-gpu-intel,:latest-nvidia-l4t-arm64,:latest-nvidia-l4t-arm64-cuda-13on bothquay.io/go-skynet/local-aiandlocalai/localai.:v<X>-*tags.docker buildx imagetools inspectthat each new manifest list resolves on both registries and pulls successfully.🤖 Generated with Claude Code