From 046216212a667b325bf2ca13ebc5b0a9b05d5c88 Mon Sep 17 00:00:00 2001 From: tada5hi Date: Mon, 3 Aug 2026 13:43:53 +0200 Subject: [PATCH] ci: publish charts with hevi instead of chart-releaser-action Replaces the chart-releaser-action step, the docker/login-action step and the hand-rolled `helm push` loop with a single tada5hi/hevi@v2 step that packages, releases and pushes to the OCI registry. Semantics are preserved: - releases keep the - name, since hevi does not override chart-releaser's default --release-name-template, so release-please keeps its version baseline - the job stays ungated and idempotent: hevi always passes --skip-existing to `cr upload`, and push-skip-existing probes the registry before pushing, which the previous `helm push` loop did not do - release notes stay generated, via release-generate-notes charts_repo_url is dropped because it is already a no-op: helm/chart-releaser-action@v1 declares no such input and no current chart-releaser release has the flag, so it was silently ignored. setup-helm is kept on purpose. hevi prefers a helm from PATH over its own pinned download, so pinning here keeps the packaged output independent of the runner image. Requires hevi >= 2.0.1, where `helm registry login` is given the bare registry rather than the full ghcr.io//helm-charts reference, which helm 4 rejects. --- .github/workflows/release.yaml | 46 ++++++++++++++-------------------- .gitignore | 1 + 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index be3c7b9..b798db7 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -19,12 +19,12 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} - # Runs on every master push. chart-releaser compares Chart.yaml's version - # against the published releases (CR_SKIP_EXISTING), so this is an idempotent - # no-op until the release-please PR carrying a version bump is merged. Do NOT - # gate this on release-please outputs: the chart package uses - # skip-github-release (chart-releaser owns tags + releases), so - # releases_created never fires for it. + # Runs on every master push. hevi compares Chart.yaml's version against the + # published releases (cr --skip-existing) and against the OCI registry + # (push-skip-existing), so this is an idempotent no-op until the release-please + # PR carrying a version bump is merged. Do NOT gate this on release-please + # outputs: the chart package uses skip-github-release (chart-releaser owns tags + # + releases), so releases_created never fires for it. publish: runs-on: ubuntu-latest needs: release-please @@ -39,28 +39,20 @@ jobs: git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + # hevi prefers a helm from PATH over its own pinned download, so pin it + # here to keep the packaged output independent of the runner image. - name: Set up Helm uses: azure/setup-helm@v4 - - name: Run chart-releaser - uses: helm/chart-releaser-action@v1 + - name: Package, release and push charts + uses: tada5hi/hevi@v2 with: - charts_repo_url: https://helm.authup.org - env: - CR_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CR_SKIP_EXISTING: "true" - CR_GENERATE_RELEASE_NOTES: "true" - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Push charts to GHCR (OCI) - run: | - shopt -s nullglob - for pkg in .cr-release-packages/*.tgz; do - helm push "$pkg" "oci://ghcr.io/${GITHUB_REPOSITORY_OWNER}/helm-charts" - done + directory: charts + package: true + release: true + release-generate-notes: true + push: true + push-host: ghcr.io/${{ github.repository_owner }}/helm-charts + push-username: ${{ github.actor }} + push-password: ${{ secrets.GITHUB_TOKEN }} + push-skip-existing: true diff --git a/.gitignore b/.gitignore index 166f3a6..e7a6dc5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,6 @@ *.tgz .cr-release-packages/ .cr-index/ +.hevi/ charts/*/values.local.yaml charts/*/values.personal.yaml