diff --git a/.github/workflows/check-configs-manifests-changes.yaml b/.github/workflows/check-configs-changes.yml similarity index 50% rename from .github/workflows/check-configs-manifests-changes.yaml rename to .github/workflows/check-configs-changes.yml index 344dc1850b..6f39b343a9 100644 --- a/.github/workflows/check-configs-manifests-changes.yaml +++ b/.github/workflows/check-configs-changes.yml @@ -1,17 +1,21 @@ -name: "Check Config and Manifests changes" +name: "Check Config and Manifests Changes" + +env: + PR_CACHE_KEY: pr-manifests-${{ github.run_id }}-${{ github.run_attempt }} + MAIN_CACHE_KEY: main-manifests-${{ github.run_id }}-${{ github.run_attempt }} on: pull_request: - types: [opened, synchronize, reopened] + types: [opened, synchronize, reopened, labeled, unlabeled] jobs: - check-configs-manifests-changes: + check-configs-changes: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: - fetch-depth: 2 # Needed for diff comparison + fetch-depth: 2 - name: Install Dependencies run: | @@ -28,16 +32,13 @@ jobs: repo: context.repo.repo, pull_number: context.payload.pull_request.number, }); - - const configFiles = files.filter(file => file.filename.startsWith('config/')); - + const configFiles = files.filter(file => file.filename.startsWith('config/') || file.filename.startsWith('e2e/')); core.setOutput('configFiles', configFiles.map(file => file.filename).join(',')); - name: Evaluate Config Changes run: | echo "Changed config files:" echo "${{ steps.changed-files.outputs.configFiles }}" | tr ',' '\n' - if [ "${{ steps.changed-files.outputs.configFiles }}" != "" ]; then echo "⚠️ Config directory changes detected!" echo "config_changed=true" >> $GITHUB_ENV @@ -46,15 +47,6 @@ jobs: echo "config_changed=false" >> $GITHUB_ENV fi - - name: Run `make manifests` - run: make manifests - - - name: Compare Generated Manifests with `main` - id: check-manifests - run: | - git diff --exit-code config/ || echo "outdated_manifests=true" >> $GITHUB_ENV - continue-on-error: true - - name: Add Warning if Config Files Changed if: env.config_changed == 'true' uses: actions/github-script@v7 @@ -79,14 +71,79 @@ jobs: labels: ["configs-changed"] }); - - name: Fail if Manifests Are Outdated - if: env.outdated_manifests == 'true' + create-pr-manifests: + runs-on: ubuntu-latest + steps: + - name: Checkout PR branch + uses: actions/checkout@v4 + + - name: Run 'make manifests' run: | - echo "❌ Manifests are outdated! Run 'make manifests' and commit changes." - exit 1 + make dry-run-control-plane + mkdir -p ./cache/pr + mv ./dry-run/manifests.yaml ./cache/pr/manifests.yaml + + - name: Save PR manifests in cache + uses: actions/cache/save@v4 + with: + path: ./cache/pr/ + key: ${{ env.PR_CACHE_KEY }} + + create-main-manifests: + runs-on: ubuntu-latest + steps: + - name: Checkout main branch + uses: actions/checkout@v4 + with: + ref: main + + - name: Run 'make manifests' on main + run: | + make dry-run-control-plane + mkdir -p ./cache/main + mv ./dry-run/manifests.yaml ./cache/main/manifests.yaml + + - name: Save 'main' manifests in cache + uses: actions/cache/save@v4 + with: + path: ./cache/main/ + key: ${{ env.MAIN_CACHE_KEY }} + + diff-manifests: + needs: + - create-pr-manifests + - create-main-manifests + runs-on: ubuntu-latest + steps: + - name: Restore PR manifests cache + uses: actions/cache/restore@v4 + with: + path: ./cache/pr/ + key: ${{ env.PR_CACHE_KEY }} + + - name: Restore 'main' manifests cache + uses: actions/cache/restore@v4 + with: + path: ./cache/main/ + key: ${{ env.MAIN_CACHE_KEY }} + + - name: Compare Manifests + run: | + set +e + DIFF_OUTPUT=$(diff ./cache/pr/manifests.yaml ./cache/main/manifests.yaml) + EXIT_CODE=$? + if [[ $EXIT_CODE != 0 ]]; then + echo "❌ **Detected diff in manifests!** Run 'make manifests' and commit changes." + echo "$DIFF_OUTPUT" + echo "outdated_manifests=true" >> $GITHUB_ENV + exit $EXIT_CODE + fi + set -e + echo "✅ No diff in manifests, all good." + echo "outdated_manifests=false" >> $GITHUB_ENV - name: Add PR Comment if Manifests Are Outdated - if: failure() && env.outdated_manifests == 'true' + if: env.outdated_manifests == 'true' uses: actions/github-script@v7 with: script: | @@ -94,7 +151,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: context.payload.pull_request.number, - body: "❌ **Manifests are outdated!** Please run `make manifests` and commit the changes." + body: "❌ **Detected diff in manifests!** Run 'make manifests' and commit changes." }); github.rest.issues.addLabels({ owner: context.repo.owner, @@ -102,3 +159,21 @@ jobs: issue_number: context.payload.pull_request.number, labels: ["outdated-manifests"] }); + + - name: Remove 'outdated-manifests' Label if Fixed + if: env.outdated_manifests == 'false' + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + name: "outdated-manifests" + }); + + - name: Fail if Manifests Are Outdated + if: env.outdated_manifests == 'true' + run: | + echo "❌ Manifests are outdated! Run 'make manifests' and commit changes." + exit 1 diff --git a/.github/workflows/check-configs-manifests-changes.yml b/.github/workflows/check-configs-manifests-changes.yml new file mode 100644 index 0000000000..a6ab012ac6 --- /dev/null +++ b/.github/workflows/check-configs-manifests-changes.yml @@ -0,0 +1,52 @@ +name: "Check if Manifests are Up-to-Date" + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + check-manifests-changes: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 2 # Needed for diff comparison + + - name: Install Dependencies + run: | + sudo apt update + sudo apt install -y make + + - name: Generate KLM Manifests from PR + run: make manifests + + - name: Compare Generated Manifests with `main` + id: check-manifests + run: | + git diff --exit-code config/ || echo "outdated_manifests=true" >> $GITHUB_ENV + continue-on-error: true + + - name: Fail if Manifests Are Outdated + if: env.outdated_manifests == 'true' + run: | + echo "❌ Manifests are outdated! Run 'make manifests' and commit changes." + exit 1 + + - name: Add PR Comment if Manifests Are Outdated + if: failure() && env.outdated_manifests == 'true' + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + body: "❌ **Manifests are outdated!** Please run `make manifests` and commit the changes." + }); + github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + labels: ["outdated-manifests"] + });