4949 - name : Run tests
5050 run : swift test --parallel -Xswiftc -warnings-as-errors
5151
52+ api-breakage :
53+ if : github.event_name == 'pull_request'
54+ runs-on : macos-26
55+ timeout-minutes : 30
56+ steps :
57+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
58+ with :
59+ persist-credentials : false
60+ fetch-depth : 0
61+ - uses : actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
62+ with :
63+ path : .build
64+ key : macos-api-breakage-spm-${{ hashFiles('Package.resolved', 'Package.swift') }}
65+ restore-keys : macos-api-breakage-spm-
66+ - name : Diagnose API breaking changes
67+ run : swift package diagnose-api-breaking-changes "origin/${{ github.base_ref }}"
68+
5269 docs :
5370 runs-on : macos-26
5471 timeout-minutes : 20
@@ -66,18 +83,25 @@ jobs:
6683
6784 check :
6885 if : always()
69- needs : [lint, test-macos, docs]
86+ needs : [lint, test-macos, api-breakage, docs]
7087 runs-on : ubuntu-latest
7188 timeout-minutes : 5
7289 steps :
7390 - name : Verify all jobs passed
7491 run : |
92+ api_ok=true
93+ if [[ "${{ needs.api-breakage.result }}" != "success" && \
94+ "${{ needs.api-breakage.result }}" != "skipped" ]]; then
95+ api_ok=false
96+ fi
7597 if [[ "${{ needs.lint.result }}" != "success" || \
7698 "${{ needs.test-macos.result }}" != "success" || \
77- "${{ needs.docs.result }}" != "success" ]]; then
99+ "${{ needs.docs.result }}" != "success" || \
100+ "$api_ok" != "true" ]]; then
78101 echo "Required jobs failed:"
79102 echo " lint: ${{ needs.lint.result }}"
80103 echo " test-macos: ${{ needs.test-macos.result }}"
104+ echo " api-breakage: ${{ needs.api-breakage.result }}"
81105 echo " docs: ${{ needs.docs.result }}"
82106 exit 1
83107 fi
0 commit comments