Pulse/.github/workflows/helm-pages.yml

152 lines
5.3 KiB
YAML

name: Release Helm Chart to GitHub Pages
on:
release:
types: [published]
workflow_dispatch:
inputs:
chart_version:
description: "Chart version (e.g., 4.28.0)"
required: true
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Install Helm
uses: azure/setup-helm@v4
with:
version: v3.15.2
- name: Install helm-docs
run: |
cd /tmp
wget https://github.com/norwoodj/helm-docs/releases/download/v1.14.2/helm-docs_1.14.2_Linux_x86_64.tar.gz
tar -xzf helm-docs_1.14.2_Linux_x86_64.tar.gz
sudo mv helm-docs /usr/local/bin/
helm-docs --version
- name: Generate chart documentation
run: |
cd deploy/helm/pulse
helm-docs
# Commit if README changed
if [ "${GITHUB_EVENT_NAME}" != "release" ] && ! git diff --quiet README.md; then
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git add README.md
git commit -m "Auto-update Helm chart documentation"
git push
elif [ "${GITHUB_EVENT_NAME}" = "release" ] && ! git diff --quiet README.md; then
echo "README.md updated by helm-docs but skipping commit because release workflows checkout a detached HEAD."
fi
cd ../../..
- name: Determine chart version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ inputs.chart_version }}"
else
VERSION="${{ github.event.release.tag_name }}"
VERSION="${VERSION#v}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Update Chart.yaml version
run: |
VERSION="${{ steps.version.outputs.version }}"
sed -i "s/^version: .*/version: $VERSION/" deploy/helm/pulse/Chart.yaml
sed -i "s/^appVersion: .*/appVersion: \"$VERSION\"/" deploy/helm/pulse/Chart.yaml
# Commit only on workflow_dispatch (release runs are detached HEAD)
if [ "${GITHUB_EVENT_NAME}" != "release" ] && ! git diff --quiet deploy/helm/pulse/Chart.yaml; then
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git add deploy/helm/pulse/Chart.yaml
git commit -m "Auto-update Helm chart version to $VERSION"
git push
elif [ "${GITHUB_EVENT_NAME}" = "release" ] && ! git diff --quiet deploy/helm/pulse/Chart.yaml; then
echo "Chart.yaml updated for packaging, skipping commit (detached HEAD on release event)."
fi
- name: Validate Helm chart
run: |
# Strict linting
helm lint deploy/helm/pulse --strict
# Template validation with minimal values
helm template pulse deploy/helm/pulse --set persistence.enabled=false > /dev/null
# Template validation with common overrides
helm template pulse deploy/helm/pulse \
--set ingress.enabled=true \
--set ingress.hosts[0].host=pulse.example.com \
--set agent.enabled=true > /dev/null
echo "✓ Chart validation passed"
- name: Smoke test with kind
run: |
# Install kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# Create cluster
kind create cluster --name pulse-test --wait 5m
# Install chart
helm install pulse deploy/helm/pulse \
--set persistence.enabled=false \
--set server.secretEnv.create=true \
--set server.secretEnv.data.API_TOKENS=test-token \
--wait --timeout 3m
# Verify deployment
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=pulse --timeout=120s
kubectl get pods -l app.kubernetes.io/name=pulse
# Test upgrade
helm upgrade pulse deploy/helm/pulse \
--set persistence.enabled=false \
--set server.secretEnv.create=true \
--set server.secretEnv.data.API_TOKENS=test-token \
--wait --timeout 3m
# Cleanup
kind delete cluster --name pulse-test
echo "✓ Smoke test passed"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.6.0
with:
charts_dir: deploy/helm
config: cr.yaml
skip_existing: true
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
CR_RELEASE_NAME_TEMPLATE: "helm-chart-{{ .Version }}"
CR_MAKE_RELEASE_LATEST: false
- name: Mark Helm chart release as pre-release (avoid latest override)
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
TAG="helm-chart-${{ steps.version.outputs.version }}"
gh release edit "$TAG" --prerelease --latest=false || echo "No helm chart release to edit for $TAG"