Skip to content
Merged
Show file tree
Hide file tree
Changes from 42 commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
c588275
f
alfi0812 Jan 30, 2026
4934fc0
Add kubeconform script
alfi0812 Jan 30, 2026
7ef1e69
add flux diff
alfi0812 Jan 30, 2026
136f413
test
alfi0812 Jan 30, 2026
7956f8b
kustomize
alfi0812 Jan 30, 2026
3020d0f
test
alfi0812 Jan 30, 2026
5d5afae
f
alfi0812 Jan 30, 2026
667f1f1
f
alfi0812 Jan 30, 2026
a52ee45
f
alfi0812 Jan 30, 2026
3cd5d94
f
alfi0812 Jan 30, 2026
6b88070
spaces
alfi0812 Jan 30, 2026
4402a6c
f
alfi0812 Jan 30, 2026
63dad99
test
alfi0812 Jan 30, 2026
11ae209
f
alfi0812 Jan 30, 2026
0b09ad7
helm-releases
alfi0812 Jan 30, 2026
0c4f7c9
test
alfi0812 Jan 30, 2026
efd808c
test
alfi0812 Jan 30, 2026
72313fe
test
alfi0812 Jan 30, 2026
e36ae11
f
alfi0812 Jan 30, 2026
0dde87f
f
alfi0812 Jan 30, 2026
9eb0810
f
alfi0812 Jan 30, 2026
4a5dfdb
f
alfi0812 Jan 30, 2026
62eef0b
ahhh
alfi0812 Jan 30, 2026
5df846b
f
alfi0812 Jan 30, 2026
286fbef
f
alfi0812 Jan 30, 2026
f7432e9
f
alfi0812 Jan 30, 2026
1f87ba7
f
alfi0812 Jan 30, 2026
bb8af56
f
alfi0812 Jan 30, 2026
07504d4
test
alfi0812 Jan 30, 2026
bac4879
annoying
alfi0812 Jan 30, 2026
177c878
f
alfi0812 Jan 30, 2026
6a4a718
f
alfi0812 Jan 30, 2026
cd59884
more testing
alfi0812 Jan 30, 2026
5c59e1b
f
alfi0812 Jan 30, 2026
d6fbb1c
test
alfi0812 Jan 30, 2026
71dd928
f
alfi0812 Jan 30, 2026
8dc5a0f
f
alfi0812 Jan 30, 2026
940985c
f
alfi0812 Jan 30, 2026
7105932
test
alfi0812 Jan 30, 2026
b871306
f
alfi0812 Jan 30, 2026
485e0f3
test
alfi0812 Jan 30, 2026
b97119c
test it
alfi0812 Jan 30, 2026
32f299c
f
alfi0812 Jan 30, 2026
cd0f917
just for testing
alfi0812 Jan 30, 2026
32c7a44
f
alfi0812 Jan 30, 2026
2357d40
test
alfi0812 Jan 30, 2026
0683cf7
test
alfi0812 Jan 30, 2026
4dfc917
f
alfi0812 Jan 30, 2026
405bb4a
f
alfi0812 Jan 30, 2026
9340e81
test
alfi0812 Jan 30, 2026
eda4fbb
test
alfi0812 Jan 30, 2026
87eaf80
test
alfi0812 Jan 30, 2026
aac2893
f
alfi0812 Jan 30, 2026
a290c9c
f
alfi0812 Jan 30, 2026
5bea155
test
alfi0812 Jan 30, 2026
d45257e
f
alfi0812 Jan 30, 2026
c1092b9
f
alfi0812 Jan 30, 2026
d76f02e
f
alfi0812 Jan 30, 2026
b7786c8
lets just skip that.
alfi0812 Jan 30, 2026
0a45e59
f
alfi0812 Jan 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions .github/scripts/kubeconform.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
set -o errexit
set -o pipefail

KUBERNETES_DIR=$1

[[ -z "${KUBERNETES_DIR}" ]] && echo "Kubernetes location not specified" && exit 1

kustomize_args=("--load-restrictor=LoadRestrictionsNone")
kustomize_config="kustomization.yaml"
kubeconform_args=(
"-strict"
"-ignore-missing-schemas"
"-skip"
"Secret,ConfigMap"
"-schema-location"
"default"
"-schema-location"
"https://kubernetes-schemas.pages.dev/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json"
"-verbose"
)


echo "=== Validating standalone manifests in ${KUBERNETES_DIR} ==="
find "${KUBERNETES_DIR}" -maxdepth 1 -type f -name '*.yaml' -print0 | while IFS= read -r -d $'\0' file;
do
kubeconform "${kubeconform_args[@]}" "${file}"
if [[ ${PIPESTATUS[0]} != 0 ]]; then
exit 1
fi
done

echo "=== Validating all namespace.yaml files in ${KUBERNETES_DIR} ==="
find "${KUBERNETES_DIR}" -type f -name 'namespace.yaml' -print0 | while IFS= read -r -d $'\0' file;
do
echo "Validating ${file}"
kubeconform "${kubeconform_args[@]}" "${file}"
if [[ ${PIPESTATUS[0]} != 0 ]]; then
exit 1
fi
done

