4343if :fromJSON(needs.build-context.outputs.run-docs)
4444uses :./.github/workflows/reusable-docs.yml
4545
46- check_autoconf_regen :
46+ check-autoconf-regen :
4747name :' Check if Autoconf files are up to date'
4848# Don't use ubuntu-latest but a specific version to make the job
4949# reproducible: to get the same tools versions (autoconf, aclocal, ...)
8686 exit 1
8787 fi
8888
89- check_generated_files :
89+ check-generated-files :
9090name :' Check if generated files are up to date'
9191# Don't use ubuntu-latest but a specific version to make the job
9292# reproducible: to get the same tools versions (autoconf, aclocal, ...)
@@ -147,7 +147,7 @@ jobs:
147147if :github.event_name == 'pull_request' # $GITHUB_EVENT_NAME
148148run :make check-c-globals
149149
150- build_windows :
150+ build-windows :
151151name :>-
152152 Windows
153153 ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
@@ -179,7 +179,7 @@ jobs:
179179arch :${{ matrix.arch }}
180180free-threading :${{ matrix.free-threading }}
181181
182- build_windows_msi :
182+ build-windows-msi :
183183name :>-# ${{ '' } is a hack to nest jobs under the same sidebar category
184184 Windows MSI${{ '' }}
185185needs :build-context
@@ -194,7 +194,7 @@ jobs:
194194with :
195195arch :${{ matrix.arch }}
196196
197- build_macos :
197+ build-macos :
198198name :>-
199199 macOS
200200 ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
@@ -228,7 +228,7 @@ jobs:
228228free-threading :${{ matrix.free-threading }}
229229os :${{ matrix.os }}
230230
231- build_ubuntu :
231+ build-ubuntu :
232232name :>-
233233 Ubuntu
234234 ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
@@ -260,7 +260,7 @@ jobs:
260260free-threading :${{ matrix.free-threading }}
261261os :${{ matrix.os }}
262262
263- build_ubuntu_ssltests :
263+ build-ubuntu-ssltests :
264264name :' Ubuntu SSL tests with OpenSSL'
265265runs-on :${{ matrix.os }}
266266timeout-minutes :60
@@ -322,15 +322,15 @@ jobs:
322322 -name :SSL tests
323323run :./python Lib/test/ssltests.py
324324
325- build_wasi :
325+ build-wasi :
326326name :' WASI'
327327needs :build-context
328328if :needs.build-context.outputs.run-tests == 'true'
329329uses :./.github/workflows/reusable-wasi.yml
330330with :
331331config_hash :${{ needs.build-context.outputs.config-hash }}
332332
333- test_hypothesis :
333+ test-hypothesis :
334334name :" Hypothesis tests on Ubuntu"
335335runs-on :ubuntu-24.04
336336timeout-minutes :60
@@ -445,8 +445,7 @@ jobs:
445445name :hypothesis-example-db
446446path :${{ env.CPYTHON_BUILDDIR }}/.hypothesis/examples/
447447
448-
449- build_asan :
448+ build-asan :
450449name :' Address sanitizer'
451450runs-on :${{ matrix.os }}
452451timeout-minutes :60
@@ -509,7 +508,7 @@ jobs:
509508 -name :Tests
510509run :xvfb-run make ci
511510
512- build_tsan :
511+ build-tsan :
513512name :>-
514513 Thread sanitizer
515514 ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
@@ -528,6 +527,7 @@ jobs:
528527cross-build-linux :
529528name :Cross build Linux
530529runs-on :ubuntu-latest
530+ timeout-minutes :60
531531needs :build-context
532532if :needs.build-context.outputs.run-tests == 'true'
533533steps :
@@ -592,8 +592,8 @@ jobs:
592592output-sarif :true
593593sanitizer :${{ matrix.sanitizer }}
594594 -name :Upload crash
595- uses :actions/upload-artifact@v4
596595if :failure() && steps.build.outcome == 'success'
596+ uses :actions/upload-artifact@v4
597597with :
598598name :${{ matrix.sanitizer }}-artifacts
599599path :./out/artifacts
@@ -606,36 +606,35 @@ jobs:
606606
607607all-required-green :# This job does nothing and is only used for the branch protection
608608name :All required checks pass
609- if : always()
610-
609+ runs-on : ubuntu-latest
610+ timeout-minutes : 5
611611needs :
612612 -build-context # Transitive dependency, needed to access `run-tests` value
613613 -check-docs
614- -check_autoconf_regen
615- -check_generated_files
616- -build_macos
617- -build_ubuntu
618- -build_ubuntu_ssltests
619- -build_wasi
620- -build_windows
621- -build_windows_msi
614+ -check-autoconf-regen
615+ -check-generated-files
616+ -build-windows
617+ -build-windows-msi
618+ -build-macos
619+ -build-ubuntu
620+ -build-ubuntu-ssltests
621+ -build-wasi
622+ -test-hypothesis
623+ -build-asan
624+ -build-tsan
622625 -cross-build-linux
623- -test_hypothesis
624- -build_asan
625- -build_tsan
626626 -cifuzz
627-
628- runs-on :ubuntu-latest
627+ if :always()
629628
630629steps :
631630 -name :Check whether the needed jobs succeeded or failed
632631uses :re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
633632with :
634633allowed-failures :>-
635- build_ubuntu_ssltests,
636- build_windows_msi,
634+ build-windows-msi,
635+ build-ubuntu-ssltests,
636+ test-hypothesis,
637637 cifuzz,
638- test_hypothesis,
639638allowed-skips :>-
640639 ${{
641640 !fromJSON(needs.build-context.outputs.run-docs)
@@ -647,23 +646,23 @@ jobs:
647646 ${{
648647 needs.build-context.outputs.run-tests != 'true'
649648 && '
650- check_autoconf_regen ,
651- check_generated_files ,
652- build_macos ,
653- build_ubuntu ,
654- build_ubuntu_ssltests ,
655- build_wasi ,
656- build_asan ,
657- build_tsan ,
658- test_hypothesis ,
649+ check-autoconf-regen ,
650+ check-generated-files ,
651+ build-macos ,
652+ build-ubuntu ,
653+ build-ubuntu-ssltests ,
654+ build-wasi ,
655+ test-hypothesis ,
656+ build-asan ,
657+ build-tsan ,
659658 cross-build-linux,
660659 '
661660 || ''
662661 }}
663662 ${{
664663 !fromJSON(needs.build-context.outputs.run-windows-tests)
665664 && '
666- build_windows ,
665+ build-windows ,
667666 '
668667 || ''
669668 }}