Skip to content

ci(helm): publish chart to GHCR on chart-v* tags#1372

Merged
tlongwell-block merged 3 commits into
mainfrom
chart-oci-publish
Jun 30, 2026
Merged

ci(helm): publish chart to GHCR on chart-v* tags#1372
tlongwell-block merged 3 commits into
mainfrom
chart-oci-publish

Conversation

@tlongwell-block

Copy link
Copy Markdown
Collaborator

What

The helm chart workflow only lints / unit-tests / render-checks the chart — nothing publishes it. So oci://ghcr.io/block/buzz/charts/buzz (the install ref the chart README already documents) does not exist, and downstream consumers (e.g. the buzz-oss ArgoCD app in block-coder-tf-stacks) have had to vendor the chart by hand.

This PR makes the chart a real published OCI artifact.

How

  • helm-chart.yml — new publish job. Packages the chart and helm pushes it to GHCR, mirroring docker.yml's relay-image publish:
    • GITHUB_TOKEN GHCR login, packages: write, pinned action SHAs.
    • GHCR_CHART_REPO repo-var override so forks can push to their own namespace without editing the file (mirrors docker.yml's GHCR_IMAGE).
    • Fires only on a chart-v* tag push or the auto-tag rescue dispatch — never on main pushes or PRs, so an in-progress main can never overwrite a released chart version.
    • Fails loudly if the tag version and Chart.yaml's version disagree (no mislabeled artifacts).
    • Gated behind the existing lint-and-unittest job (needs:), which runs on the tag push.
  • auto-tag-on-release-pr-merge.yml — fourth chart-release/<v> lane. Tags chart-v<v> and dispatches helm-chart.yml, identical machinery to the existing desktop (version-bump/) and relay (relay-release/) lanes. One case branch + one dispatch mapping.
  • README.md — replaced the stale "OCI publish is a follow-up" note with a Releasing section.
  • Top-level permissions: {} with per-job grants, consistent with docker.yml.

Release flow

Push a chart-release/<version> branch (with <version> == Chart.yaml version); merging it auto-tags chart-v<version> → dispatches the publish job → oci://ghcr.io/block/buzz/charts/buzz:<version>.

Validation (local, no publish performed)

  • actionlint .github/workflows/helm-chart.ymlclean. (The one SC2129 style note in auto-tag-*.yml is pre-existing on main, not from this PR.)
  • helm dependency build + helm package deploy/charts/buzz → produces buzz-0.1.0.tgz, exactly the filename the push step references.
  • Version-resolution + drift-check shell simulated for both the tag-push and rescue-dispatch paths → resolves 0.1.0, semver-validates, matches Chart.yaml.

Follow-ups (out of scope, noted in README)

  • Cosign / provenance attestation of the published chart (the relay image is attested; the chart is not yet).
  • Once this lands and a chart-v0.1.0 is cut, the block-coder-tf-stacks buzz-oss app can drop its vendored chart copy and point at oci://ghcr.io/block/buzz/charts.

Tyler Longwell and others added 3 commits June 29, 2026 19:35
The helm-chart workflow only linted/unit-tested/render-checked the chart;
nothing published it, so `oci://ghcr.io/block/buzz/charts/buzz` (the install
ref the chart README documents) did not exist. Downstream consumers had to
vendor the chart by hand.

Add a `publish` job to helm-chart.yml that packages the chart and pushes it
to GHCR as an OCI artifact, mirroring docker.yml's relay-image publish:
GITHUB_TOKEN GHCR login, `packages: write`, and a `GHCR_CHART_REPO` repo-var
override for forks. It fires only on a `chart-v*` tag push or the auto-tag
rescue dispatch — never on `main` pushes or PRs — so an in-progress `main`
can never overwrite a released chart version. It fails loudly if the tag
version and Chart.yaml version disagree.

Wire a fourth `chart-release/<v>` lane into
auto-tag-on-release-pr-merge.yml (tag `chart-v<v>`, dispatch helm-chart.yml),
matching the existing desktop and relay lanes, and update the chart README's
stale "OCI publish is a follow-up" note with a Releasing section.

Top-level `permissions: {}` with per-job grants, consistent with docker.yml.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
A `paths` filter under `on.push` is applied to tag pushes too, so a
`chart-v*` tag whose commit didn't modify a chart file would be filtered out
and the publish job would never run. This is the only workflow in the repo
that combined `push.tags` with `push.paths`; docker.yml, release.yml, and
sprig.yml all deliberately keep `paths` out of a tag-carrying `push` for this
exact reason. PR runs stay scoped via `pull_request.paths`; main pushes now
lint unconditionally (cheap), and tag pushes always run so publish can fire.

Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
@tlongwell-block tlongwell-block merged commit 2722ce4 into main Jun 30, 2026
28 checks passed
@tlongwell-block tlongwell-block deleted the chart-oci-publish branch June 30, 2026 00:07
wpfleger96 pushed a commit that referenced this pull request Jun 30, 2026
…work

* origin/main: (25 commits)
  fix(thread): stop mid-scroll content jump in live threads (#1397)
  fix(ci): restore main to green — tauri fmt, personas.rs file-size split, Windows path test (#1399)
  fix(desktop): enable buzz-dev-mcp MCP server for Codex agents (#1394)
  fix(ci): restore E2E flakiness fixes for pgschema, docker-pull, and spec timing (#1396)
  fix(personas): persist pack-backed persona UI edits across reboot (#1392)
  fix(buzz-acp): clear steer_rx on all run_prompt_task exit paths (#1391)
  Restore channel date divider rule (#1395)
  Speed up profile wave action (#1379)
  Restore visible links for rich previews (#1378)
  Mobile channel list polish (#1367)
  style(desktop): unify corner radii to rounded-2xl (16px) (#1393)
  fix(desktop): skip keychain write when blob contents are unchanged (#1377)
  fix(desktop): stop clipping the agent-activity row under the composer (#1371)
  Constrain macOS overscroll to conversations (#1317)
  Mobile appearance foundation (#1366)
  chore(release): release Buzz Desktop version 0.3.38 (#1375)
  feat(desktop): provider-agnostic model selection + databricks discovery (#1307)
  release(helm): buzz chart 0.1.1 (#1374)
  Harden relay attack surfaces (#1369)
  ci(helm): publish chart to GHCR on chart-v* tags (#1372)
  ...
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