4343    if : fromJSON(needs.build-context.outputs.run-docs) 
4444    uses : ./.github/workflows/reusable-docs.yml 
4545
46-   check_autoconf_regen :
46+   check-autoconf-regen :
4747    name : ' 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, ...)
6262        with :
6363          fetch-depth : 1 
6464          persist-credentials : false 
65-       - name : Runner image version 
66-         run : echo "IMAGE_VERSION=${ImageVersion}" >> "$GITHUB_ENV" 
6765      - name : Check Autoconf and aclocal versions 
6866        run : | 
6967          grep "Generated by GNU Autoconf 2.72" configure 
8886            exit 1 
8987          fi 
9088
91- check_generated_files :
89+ check-generated-files :
9290    name : ' Check if generated files are up to date' 
9391    #  Don't use ubuntu-latest but a specific version to make the job
9492    #  reproducible: to get the same tools versions (autoconf, aclocal, ...)
@@ -104,14 +102,14 @@ jobs:
104102        with :
105103          python-version : ' 3.x' 
106104      - name : Runner image version 
107-         run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
105+         run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
108106      - name : Restore config.cache 
109107        uses : actions/cache@v4 
110108        with :
111109          path : config.cache 
112110          #  Include env.pythonLocation in key to avoid changes in environment when setup-python updates Python
113-           key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }}-${{ env.pythonLocation }} 
114-       - name : Install Dependencies  
111+           key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }}-${{ env.pythonLocation }} 
112+       - name : Install dependencies  
115113        run : sudo ./.github/workflows/posix-deps-apt.sh 
116114      - name : Add ccache to PATH 
117115        run : echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" 
@@ -149,7 +147,7 @@ jobs:
149147        if : github.event_name == 'pull_request'   #  $GITHUB_EVENT_NAME
150148        run : make check-c-globals 
151149
152-   build_windows :
150+   build-windows :
153151    name : >- 
154152      Windows 
155153      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
@@ -181,12 +179,13 @@ jobs:
181179      arch : ${{ matrix.arch }} 
182180      free-threading : ${{ matrix.free-threading }} 
183181
184-   build_windows_msi :
182+   build-windows-msi :
185183    name : >-  #  ${{ '' } is a hack to nest jobs under the same sidebar category 
186184      Windows MSI${{ '' }} 
187185needs : build-context 
188186    if : fromJSON(needs.build-context.outputs.run-windows-msi) 
189187    strategy :
188+       fail-fast : false 
190189      matrix :
191190        arch :
192191        - x86 
@@ -196,7 +195,7 @@ jobs:
196195    with :
197196      arch : ${{ matrix.arch }} 
198197
199-   build_macos :
198+   build-macos :
200199    name : >- 
201200      macOS 
202201      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
@@ -230,14 +229,15 @@ jobs:
230229      free-threading : ${{ matrix.free-threading }} 
231230      os : ${{ matrix.os }} 
232231
233-   build_ubuntu :
232+   build-ubuntu :
234233    name : >- 
235234      Ubuntu 
236235      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
237236      ${{ fromJSON(matrix.bolt) && '(bolt)' || '' }} 
238237needs : build-context 
239238    if : needs.build-context.outputs.run-tests == 'true' 
240239    strategy :
240+       fail-fast : false 
241241      matrix :
242242        bolt :
243243        - false 
@@ -247,13 +247,13 @@ jobs:
247247        - true 
248248        os :
249249        - ubuntu-24.04 
250-         - ubuntu-22 .04-arm 
250+         - ubuntu-24 .04-arm 
251251        exclude :
252252        #  Do not test BOLT with free-threading, to conserve resources
253253        - bolt : true 
254254          free-threading : true 
255255        #  BOLT currently crashes during instrumentation on aarch64
256-         - os : ubuntu-22 .04-arm 
256+         - os : ubuntu-24 .04-arm 
257257          bolt : true 
258258    uses : ./.github/workflows/reusable-ubuntu.yml 
259259    with :
@@ -262,7 +262,7 @@ jobs:
262262      free-threading : ${{ matrix.free-threading }} 
263263      os : ${{ matrix.os }} 
264264
265-   build_ubuntu_ssltests :
265+   build-ubuntu-ssltests :
266266    name : ' Ubuntu SSL tests with OpenSSL' 
267267    runs-on : ${{ matrix.os }} 
268268    timeout-minutes : 60 
@@ -284,15 +284,15 @@ jobs:
284284      with :
285285        persist-credentials : false 
286286    - name : Runner image version 
287-       run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
287+       run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
288288    - name : Restore config.cache 
289289      uses : actions/cache@v4 
290290      with :
291291        path : config.cache 
292-         key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
292+         key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
293293    - name : Register gcc problem matcher 
294294      run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
295-     - name : Install Dependencies  
295+     - name : Install dependencies  
296296      run : sudo ./.github/workflows/posix-deps-apt.sh 
297297    - name : Configure OpenSSL env vars 
298298      run : | 
@@ -324,15 +324,15 @@ jobs:
324324    - name : SSL tests 
325325      run : ./python Lib/test/ssltests.py 
326326
327-   build_wasi :
327+   build-wasi :
328328    name : ' WASI' 
329329    needs : build-context 
330330    if : needs.build-context.outputs.run-tests == 'true' 
331331    uses : ./.github/workflows/reusable-wasi.yml 
332332    with :
333333      config_hash : ${{ needs.build-context.outputs.config-hash }} 
334334
335-   test_hypothesis :
335+   test-hypothesis :
336336    name : " Hypothesis tests on Ubuntu" 
337337    runs-on : ubuntu-24.04 
338338    timeout-minutes : 60 
@@ -347,7 +347,7 @@ jobs:
347347        persist-credentials : false 
348348    - name : Register gcc problem matcher 
349349      run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
350-     - name : Install Dependencies  
350+     - name : Install dependencies  
351351      run : sudo ./.github/workflows/posix-deps-apt.sh 
352352    - name : Configure OpenSSL env vars 
353353      run : | 
@@ -379,12 +379,12 @@ jobs:
379379    - name : Bind mount sources read-only 
380380      run : sudo mount --bind -o ro "$GITHUB_WORKSPACE" "$CPYTHON_RO_SRCDIR" 
381381    - name : Runner image version 
382-       run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
382+       run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
383383    - name : Restore config.cache 
384384      uses : actions/cache@v4 
385385      with :
386386        path : ${{ env.CPYTHON_BUILDDIR }}/config.cache 
387-         key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
387+         key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
388388    - name : Configure CPython out-of-tree 
389389      working-directory : ${{ env.CPYTHON_BUILDDIR }} 
390390      run : | 
@@ -447,14 +447,14 @@ jobs:
447447        name : hypothesis-example-db 
448448        path : ${{ env.CPYTHON_BUILDDIR }}/.hypothesis/examples/ 
449449
450- 
451-   build_asan :
450+   build-asan :
452451    name : ' Address sanitizer' 
453452    runs-on : ${{ matrix.os }} 
454453    timeout-minutes : 60 
455454    needs : build-context 
456455    if : needs.build-context.outputs.run-tests == 'true' 
457456    strategy :
457+       fail-fast : false 
458458      matrix :
459459        os : [ubuntu-24.04] 
460460    env :
@@ -466,15 +466,15 @@ jobs:
466466      with :
467467        persist-credentials : false 
468468    - name : Runner image version 
469-       run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
469+       run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
470470    - name : Restore config.cache 
471471      uses : actions/cache@v4 
472472      with :
473473        path : config.cache 
474-         key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
474+         key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
475475    - name : Register gcc problem matcher 
476476      run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
477-     - name : Install Dependencies  
477+     - name : Install dependencies  
478478      run : sudo ./.github/workflows/posix-deps-apt.sh 
479479    - name : Set up GCC-10 for ASAN 
480480      uses : egor-tensin/setup-gcc@v1 
@@ -511,13 +511,14 @@ jobs:
511511    - name : Tests 
512512      run : xvfb-run make ci 
513513
514-   build_tsan :
514+   build-tsan :
515515    name : >- 
516516      Thread sanitizer 
517517      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
518518needs : build-context 
519519    if : needs.build-context.outputs.run-tests == 'true' 
520520    strategy :
521+       fail-fast : false 
521522      matrix :
522523        free-threading :
523524        - false 
@@ -530,26 +531,27 @@ jobs:
530531  cross-build-linux :
531532    name : Cross build Linux 
532533    runs-on : ubuntu-latest 
534+     timeout-minutes : 60 
533535    needs : build-context 
534536    if : needs.build-context.outputs.run-tests == 'true' 
535537    steps :
536538      - uses : actions/checkout@v4 
537539        with :
538540          persist-credentials : false 
539541      - name : Runner image version 
540-         run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
542+         run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
541543      - name : Restore config.cache 
542544        uses : actions/cache@v4 
543545        with :
544546          path : config.cache 
545-           key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
547+           key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
546548      - name : Register gcc problem matcher 
547549        run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
548550      - name : Set build dir 
549551        run :
550552          #  an absolute path outside of the working directoy
551553          echo "BUILD_DIR=$(realpath ${{ github.workspace }}/../build)" >> "$GITHUB_ENV" 
552-       - name : Install Dependencies  
554+       - name : Install dependencies  
553555        run : sudo ./.github/workflows/posix-deps-apt.sh 
554556      - name : Configure host build 
555557        run : ./configure --prefix="$BUILD_DIR/host-python" 
@@ -594,8 +596,8 @@ jobs:
594596          output-sarif : true 
595597          sanitizer : ${{ matrix.sanitizer }} 
596598      - name : Upload crash 
597-         uses : actions/upload-artifact@v4 
598599        if : failure() && steps.build.outcome == 'success' 
600+         uses : actions/upload-artifact@v4 
599601        with :
600602          name : ${{ matrix.sanitizer }}-artifacts 
601603          path : ./out/artifacts 
@@ -608,36 +610,35 @@ jobs:
608610
609611  all-required-green :  #  This job does nothing and is only used for the branch protection
610612    name : All required checks pass 
611-     if :  always() 
612- 
613+     runs-on :  ubuntu-latest 
614+      timeout-minutes :  5 
613615    needs :
614616    - build-context   #  Transitive dependency, needed to access `run-tests` value
615617    - check-docs 
616-     - check_autoconf_regen 
617-     - check_generated_files 
618-     - build_macos 
619-     - build_ubuntu 
620-     - build_ubuntu_ssltests 
621-     - build_wasi 
622-     - build_windows 
623-     - build_windows_msi 
618+     - check-autoconf-regen 
619+     - check-generated-files 
620+     - build-windows 
621+     - build-windows-msi 
622+     - build-macos 
623+     - build-ubuntu 
624+     - build-ubuntu-ssltests 
625+     - build-wasi 
626+     - test-hypothesis 
627+     - build-asan 
628+     - build-tsan 
624629    - cross-build-linux 
625-     - test_hypothesis 
626-     - build_asan 
627-     - build_tsan 
628630    - cifuzz 
629- 
630-     runs-on : ubuntu-latest 
631+     if : always() 
631632
632633    steps :
633634    - name : Check whether the needed jobs succeeded or failed 
634635      uses : re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe 
635636      with :
636637        allowed-failures : >- 
637-           build_ubuntu_ssltests, 
638-           build_windows_msi, 
638+           build-windows-msi, 
639+           build-ubuntu-ssltests, 
640+           test-hypothesis, 
639641          cifuzz, 
640-           test_hypothesis, 
641642allowed-skips : >- 
642643          ${{ 
643644            !fromJSON(needs.build-context.outputs.run-docs) 
@@ -649,23 +650,23 @@ jobs:
649650          ${{ 
650651            needs.build-context.outputs.run-tests != 'true' 
651652            && ' 
652-             check_autoconf_regen , 
653-             check_generated_files , 
654-             build_macos , 
655-             build_ubuntu , 
656-             build_ubuntu_ssltests , 
657-             build_wasi , 
658-             build_asan , 
659-             build_tsan , 
660-             test_hypothesis , 
653+             check-autoconf-regen , 
654+             check-generated-files , 
655+             build-macos , 
656+             build-ubuntu , 
657+             build-ubuntu-ssltests , 
658+             build-wasi , 
659+             test-hypothesis , 
660+             build-asan , 
661+             build-tsan , 
661662            cross-build-linux, 
662663            ' 
663664            || '' 
664665          }} 
665666          ${{ 
666667            !fromJSON(needs.build-context.outputs.run-windows-tests) 
667668            && ' 
668-             build_windows , 
669+             build-windows , 
669670            ' 
670671            || '' 
671672          }} 
0 commit comments