Skip to content

ci: publish the chart from the release tag, drop the helm_v* trigger - #51

Merged
jleni merged 1 commit into
mainfrom
ci/publish-chart-on-release
Jul 26, 2026
Merged

ci: publish the chart from the release tag, drop the helm_v* trigger#51
jleni merged 1 commit into
mainfrom
ci/publish-chart-on-release

Conversation

@jleni

@jleni jleni commented Jul 26, 2026

Copy link
Copy Markdown
Member

Summary

  • move chart publishing into ci.yml as a publish-chart job on the v* release tag
  • delete .github/workflows/publish-chart.yml and its helm_v* trigger

Why

The chart is versioned with the operator as of #50 (Chart.yaml version: == appVersion: == workspace version, enforced by the version gate). A separate helm_v* tag then buys nothing and costs a step everyone can forget — and forgetting it is exactly how you end up with a chart whose appVersion points at an image that was never built.

One tag now ships everything: image, signed CLI assets, crate, OS packages, chart.

What the fold-in buys

The standalone workflow's two guards become dependency edges, which are strictly stronger:

standalone folded in
assert helm_v<x> == Chart.yaml version: needs: version-consistency — already gates tag == workspace == version: + appVersion:
docker manifest inspect zondax/kobe-operator:<appVersion> needs: publish — the image was pushed in this run

Kept tag-only (if: startsWith(github.ref, 'refs/tags/v')): a push to main must not try to re-publish an already-released chart version, since chart versions are immutable in the registry.

Also worth noting: with the vendored kobe-*.tgz gone from the tree (#45), the helm push kobe-*.tgz glob is now unambiguous.

Prerequisite (unchanged from #46)

zondax/kobe does not exist on Docker Hub yet. The first push creates it private, and DOCKERHUB_TOKEN needs rights to create a repo under zondax. Create it public up front — a private chart repo fails closed for every consumer and surfaces as an auth error rather than a visibility one. Until that is done, this job is the one red square on an otherwise green release run; it does not block images, the GitHub release, crates.io, or the OS packages, which are independent jobs / a separate release: published cascade.

Validation

ci.yml parses; publish-chart resolves with needs: [version-consistency, publish] and the tag-only condition. Not exercised end-to-end — the first real run is the v0.36.0 re-cut.

The chart now rides the operator's `v*` release tag instead of its own
`helm_v*` tag: one tag ships the image, the signed CLI assets, the crate,
the OS packages and the chart, so there is no second tag to remember and
no window where a published chart's appVersion points at an image that
was never built.

Folding it into ci.yml replaces the standalone workflow's two guards with
stronger ones that cost nothing:

- the tag-vs-Chart.yaml version assertion is now `needs: version-consistency`,
  which already gates tag == workspace == Chart.yaml version + appVersion
- the `docker manifest inspect zondax/kobe-operator:<appVersion>` probe is
  now `needs: publish`, i.e. the image was pushed in THIS run

Tag-only (`if: startsWith(github.ref, 'refs/tags/v')`) — a push to main
must not re-publish an already-released chart version, since chart
versions are immutable in the registry.

Prerequisite for the first push is unchanged: `zondax/kobe` must exist on
Docker Hub and be public, and DOCKERHUB_TOKEN needs rights to push it.
@jleni
jleni merged commit e8d278f into main Jul 26, 2026
7 checks passed
@jleni
jleni deleted the ci/publish-chart-on-release branch July 26, 2026 12:09
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.

1 participant