From 2f123cb44791ee97d86be6cc737152259d0e3db9 Mon Sep 17 00:00:00 2001 From: yiliang114 <1204183885@qq.com> Date: Wed, 17 Jun 2026 21:40:49 +0800 Subject: [PATCH 1/2] ci(release): report required Test checks on release PRs and auto-approve Release-sync PRs skipped the matrix Test job at job level, so the required "Test (os, Node 22.x)" contexts were never reported and the PR could not merge. Move the skip to step level so the job still expands its matrix and concludes as a work-free pass. Also add a CI_DEV_BOT_PAT approval on the release PR to cover one of the two required reviews. --- .github/workflows/ci.yml | 15 +++++++++++---- .github/workflows/release.yml | 12 ++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1c7b4ec4fb6..d9313f5506e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -155,7 +155,9 @@ jobs: test: name: 'Test (${{ matrix.os }}, Node ${{ matrix.node-version }})' needs: 'classify_pr' - if: "${{ !cancelled() && needs.classify_pr.outputs.skip_ci != 'true' }}" + # Stay running on release-sync PRs so the required Test contexts still + # report; the per-step skip_ci guards below make them no-op (pass) there. + if: "${{ !cancelled() }}" runs-on: '${{ matrix.os }}' permissions: contents: 'read' @@ -176,9 +178,11 @@ jobs: upload-coverage: 'false' steps: - name: 'Checkout' + if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}" uses: 'actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd' # v6.0.2 - name: 'Set up Node.js ${{ matrix.node-version }}' + if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}" uses: 'actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e' # v6.4.0 with: node-version: '${{ matrix.node-version }}' @@ -187,6 +191,7 @@ jobs: registry-url: 'https://registry.npmjs.org/' - name: 'Configure npm for rate limiting' + if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}" run: |- npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 120000 @@ -194,17 +199,19 @@ jobs: npm config set fetch-timeout 300000 - name: 'Install dependencies' + if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}" run: |- npm ci --prefer-offline --no-audit --progress=false - name: 'Run tests and generate reports' + if: "${{ needs.classify_pr.outputs.skip_ci != 'true' }}" env: NO_COLOR: true run: 'npm run test:ci' - name: 'Publish Test Report (for non-forks)' if: |- - ${{ always() && (github.event.pull_request.head.repo.full_name == github.repository) }} + ${{ always() && needs.classify_pr.outputs.skip_ci != 'true' && (github.event.pull_request.head.repo.full_name == github.repository) }} uses: 'dorny/test-reporter@dc3a92680fcc15842eef52e8c4606ea7ce6bd3f3' # ratchet:dorny/test-reporter@v2 with: name: 'Test Results (${{ matrix.os }}, Node ${{ matrix.node-version }})' @@ -214,7 +221,7 @@ jobs: - name: 'Upload Test Results Artifact (for forks)' if: |- - ${{ always() && (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} + ${{ always() && needs.classify_pr.outputs.skip_ci != 'true' && (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} uses: 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' # v7.0.1 with: name: 'test-results-fork-${{ matrix.node-version }}-${{ matrix.os }}' @@ -222,7 +229,7 @@ jobs: - name: 'Upload coverage reports' if: |- - ${{ always() && matrix.upload-coverage == 'true' }} + ${{ always() && needs.classify_pr.outputs.skip_ci != 'true' && matrix.upload-coverage == 'true' }} uses: 'actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a' # v7.0.1 with: name: 'coverage-reports-${{ matrix.node-version }}-${{ matrix.os }}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0bd54b24439..68e33aff92c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -483,6 +483,18 @@ jobs: echo "PR_URL=${pr_url}" >> "${GITHUB_OUTPUT}" + - name: 'Approve release PR' + if: |- + ${{ needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.is_nightly == 'false' && needs.prepare.outputs.is_preview == 'false' }} + env: + # Separate bot account from the PR author (CI_BOT_PAT) so GitHub + # allows the approval; covers one of the two required reviews. + GITHUB_TOKEN: '${{ secrets.CI_DEV_BOT_PAT }}' + PR_URL: '${{ steps.pr.outputs.PR_URL }}' + run: |- + set -euo pipefail + gh pr review "${PR_URL}" --approve --body "Automated approval for the release version bump." + - name: 'Enable auto-merge for release PR' if: |- ${{ needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.is_nightly == 'false' && needs.prepare.outputs.is_preview == 'false' }} From 441cc5d6878ad9505b0e033e8ee6466bb714cf98 Mon Sep 17 00:00:00 2001 From: yiliang114 <1204183885@qq.com> Date: Wed, 17 Jun 2026 22:07:03 +0800 Subject: [PATCH 2/2] ci: single-quote the test job if expression for yamllint After dropping the inner 'true' comparison, double quotes are no longer required, so yamllint's quoted-strings rule wants single quotes. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d9313f5506e..e57fa1fc7ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -157,7 +157,7 @@ jobs: needs: 'classify_pr' # Stay running on release-sync PRs so the required Test contexts still # report; the per-step skip_ci guards below make them no-op (pass) there. - if: "${{ !cancelled() }}" + if: '${{ !cancelled() }}' runs-on: '${{ matrix.os }}' permissions: contents: 'read'