121 lines
4.0 KiB
YAML
121 lines
4.0 KiB
YAML
name: render-manifests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- "clusters/**"
|
|
- ! "clusters/*/archive"
|
|
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
CLUSTERS: cl01tl
|
|
|
|
jobs:
|
|
render-manifests-helm:
|
|
runs-on: ubuntu-js
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Helm
|
|
uses: azure/setup-helm@v4
|
|
with:
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
version: v3.17.2 # Pending https://github.com/helm/helm/pull/30743
|
|
|
|
- name: Render Helm Manifests
|
|
run: |
|
|
for cluster in $CLUSTERS; do
|
|
mkdir -p ${{ gitea.workspace }}/clusters/$cluster/manifests
|
|
|
|
for chart_path in ${{ gitea.workspace }}/clusters/$cluster/helm/*; do
|
|
chart_name=$(basename "$chart_path")
|
|
|
|
echo ">> Rendering chart: $chart_name"
|
|
|
|
if [ -f "$chart_path/Chart.yaml" ]; then
|
|
mkdir -p ${{ gitea.workspace }}/clusters/$cluster/manifests/$chart_name
|
|
OUTPUT_FILE="${{ gitea.workspace }}/clusters/$cluster/manifests/$chart_name/$chart_name.yaml"
|
|
|
|
cd $chart_path
|
|
|
|
echo ""
|
|
echo ">> Building helm dependency ..."
|
|
helm dependency build
|
|
|
|
echo ""
|
|
echo ">> Linting helm ..."
|
|
helm lint --namespace "$chart_name" --with-subcharts
|
|
|
|
echo ""
|
|
echo ">> Rendering templates ..."
|
|
helm template "$chart_name" ./ --namespace "$chart_name" --include-crds > "$OUTPUT_FILE"
|
|
|
|
echo ""
|
|
echo ">> Manifests for $chart_name rendered to $OUTPUT_FILE"
|
|
echo ""
|
|
else
|
|
echo ""
|
|
echo ">> Directory $chart_path does not contain a Chart.yaml. Skipping ..."
|
|
echo ""
|
|
fi
|
|
done
|
|
done
|
|
|
|
- name: Create Pull Request
|
|
id: pull-request
|
|
uses: peter-evans/create-pull-request@v7
|
|
with:
|
|
token: ${{ secrets.GITEA_TOKEN }}
|
|
commit-message: "chore: Update manifests after chart change"
|
|
branch: auto/update-manifests
|
|
branch-suffix: timestamp
|
|
base: manifests
|
|
title: "Manifest Update: App Changes"
|
|
body: |
|
|
This PR contains the newly rendered Kubernetes manifests.
|
|
|
|
* Triggered by workflow run ${{ github.run_id }}
|
|
* Review the `files changed` tab for the full YAML diff.
|
|
labels: |
|
|
manifests
|
|
automated
|
|
add-paths: |
|
|
clusters/**/manifests/
|
|
|
|
- name: ntfy Created
|
|
uses: niniyas/ntfy-action@master
|
|
if: steps.pull-request.outputs.pull-request-operation == 'created'
|
|
with:
|
|
url: "${{ secrets.NTFY_URL }}"
|
|
topic: "${{ secrets.NTFY_TOPIC }}"
|
|
title: "Manifest Render PR Created - Infrastructure"
|
|
priority: 3
|
|
headers: '{"Authorization": "Bearer ${{ secrets.NTFY_CRED }}"}'
|
|
tags: action,successfully,completed
|
|
details: "Manifest rendering for Infrastructure has created PR ${{ steps.pull-request.outputs.pull-request-number }}!"
|
|
icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png"
|
|
|
|
- name: ntfy Failed
|
|
uses: niniyas/ntfy-action@master
|
|
if: failure()
|
|
with:
|
|
url: "${{ secrets.NTFY_URL }}"
|
|
topic: "${{ secrets.NTFY_TOPIC }}"
|
|
title: "Manifest Render Failure - Infrastructure"
|
|
priority: 4
|
|
headers: '{"Authorization": "Bearer ${{ secrets.NTFY_CRED }}"}'
|
|
tags: action,failed
|
|
details: "Manifest rendering for Infrastructure has failed!"
|
|
icon: "https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png"
|
|
actions: '[{"action": "view", "label": "Open Gitea", "url": "https://gitea.alexlebens.dev/alexlebens/infrastructure/actions?workflow=render-manifests.yaml", "clear": true}]'
|
|
image: true
|