diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 911fc6a1..bc1edd3c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -149,22 +149,3 @@ jobs: with: token: ${{ secrets.QLTY_COVERAGE_TOKEN }} files: lcov.info - - # Single required status check for branch protection. - # Passes when all jobs pass OR when jobs are skipped (no Rust changes). - ci-pass: - name: CI - runs-on: ubuntu-latest - if: always() - needs: [quality, test, test-cross-platform, coverage] - steps: - - name: Check results - run: | - results=("${{ needs.quality.result }}" "${{ needs.test.result }}" "${{ needs.test-cross-platform.result }}" "${{ needs.coverage.result }}") - for result in "${results[@]}"; do - if [[ "$result" != "success" && "$result" != "skipped" ]]; then - echo "Job failed with result: $result" - exit 1 - fi - done - echo "All jobs passed or were skipped" diff --git a/.mergify.yml b/.mergify.yml new file mode 100644 index 00000000..e1360c07 --- /dev/null +++ b/.mergify.yml @@ -0,0 +1,32 @@ +merge_protections: + - name: CI must pass + description: >- + All CI checks must pass or be legitimately skipped (path filtering). + Matrix job names differ between running and skipped states, so the + test-cross-platform rule uses an and/or pattern to handle both. + if: + - base = main + success_conditions: + - or: + - check-success = quality + - check-skipped = quality + - or: + - check-success = test + - check-skipped = test + - or: + - and: + - "check-success = test-cross-platform (ubuntu-latest, Linux)" + - "check-success = test-cross-platform (ubuntu-22.04, Linux)" + - "check-success = test-cross-platform (macos-latest, macOS)" + - "check-success = test-cross-platform (windows-latest, Windows)" + - check-skipped = test-cross-platform + - or: + - check-success = coverage + - check-skipped = coverage + + - name: Do not merge outdated PRs + description: Make sure PRs are within 10 commits of the base branch before merging + if: + - base = main + success_conditions: + - "#commits-behind <= 10"