From 64e52767888399887e1946c20af5b372fc0e9115 Mon Sep 17 00:00:00 2001 From: ab Date: Sun, 13 Apr 2025 18:50:24 +0000 Subject: [PATCH] Update .gitea/workflows/lint.yaml --- .gitea/workflows/lint.yaml | 67 +++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/.gitea/workflows/lint.yaml b/.gitea/workflows/lint.yaml index 38e9bde..91ff7a5 100644 --- a/.gitea/workflows/lint.yaml +++ b/.gitea/workflows/lint.yaml @@ -2,47 +2,63 @@ name: Check with kubeconform on: push: - branches: [main] + branches: [ main ] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - + - uses: bmuschko/setup-kubeconform@v1 name: Setup Kubeconform - - - name: Validate manifests - id: validation + + - name: Kubeconform validation + id: kubeconform run: | + # Create a temporary file for storing validation output + VALIDATION_OUTPUT=$(mktemp) + + # Run kubeconform and capture output find . -name '*.yaml' \ ! -name '*values.yaml' \ - ! -path './.gitea/*' -print0 \ + ! -path './.gitea/*' \ + -print0 \ | xargs -0 kubeconform \ -summary \ -verbose \ - -output json \ + -output pretty \ -ignore-missing-schemas \ -schema-location default \ -schema-location 'https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/{{.Group}}/{{.ResourceKind}}_{{.ResourceAPIVersion}}.json' \ - -schema-location 'https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/kustomization.json' \ - > kubeconform_output.json - - invalid_count=$(jq '[.resources[] | select(.status=="invalid")] | length' kubeconform_output.json) - - if [[ "$invalid_count" -gt 0 ]]; then - echo "❌ Found $invalid_count invalid manifests:" - jq -r '.resources[] | select(.status=="invalid") | "- \(.filename): \(.msg)"' kubeconform_output.json \ - | tee invalid_files.txt - echo "::error::Validation failed with $invalid_count errors." + -schema-location 'https://raw.githubusercontent.com/SchemaStore/schemastore/refs/heads/master/src/schemas/json/kustomization.json' > $VALIDATION_OUTPUT 2>&1 || true + + # Display output in logs + cat $VALIDATION_OUTPUT + + # Extract invalid files to a list + if grep -q "invalid" $VALIDATION_OUTPUT; then + grep -o "[^ ]*.yaml:.*invalid" $VALIDATION_OUTPUT | sort | uniq > invalid_files.txt + echo "FAILED=true" >> $GITHUB_ENV + echo "::error::Kubernetes manifest validation failed!" + cat invalid_files.txt exit 1 else - echo "✅ All manifests are valid!" + echo "All manifests are valid!" fi - - - name: Send Telegram notification on failure - if: failure() + continue-on-error: true + + - name: Build notification message + if: env.FAILED == 'true' + run: | + # Read invalid files and format them for the message + INVALID_FILES=$(cat invalid_files.txt) + echo "INVALID_FILES<> $GITHUB_ENV + echo "$INVALID_FILES" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + + - name: Send Telegram message + if: env.FAILED == 'true' uses: appleboy/telegram-action@master with: to: ${{ secrets.TELEGRAM_TO }} @@ -50,8 +66,7 @@ jobs: format: html message: | ❌ Kubernetes validation failed! - - 📝 Errors: -
${{ join(files('invalid_files.txt'), '\n') }}
- - 🔗 Check details + + Invalid files: + ${{ env.INVALID_FILES }} + 🔗 Check details \ No newline at end of file