Manifest step must not be skipped on partial arch success #9

Closed
opened 2026-07-04 19:14:44 +03:00 by oleks · 1 comment
Owner

In the multi-arch quartet pipelines (amd64/arm64/manifest), the manifest step is currently skipped when any per-arch build fails or is absent. It should instead run whenever AT LEAST ONE arch image was built (e.g. only arm64 succeeded) and create the manifest containing just the arches that exist — a single-arch manifest is better than no manifest. Applies to the shared quartet generator (#2); guard the manifest step by probing which per-arch tags actually exist in the registry rather than by pipeline dependency status.

In the multi-arch quartet pipelines (amd64/arm64/manifest), the manifest step is currently skipped when any per-arch build fails or is absent. It should instead run whenever AT LEAST ONE arch image was built (e.g. only arm64 succeeded) and create the manifest containing just the arches that exist — a single-arch manifest is better than no manifest. Applies to the shared quartet generator (#2); guard the manifest step by probing which per-arch tags actually exist in the registry rather than by pipeline dependency status.
oleks added this to the CI Scripts Optimization milestone 2026-07-04 19:14:44 +03:00
Collaborator

Fixed in the generator (commit 7fbf343): matrix/manifest.yaml.tmpl now sets workflow-level runs_on: [success, failure] alongside depends_on: [build]. Without it, Woodpecker skips the whole manifest workflow outright the moment any per-arch matrix leg of build fails — so a lone arm64 success would silently produce zero images. With runs_on, the manifest workflow always executes after build; the doc comment in the template makes explicit that ci/local.sh --manifest itself must probe the registry for which per-arch tags actually landed (not assume a fixed arch list, not gate on upstream success) and build a manifest from whatever exists. Verified the rendered manifest.yaml still parses as valid YAML and diffs cleanly against xonsh-image's real file (only the new runs_on block + explanatory comment added). Closing alongside #2's initial migration.

Fixed in the generator (commit 7fbf343): `matrix/manifest.yaml.tmpl` now sets workflow-level `runs_on: [success, failure]` alongside `depends_on: [build]`. Without it, Woodpecker skips the whole `manifest` workflow outright the moment any per-arch matrix leg of `build` fails — so a lone arm64 success would silently produce zero images. With `runs_on`, the manifest workflow always executes after `build`; the doc comment in the template makes explicit that `ci/local.sh --manifest` itself must probe the registry for which per-arch tags actually landed (not assume a fixed arch list, not gate on upstream success) and build a manifest from whatever exists. Verified the rendered `manifest.yaml` still parses as valid YAML and diffs cleanly against xonsh-image's real file (only the new `runs_on` block + explanatory comment added). Closing alongside #2's initial migration.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: oleks/ci-scripts#9