name: Check with kubeconform on: push: branches: [ main ] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: bmuschko/setup-kubeconform@v1 name: Setup Kubeconform - 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 \ | xargs -0 kubeconform \ -summary \ -verbose \ -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/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!" fi 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 }} token: ${{ secrets.TELEGRAM_TOKEN }} message: | ❌ Kubernetes validation failed! Invalid files: ${{ env.INVALID_FILES }}