206 lines
7.3 KiB
YAML
206 lines
7.3 KiB
YAML
name: 🧭 Helm Chart Prerelease
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, synchronize, reopened]
|
|
paths:
|
|
- "hosting/k8s/helm/**"
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- "hosting/k8s/helm/**"
|
|
workflow_dispatch:
|
|
inputs:
|
|
app_version:
|
|
description: "Override appVersion (e.g. 'main', 'v4.4.4'). Leave empty to keep Chart.yaml value."
|
|
required: false
|
|
type: string
|
|
default: ""
|
|
|
|
concurrency:
|
|
group: helm-prerelease-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
REGISTRY: ghcr.io
|
|
CHART_NAME: trigger
|
|
|
|
jobs:
|
|
lint-and-test:
|
|
runs-on: warp-ubuntu-latest-x64-2x
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Set up Helm
|
|
uses: azure/setup-helm@9bc31f4ebc9c6b171d7bfbaa5d006ae7abdb4310 # v5.0.1
|
|
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@sha256:85dbef6b4b312b99133decc9c6fc9495e9fc5f92293d4ff3b7e1b30f5611823c
|
|
with:
|
|
entrypoint: "/kubeconform"
|
|
args: "-summary -output json ./helm-output"
|
|
|
|
prerelease:
|
|
needs: lint-and-test
|
|
# Set the ENABLE_HELM_PRERELEASE repository variable to 'false' to turn off
|
|
# publishing the chart to GHCR — e.g. forks/mirrors that lack write_package
|
|
# on the owner's charts namespace. Defaults to enabled; the lint-and-test
|
|
# job above always runs regardless.
|
|
if: |
|
|
vars.ENABLE_HELM_PRERELEASE != 'false' &&
|
|
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
|
|
github.event_name == 'push' ||
|
|
github.event_name == 'workflow_dispatch')
|
|
runs-on: warp-ubuntu-latest-x64-2x
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
pull-requests: write
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Set up Helm
|
|
uses: azure/setup-helm@9bc31f4ebc9c6b171d7bfbaa5d006ae7abdb4310 # v5.0.1
|
|
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@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Generate prerelease version
|
|
id: version
|
|
run: |
|
|
BASE_VERSION=$(grep '^version:' ./hosting/k8s/helm/Chart.yaml | awk '{print $2}')
|
|
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
|
|
PR_NUMBER=${{ github.event.pull_request.number }}
|
|
SHORT_SHA=$(echo "${{ github.event.pull_request.head.sha }}" | cut -c1-7)
|
|
PRERELEASE_VERSION="${BASE_VERSION}-pr${PR_NUMBER}.${SHORT_SHA}"
|
|
elif [[ "${{ github.event_name }}" == "push" ]]; then
|
|
SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7)
|
|
PRERELEASE_VERSION="${BASE_VERSION}-main.${SHORT_SHA}"
|
|
else
|
|
SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7)
|
|
REF_SLUG=$(echo "${GITHUB_REF_NAME}" | tr '/' '-' | tr -cd 'a-zA-Z0-9-')
|
|
if [[ -z "$REF_SLUG" ]]; then
|
|
REF_SLUG="manual"
|
|
fi
|
|
PRERELEASE_VERSION="${BASE_VERSION}-${REF_SLUG}.${SHORT_SHA}"
|
|
fi
|
|
echo "version=$PRERELEASE_VERSION" >> "$GITHUB_OUTPUT"
|
|
echo "Prerelease version: $PRERELEASE_VERSION"
|
|
|
|
- name: Update Chart.yaml with prerelease version
|
|
run: |
|
|
sed -i "s/^version:.*/version: ${STEPS_VERSION_OUTPUTS_VERSION}/" ./hosting/k8s/helm/Chart.yaml
|
|
env:
|
|
STEPS_VERSION_OUTPUTS_VERSION: ${{ steps.version.outputs.version }}
|
|
|
|
- name: Override appVersion
|
|
if: github.event_name == 'workflow_dispatch' && inputs.app_version != ''
|
|
env:
|
|
APP_VERSION: ${{ inputs.app_version }}
|
|
run: |
|
|
yq -i '.appVersion = strenv(APP_VERSION)' ./hosting/k8s/helm/Chart.yaml
|
|
|
|
- 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"
|
|
env:
|
|
STEPS_VERSION_OUTPUTS_VERSION: ${{ steps.version.outputs.version }}
|
|
|
|
- name: Write run summary
|
|
run: |
|
|
{
|
|
echo "### 🧭 Helm Chart Prerelease Published"
|
|
echo ""
|
|
echo "**Version:** \`${STEPS_VERSION_OUTPUTS_VERSION}\`"
|
|
echo ""
|
|
echo "**Install:**"
|
|
echo '```bash'
|
|
echo "helm upgrade --install trigger \\"
|
|
echo " oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts/${{ env.CHART_NAME }} \\"
|
|
echo " --version \"${STEPS_VERSION_OUTPUTS_VERSION}\""
|
|
echo '```'
|
|
} >> "$GITHUB_STEP_SUMMARY"
|
|
env:
|
|
STEPS_VERSION_OUTPUTS_VERSION: ${{ steps.version.outputs.version }}
|
|
|
|
- name: Find existing comment
|
|
if: github.event_name == 'pull_request'
|
|
uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0
|
|
id: find-comment
|
|
with:
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
comment-author: "github-actions[bot]"
|
|
body-includes: "Helm Chart Prerelease Published"
|
|
|
|
- name: Create or update PR comment
|
|
if: github.event_name == 'pull_request'
|
|
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
|
|
with:
|
|
comment-id: ${{ steps.find-comment.outputs.comment-id }}
|
|
issue-number: ${{ github.event.pull_request.number }}
|
|
body: |
|
|
### 🧭 Helm Chart Prerelease Published
|
|
|
|
**Version:** `${{ steps.version.outputs.version }}`
|
|
|
|
**Install:**
|
|
```bash
|
|
helm upgrade --install trigger \
|
|
oci://ghcr.io/${{ github.repository_owner }}/charts/trigger \
|
|
--version "${{ steps.version.outputs.version }}"
|
|
```
|
|
|
|
> ⚠️ This is a prerelease for testing. Do not use in production.
|
|
edit-mode: replace
|