echo "=== Validating all helm-release.yaml files in ${KUBERNETES_DIR} ==="
find "${KUBERNETES_DIR}" -type f -name 'helm-release.yaml' -print0 | while IFS= read -r -d $'\0' file;
do
echo "Validating ${file}"
kubeconform "${kubeconform_args[@]}" "${file}"
if [[ ${PIPESTATUS[0]} != 0 ]]; then
exit 1
fi
done


echo "=== Validating kustomizations in ${KUBERNETES_DIR}/ ==="
find "${KUBERNETES_DIR}" -type f -name $kustomize_config -print0 | while IFS= read -r -d $'\0' file;
do
echo "=== Validating kustomizations in ${file/%$kustomize_config} ==="
kustomize build "${file/%$kustomize_config}" "${kustomize_args[@]}" | kubeconform "${kubeconform_args[@]}"
if [[ ${PIPESTATUS[0]} != 0 ]]; then
exit 1
fi
done
76 changes: 76 additions & 0 deletions .github/workflows/flux-diff.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Flux Helm Diff

on:
pull_request:
paths:
- '**/helm-release.yaml'

jobs:
flux-diff:
runs-on: ubuntu-latest
concurrency:
group: flux-diff-${{ github.event.pull_request.number }}
cancel-in-progress: true
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set changed helm releases
id: changed
run: |
# Get all helm-release.yaml files changed in this PR
files=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep 'helm-release.yaml' || true)
echo "changed_files=$files" >> $GITHUB_OUTPUT

- name: Run Flux Local Diff
if: ${{ steps.changed.outputs.changed_files != '' }}
id: flux
uses: docker://ghcr.io/allenporter/flux-local:v8.1.0@sha256:37c3c4309a351830b04f93c323adfcb0e28c368001818cd819cbce3e08828261
with:
entrypoint: /bin/sh
args: |
-c '
for file in ${{ steps.changed.outputs.changed_files }}; do
flux diff -f "$file" > diff.patch || true
cat diff.patch
done
'
env:
GITHUB_SHA: ${{ github.sha }}

- name: Generate Diff Output
if: ${{ steps.changed.outputs.changed_files != '' }}
id: diff
run: |
if [ -f diff.patch ] && [ -s diff.patch ]; then
echo "diff<<EOF" >> $GITHUB_OUTPUT
cat diff.patch >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

echo "## Flux diff" >> $GITHUB_STEP_SUMMARY
echo '```diff' >> $GITHUB_STEP_SUMMARY
cat diff.patch >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
fi

- if: ${{ steps.diff.outputs.diff != '' }}
name: Generate Token
uses: actions/create-github-app-token@v2.2.1
id: app-token
with:
app-id: ${{ secrets.BOT_APP_ID }}
private-key: ${{ secrets.BOT_APP_PRIVATE_KEY }}

- if: ${{ steps.diff.outputs.diff != '' }}
name: Add PR Comment
continue-on-error: true
uses: mshick/add-pr-comment@v2
with:
repo-token: "${{ steps.app-token.outputs.token }}"
message-id: "${{ github.event.pull_request.number }}/kubernetes/flux-diff"
header: "${{ github.event.pull_request.number }}/kubernetes/flux-diff"
message-failure: Diff was not successful
message: |
```diff
${{ steps.diff.outputs.diff }}
```
Comment thread Fixed
49 changes: 49 additions & 0 deletions .github/workflows/kubeconform.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: "Kubeconform"

on:
pull_request:

concurrency:
group: ${{ github.head_ref }}-pr-validate
cancel-in-progress: true

env:
KUBERNETES_DIR: ./embed/generic/kubernetes

jobs:
kubeconform:
name: Kubeconform
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
- name: Setup Homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Setup Workflow Tools
run: brew install fluxcd/tap/flux kubeconform kustomize
- name: Create dummy deploykey secret (CI only)
shell: bash
run: |
SECRET_PATH="embed/generic/kubernetes/flux-system/flux/deploykey.secret.yaml"

if [[ ! -f "$SECRET_PATH" ]]; then
echo "Creating dummy deploykey.secret.yaml for kubeconform"
mkdir -p "$(dirname "$SECRET_PATH")"
touch "$SECRET_PATH"
fi
- name: Inject ConfigMap data for CI
shell: bash
run: |
CONFIG_PATH="embed/generic/kubernetes/flux-system/flux/clustersettings.secret.yaml"

if [[ -f "$CONFIG_PATH" ]]; then
echo "Replacing REPLACEWITHENV in clustersettings.secret.yaml"

# Example: replace with dummy key-values for CI
sed -i "s|REPLACEWITHENV| dummyKey: dummyValue|" "$CONFIG_PATH"
fi
- name: Run kubeconform
shell: bash
run: bash ./.github/scripts/kubeconform.sh ${{ env.KUBERNETES_DIR }}