You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci: switch chart release flow to release-please (FB-1938) (#20)
**Background**
FB-1938: The chart release flow auto-bumps `helm/Chart.yaml` `version`
from the merge-commit subject in a homegrown bash step and pushes the
bump back to `main`; we want release-please as the source of truth
instead, matching `firebolt-kubernetes-operator` (FB-1671).
**Summary**
Switches chart versioning and changelog generation to
[release-please](https://github.com/googleapis/release-please), adapted
for this single-chart repo (no app image / cosign / CRDs chart).
What changes:
- `release-please-config.json` + `.release-please-manifest.json` — one
`helm` package (`release-type: helm`), tags `v<version>`, changelog
sections mirroring the operator.
- `helm-release-cd.yaml` rewritten: a `release-please` job opens/updates
the release PR; a `release-chart` job (gated on `release_created`)
regenerates the README, packages the chart, and pushes it to GHCR.
`appVersion` stays owned by the upstream image-release automation.
- `pr-title.yaml` added — validates conventional-commit PR titles
(release-please derives versions from squash-merge titles), skipping
dependabot/release-please branches.
- `helm-test.yaml` — skips the kind e2e on release-please branches (the
release PR only bumps the version + changelog over templates that
already passed on the feature PR).
- `AGENTS.md` / `helm/AGENTS.md` updated to describe the flow.
Going forward, releasing is a two-step flow: merge a
`feat:`/`fix:`/`chore(deps):` PR, then merge the release PR
release-please opens. Only `feat`/`fix`/`perf`/`revert`/`chore(deps)`
cut a release; plain `chore:`/`refactor:`/`docs:` merges no longer
publish a chart. Do not hand-bump `Chart.yaml` `version` —
release-please owns it. Breaking changes bump minor while pre-1.0.
**Bootstrap (required before this takes effect):** no git tags exist, so
anchor release-please at the current release before merging, or its
first run scans all history. Tags are bare SemVer (no `v`), matching the
chart version and OCI tag:
```
git tag 0.2.0 <main-HEAD> && git push origin 0.2.0
```
**Test Plan**
- `release-please-config.json` / `.release-please-manifest.json`
validated as JSON.
- Workflows reviewed for actionlint/zizmor: all actions pinned to SHAs
(reusing existing repo pins), no `${{ }}` expansions inside `run:`
blocks.
- Traced trigger behavior on the release PR and on merge:
`docs-sync`/`docs-validate` no-op, `helm-validate` lints the bumped
chart, `helm-test` now skipped on release-please branches, and the
README sync commit carries `[skip ci]` so it does not re-trigger the
release run.
- End-to-end release behavior will be confirmed on the first real run
after the `v0.2.0` bootstrap tag is pushed.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Changes how every chart version reaches production (tags, GHCR,
changelog) and tightens which merges trigger releases; misconfiguration
or missing bootstrap tag could affect the first release run.
>
> **Overview**
> Replaces the **homegrown bash auto-bump** on `main` with
**[release-please](https://github.com/googleapis/release-please)** as
the sole owner of `helm/Chart.yaml` `version` and changelog.
>
> **Release pipeline:** `helm-release-cd` now runs a `release-please`
job on every push to `main` (no longer limited to `helm/**` paths). It
opens/updates a release PR from conventional commits; merging that PR
tags bare SemVer, cuts a GitHub release, and only then runs
**`release-chart`** to regenerate `helm/README.md` (with `[skip ci]`),
package, and push OCI to GHCR. The old logic that inferred
patch/minor/major from the latest merge commit and pushed
version/changelog bumps directly to `main` is removed.
>
> **New config:** `release-please-config.json` and
`.release-please-manifest.json` (anchored at `0.2.0`) define a single
`helm` package with operator-aligned changelog sections; only certain
commit types are releasable.
>
> **CI gates:** **`pr-title.yaml`** enforces conventional PR titles
(with issue refs) because squash-merge titles feed release-please.
**`helm-test`** skips `release-please/*` branches so version-only
release PRs do not rerun the long kind e2e.
>
> **Docs:** `AGENTS.md` / `helm/AGENTS.md` describe the two-step release
(feature PR → release PR) and that hand-bumping chart `version` is no
longer allowed; `appVersion` stays on separate image automation.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
03941b6. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: AGENTS.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
## What this project does
4
4
5
-
Helm chart that runs a Firebolt instance on Kubernetes: an Envoy gateway that routes by `X-Firebolt-Engine` header, the Pensieve metadata service, a bundled or external PostgreSQL for metadata storage, and one or more `firebolt-core` query engines as StatefulSets. The chart is published as `firebolt-instance` to `oci://ghcr.io/firebolt-db/helm-charts`on every push to `main`that touches `helm/`.
5
+
Helm chart that runs a Firebolt instance on Kubernetes: an Envoy gateway that routes by `X-Firebolt-Engine` header, the Pensieve metadata service, a bundled or external PostgreSQL for metadata storage, and one or more `firebolt-core` query engines as StatefulSets. The chart is published as `firebolt-instance` to `oci://ghcr.io/firebolt-db/helm-charts`when a release-please release PR is merged to `main`(see project-specific rules).
6
6
7
7
## Repo structure
8
8
@@ -28,7 +28,7 @@ Helm chart that runs a Firebolt instance on Kubernetes: an Envoy gateway that ro
28
28
├── docs/ # user-facing docs, Mintlify MDX (docs.json drives nav; see docs/AGENTS.md for style)
29
29
├── docs-internal/ # Firebolt-internal docs (e.g. the make dev / floci flow), plain Markdown
@@ -90,7 +90,7 @@ You MUST keep documentation in sync with code. When making changes:
90
90
91
91
-**AGENTS.md** — update the relevant `AGENTS.md` (root or `helm/AGENTS.md`) if you change structure, conventions, public surface, commands, or config formats. If your change makes existing AGENTS.md content wrong, fix it before finishing.
92
92
-**`helm/values.yaml` annotations** — every value rendered into `helm/README.md` is documented inline via `# --` comments processed by `helm-docs`. When you add, rename, remove, or change the meaning of a value, update its annotation in the same change. Then regenerate `helm/README.md` via `make docs` (or let the pre-commit `helm-docs` hook do it on commit).
93
-
-**`helm/CHANGELOG.md`** — the `helm-release-cd` workflow prepends a new entry on each release based on the conventional-commit message of the merge commit. You do not normally hand-edit this file; you DO need to write a conventional-commit message (`feat:` / `fix:` / `chore:` / etc.) so the auto-bump and changelog entry are correct.
93
+
-**`helm/CHANGELOG.md`** — release-please owns this file, prepending a section for each release from the conventional-commit history since the last release. You do not hand-edit it; you DO need conventional-commit PR titles (`feat:` / `fix:` / `chore(deps):` / etc.) so the version bump and changelog entry are correct.
94
94
-**`README.md` (root)** — overview-only. Update when your change affects what a human reader needs to know about what the project is or how to run it. Implementation detail belongs in this file or `helm/AGENTS.md`, not the README.
95
95
-**`helm/README.md`** — never hand-edit. It is regenerated.
96
96
@@ -119,7 +119,7 @@ Code is not done until it is covered by tests where tests are reasonable.
119
119
Every change is tracked and lands through a branch and a pull request — no exceptions.
120
120
121
121
-**A documented issue comes first.** Every task MUST have a corresponding issue before any work starts — a Linear ticket or a GitHub issue. If none exists, create one (GitHub issues use the templates under `.github/ISSUE_TEMPLATE/`). No issue, no work.
122
-
-**Never touch `main` directly.** You MUST NEVER work in, commit to, or push to `main`. All work happens on a feature branch and merges via a reviewed PR. (`main` is only ever advanced by merging a PR or by the release workflow's automated version-bump commit — see project-specific rules.)
122
+
-**Never touch `main` directly.** You MUST NEVER work in, commit to, or push to `main`. All work happens on a feature branch and merges via a reviewed PR. (`main` is only ever advanced by merging a PR — including release-please's automated release PR — see project-specific rules.)
123
123
-**Branch names tie the branch to its issue**, so work is traceable. Prefix the branch with the tracker identifier:
-**Conventional commits drive releases.** The `helm-release-cd` workflow on `main`parses the merge-commit subject. `feat:` bumps minor, `fix:`/`chore:`/anything-else bumps patch, and a body containing `BREAKING CHANGE` bumps major. Chart version in `helm/Chart.yaml`is auto-bumped and committed back to `main` by a GitHub App; `helm/CHANGELOG.md` is prepended;`helm/README.md` is regenerated; the chart is packaged and pushed to GHCR. If you bump `helm/Chart.yaml``version`manually in your commit, the workflow honours it as-is and skips the auto-bump.
142
+
-**Conventional commits drive releases via release-please.** The `helm-release-cd` workflow on `main`runs [release-please](https://github.com/googleapis/release-please) (config: `release-please-config.json`, state: `.release-please-manifest.json`), which accumulates conventional-commit merges onto an automated release PR. `feat:` bumps minor, `fix:`/`perf:`/`revert:`/`chore(deps):` bump patch, and `BREAKING CHANGE` bumps minor while pre-1.0 (`bump-minor-pre-major`). Merging that release PR bumps `helm/Chart.yaml``version`, prepends `helm/CHANGELOG.md`, tags `<version>` (bare SemVer, no `v` — matching the chart version and OCI tag), and cuts a GitHub release; only then does the `release-chart` job regenerate`helm/README.md`, package the chart, and push it to GHCR. Do NOT hand-bump `helm/Chart.yaml``version`— release-please owns it. `appVersion` is the exception: it is managed by the upstream image-release automation, not release-please.
143
143
-**`appVersion` is the shared default image tag.**`helm/Chart.yaml`'s `appVersion` is the default for both `engineSpec.image.tag` and `metadata.image.tag`, and both image registries now publish matching `debug-` / `release-` prefixed tags. Override `metadata.image.tag` only when the metadata service must run a version other than the engine.
144
144
-**GitHub Actions are pinned to commit SHAs.** All `uses:` references in `.github/workflows/*` use full 40-char SHAs with a version comment. `actionlint` and `zizmor` run on every push/PR that touches `.github/`. New actions you introduce MUST follow the same pinning convention.
145
145
-**Pre-commit hook quirk: first-run helm-docs aborts the commit.** The `helm-docs` pre-commit hook regenerates `helm/README.md` and stages the result; if the regeneration changes the file, the commit aborts so you can re-run `git commit` with the now-staged README.md included. This is documented in `.pre-commit-config.yaml` and is intentional.
0 commit comments