109 lines
3.6 KiB
YAML
109 lines
3.6 KiB
YAML
name: Publish Helm Chart
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: "Release tag to build (e.g., v4.3.6)"
|
|
required: true
|
|
type: string
|
|
dry_run:
|
|
description: "Prepare artifacts without publishing"
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
release:
|
|
types: [published]
|
|
repository_dispatch:
|
|
types: [publish-helm]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.tag) || github.ref || github.run_id }}
|
|
cancel-in-progress: false
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
publish-helm:
|
|
name: Publish Helm chart to GHCR
|
|
if: ${{ github.event_name != 'release' || !github.event.release.prerelease }}
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Resolve version
|
|
id: meta
|
|
run: |
|
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
|
TAG="${{ inputs.tag }}"
|
|
elif [[ "${{ github.event_name }}" == "release" ]]; then
|
|
TAG="${{ github.event.release.tag_name }}"
|
|
elif [[ "${{ github.event_name }}" == "repository_dispatch" ]]; then
|
|
TAG="${{ github.event.client_payload.tag }}"
|
|
fi
|
|
|
|
VERSION="${TAG#v}"
|
|
DRY_RUN="${{ inputs.dry_run || 'false' }}"
|
|
|
|
{
|
|
echo "tag=${TAG}"
|
|
echo "version=${VERSION}"
|
|
echo "dry_run=${DRY_RUN}"
|
|
} >> "$GITHUB_OUTPUT"
|
|
|
|
{
|
|
echo "## Helm Publish Metadata"
|
|
echo "- **Tag**: \`${TAG}\`"
|
|
echo "- **Version**: \`${VERSION}\`"
|
|
echo "- **Dry Run**: \`${DRY_RUN}\`"
|
|
} >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- name: Setup Helm
|
|
uses: azure/setup-helm@v5
|
|
|
|
- name: Lint chart
|
|
run: helm lint --strict charts/kreuzberg/
|
|
|
|
- name: Update Chart.yaml version
|
|
run: |
|
|
sed -i "s/^version:.*/version: ${{ steps.meta.outputs.version }}/" charts/kreuzberg/Chart.yaml
|
|
sed -i "s/^appVersion:.*/appVersion: \"${{ steps.meta.outputs.version }}\"/" charts/kreuzberg/Chart.yaml
|
|
{
|
|
echo "### Chart.yaml"
|
|
echo '```yaml'
|
|
cat charts/kreuzberg/Chart.yaml
|
|
echo '```'
|
|
} >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- name: Package chart
|
|
run: |
|
|
helm package charts/kreuzberg/ --destination .helm-packages/
|
|
echo "### Packaged" >> "$GITHUB_STEP_SUMMARY"
|
|
ls -lh .helm-packages/ >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- name: Log in to GitHub Container Registry
|
|
if: ${{ steps.meta.outputs.dry_run != 'true' }}
|
|
uses: docker/login-action@v4
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Push chart to GHCR
|
|
if: ${{ steps.meta.outputs.dry_run != 'true' }}
|
|
run: |
|
|
helm push .helm-packages/kreuzberg-${{ steps.meta.outputs.version }}.tgz oci://ghcr.io/kreuzberg-dev/charts
|
|
echo "### Published" >> "$GITHUB_STEP_SUMMARY"
|
|
echo "Chart pushed to \`oci://ghcr.io/kreuzberg-dev/charts/kreuzberg:${{ steps.meta.outputs.version }}\`" >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- name: Dry-run summary
|
|
if: ${{ steps.meta.outputs.dry_run == 'true' }}
|
|
run: |
|
|
echo "### Dry Run" >> "$GITHUB_STEP_SUMMARY"
|
|
echo "Would have pushed \`kreuzberg-${{ steps.meta.outputs.version }}.tgz\` to \`oci://ghcr.io/kreuzberg-dev/charts\`" >> "$GITHUB_STEP_SUMMARY"
|