3446be7b32
Wires up automatic Helm chart releases to ride along with the existing
changeset-driven package release flow.
Today `Chart.yaml` is bumped by hand and `release-helm.yml` fires only
when a human pushes a `helm-v*` tag. With this, the changeset release PR
also carries a `Chart.yaml` bump so main always matches the published
version, and `release.yml` invokes `release-helm.yml` via
`workflow_call` after Docker images are published.
`helm-v${VERSION}` tag is pushed as a marker (same GITHUB_TOKEN trick as
`v.docker.*`). Manual `helm-v*` tag flow still works. Chart.yaml
consistency check in `release-helm.yml` is the safety net if the bump
job ever drifts.
First rollout: the open `changeset-release/main` PR has stale
Chart.yaml. Bump it manually on that branch before merging, otherwise
the first automated helm release fails at the consistency check.
149 lines
4.4 KiB
YAML
149 lines
4.4 KiB
YAML
name: 🧭 Helm Chart Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'helm-v*'
|
|
workflow_call:
|
|
inputs:
|
|
chart_version:
|
|
description: 'Chart version to release'
|
|
required: true
|
|
type: string
|
|
workflow_dispatch:
|
|
inputs:
|
|
chart_version:
|
|
description: 'Chart version to release'
|
|
required: true
|
|
type: string
|
|
|
|
env:
|
|
REGISTRY: ghcr.io
|
|
CHART_NAME: trigger
|
|
|
|
jobs:
|
|
lint-and-test:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Helm
|
|
uses: azure/setup-helm@v4
|
|
with:
|
|
version: "3.18.3"
|
|
|
|
- name: Build dependencies
|
|
run: helm dependency build ./hosting/k8s/helm/
|
|
|
|
- name: Extract dependency charts
|
|
run: |
|
|
cd ./hosting/k8s/helm/
|
|
for file in ./charts/*.tgz; do echo "Extracting $file"; tar -xzf "$file" -C ./charts; done
|
|
|
|
- name: Lint Helm Chart
|
|
run: |
|
|
helm lint ./hosting/k8s/helm/
|
|
|
|
- name: Render templates
|
|
run: |
|
|
helm template test-release ./hosting/k8s/helm/ \
|
|
--values ./hosting/k8s/helm/values.yaml \
|
|
--output-dir ./helm-output
|
|
|
|
- name: Validate manifests
|
|
uses: docker://ghcr.io/yannh/kubeconform:v0.7.0
|
|
with:
|
|
entrypoint: '/kubeconform'
|
|
args: "-summary -output json ./helm-output"
|
|
|
|
release:
|
|
needs: lint-and-test
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write # for gh-release
|
|
packages: write
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Helm
|
|
uses: azure/setup-helm@v4
|
|
with:
|
|
version: "3.18.3"
|
|
|
|
- name: Build dependencies
|
|
run: helm dependency build ./hosting/k8s/helm/
|
|
|
|
- name: Extract dependency charts
|
|
run: |
|
|
cd ./hosting/k8s/helm/
|
|
for file in ./charts/*.tgz; do echo "Extracting $file"; tar -xzf "$file" -C ./charts; done
|
|
|
|
- name: Log in to Container Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract version from tag or input
|
|
id: version
|
|
run: |
|
|
if [ -n "${{ inputs.chart_version }}" ]; then
|
|
VERSION="${{ inputs.chart_version }}"
|
|
else
|
|
VERSION="${{ github.ref_name }}"
|
|
VERSION="${VERSION#helm-v}"
|
|
fi
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "Releasing version: $VERSION"
|
|
|
|
- name: Check Chart.yaml version matches release version
|
|
run: |
|
|
VERSION="${{ steps.version.outputs.version }}"
|
|
CHART_VERSION=$(grep '^version:' ./hosting/k8s/helm/Chart.yaml | awk '{print $2}')
|
|
echo "Chart.yaml version: $CHART_VERSION"
|
|
echo "Release version: $VERSION"
|
|
if [ "$CHART_VERSION" != "$VERSION" ]; then
|
|
echo "❌ Chart.yaml version does not match release version!"
|
|
exit 1
|
|
fi
|
|
echo "✅ Chart.yaml version matches release version."
|
|
|
|
- name: Package Helm Chart
|
|
run: |
|
|
helm package ./hosting/k8s/helm/ --destination /tmp/
|
|
|
|
- name: Push Helm Chart to GHCR
|
|
run: |
|
|
VERSION="${{ steps.version.outputs.version }}"
|
|
CHART_PACKAGE="/tmp/${{ env.CHART_NAME }}-${VERSION}.tgz"
|
|
|
|
# Push to GHCR OCI registry
|
|
helm push "$CHART_PACKAGE" "oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts"
|
|
|
|
- name: Create GitHub Release
|
|
id: release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
tag_name: helm-v${{ steps.version.outputs.version }}
|
|
name: "Helm Chart ${{ steps.version.outputs.version }}"
|
|
body: |
|
|
### Installation
|
|
```bash
|
|
helm upgrade --install trigger \
|
|
oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts/${{ env.CHART_NAME }} \
|
|
--version "${{ steps.version.outputs.version }}"
|
|
```
|
|
|
|
### Changes
|
|
See commit history for detailed changes in this release.
|
|
files: |
|
|
/tmp/${{ env.CHART_NAME }}-${{ steps.version.outputs.version }}.tgz
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
draft: true
|
|
prerelease: true
|