render_thin_quartet.py derives wrong image_name (uses manifest repo field) #22

Closed
opened 2026-07-09 19:21:25 +03:00 by admin · 1 comment

Why: render_thin_quartet.py infers image_name from the manifest's repo field, causing migrated pipelines to push to an empty image path and orphan the real published image.

Problem:

  • Manifest has repo: xonsh-image → generator derives image_name: oleks/xonsh-image
  • Actually-published image is oleks/xonsh (from ci/local.sh's IMAGE_REPO default)
  • Live package registry confirms: tags 0.22.7, 0.22.7-amd64, 0.22.7-arm64, latest under oleks/xonsh
  • Consequence: migrated pipeline would push to empty, WRONG image path — silently orphaning the real image

Acceptance:

  • Rendered thin pipelines carry explicit image_name field for every quartet repo
  • Manifest generator does not infer image_name from repo/dir name (must be explicit in manifest)
  • All quartet manifests audited against live package registry for image_name correctness
  • xonsh-image and other quartet repos have correct, verified image_name values

Links:

**Why**: render_thin_quartet.py infers image_name from the manifest's repo field, causing migrated pipelines to push to an empty image path and orphan the real published image. **Problem**: - Manifest has `repo: xonsh-image` → generator derives `image_name: oleks/xonsh-image` - Actually-published image is `oleks/xonsh` (from ci/local.sh's IMAGE_REPO default) - Live package registry confirms: tags 0.22.7, 0.22.7-amd64, 0.22.7-arm64, latest under oleks/xonsh - Consequence: migrated pipeline would push to empty, WRONG image path — silently orphaning the real image **Acceptance**: - [ ] Rendered thin pipelines carry explicit image_name field for every quartet repo - [ ] Manifest generator does not infer image_name from repo/dir name (must be explicit in manifest) - [ ] All quartet manifests audited against live package registry for image_name correctness - [ ] xonsh-image and other quartet repos have correct, verified image_name values **Links**: - #17 - #20
admin added this to the Modern CI Phase 2+3 milestone 2026-07-09 19:21:25 +03:00
admin added the bug label 2026-07-09 19:21:44 +03:00
Collaborator

Closing — this is a generator/manifest-only fix, no plugin republish needed.

  • generator/render_thin_quartet.py: kind: matrix rendering now requires an explicit image_name field in the manifest (manifest.get("image_name"), hard SystemExit if missing) — no more f"git.oleks.space/oleks/{repo}" inference from the repo/dir field.
  • manifests/xonsh-image.yaml: image_name: git.oleks.space/oleks/xonsh — verified against the live Gitea package registry (package_read list_versions, ids 4310-4315: tags 0.22.7, 0.22.7-amd64, 0.22.7-arm64, latest all under package name xonsh, published by xonsh-image's own pipeline #9).
  • manifests/csi-s3.yaml: image_name: git.oleks.space/oleks/csi-s3-driver — matches ci/local.sh's IMAGE_REPO default; no live package exists yet under this name to cross-check (csi-s3's --publish path has never run in CI — confirmed via pipeline_list returning empty), noted in the manifest comment. csi-s3 stays excluded from #17 regardless (too bespoke, per #20's audit).
  • Audited the other 4 quartet manifests (the-eye, emdash.kotkanagrilli.fi, flake-hub, woodpecker-peek — all kind: single/kind: split): none of them have an image_name field or use the generic buildx-build/buildx-manifest flow at all — they invoke ci/local.sh/nix run .#publish-* via settings.run (flow: publish), which handles image naming internally in the script itself. So this bug class genuinely doesn't apply to them — confirmed, not assumed.
  • Bonus: the render_manifest() parameter Pyright flagged as unused (line 114 in the pre-fix file) is real work now (manifest.get("tag_strip_v"), oleks/ci-scripts#21) — pyright generator/render_thin_quartet.py reports 0 warnings.

Verified by re-rendering all 6 manifests to a scratch --out directory (not xonsh-image's/csi-s3's actual .woodpecker/) and confirming the generated build-*.yaml/manifest.yaml carry the correct image_name: values. Committed as 44d6ba9.

Closing — this is a generator/manifest-only fix, no plugin republish needed. - `generator/render_thin_quartet.py`: `kind: matrix` rendering now requires an explicit `image_name` field in the manifest (`manifest.get("image_name")`, hard `SystemExit` if missing) — no more `f"git.oleks.space/oleks/{repo}"` inference from the repo/dir field. - `manifests/xonsh-image.yaml`: `image_name: git.oleks.space/oleks/xonsh` — verified against the live Gitea package registry (`package_read list_versions`, ids 4310-4315: tags `0.22.7`, `0.22.7-amd64`, `0.22.7-arm64`, `latest` all under package name `xonsh`, published by xonsh-image's own pipeline #9). - `manifests/csi-s3.yaml`: `image_name: git.oleks.space/oleks/csi-s3-driver` — matches `ci/local.sh`'s `IMAGE_REPO` default; no live package exists yet under this name to cross-check (csi-s3's `--publish` path has never run in CI — confirmed via `pipeline_list` returning empty), noted in the manifest comment. csi-s3 stays excluded from #17 regardless (too bespoke, per #20's audit). - Audited the other 4 quartet manifests (the-eye, emdash.kotkanagrilli.fi, flake-hub, woodpecker-peek — all `kind: single`/`kind: split`): none of them have an `image_name` field or use the generic `buildx-build`/`buildx-manifest` flow at all — they invoke `ci/local.sh`/`nix run .#publish-*` via `settings.run` (`flow: publish`), which handles image naming internally in the script itself. So this bug class genuinely doesn't apply to them — confirmed, not assumed. - Bonus: the `render_manifest()` parameter Pyright flagged as unused (line 114 in the pre-fix file) is real work now (`manifest.get("tag_strip_v")`, oleks/ci-scripts#21) — `pyright generator/render_thin_quartet.py` reports 0 warnings. Verified by re-rendering all 6 manifests to a scratch `--out` directory (not xonsh-image's/csi-s3's actual `.woodpecker/`) and confirming the generated `build-*.yaml`/`manifest.yaml` carry the correct `image_name:` values. Committed as 44d6ba9.
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: oleks/ci-scripts#22