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,7 +179,7 @@ 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 
@@ -196,7 +194,7 @@ jobs:
196194    with :
197195      arch : ${{ matrix.arch }} 
198196
199-   build_macos :
197+   build-macos :
200198    name : >- 
201199      macOS 
202200      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
@@ -230,7 +228,7 @@ jobs:
230228      free-threading : ${{ matrix.free-threading }} 
231229      os : ${{ matrix.os }} 
232230
233-   build_ubuntu :
231+   build-ubuntu :
234232    name : >- 
235233      Ubuntu 
236234      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
@@ -247,13 +245,13 @@ jobs:
247245        - true 
248246        os :
249247        - ubuntu-24.04 
250-         - ubuntu-22 .04-arm 
248+         - ubuntu-24 .04-arm 
251249        exclude :
252250        #  Do not test BOLT with free-threading, to conserve resources
253251        - bolt : true 
254252          free-threading : true 
255253        #  BOLT currently crashes during instrumentation on aarch64
256-         - os : ubuntu-22 .04-arm 
254+         - os : ubuntu-24 .04-arm 
257255          bolt : true 
258256    uses : ./.github/workflows/reusable-ubuntu.yml 
259257    with :
@@ -262,7 +260,7 @@ jobs:
262260      free-threading : ${{ matrix.free-threading }} 
263261      os : ${{ matrix.os }} 
264262
265-   build_ubuntu_ssltests :
263+   build-ubuntu-ssltests :
266264    name : ' Ubuntu SSL tests with OpenSSL' 
267265    runs-on : ${{ matrix.os }} 
268266    timeout-minutes : 60 
@@ -284,15 +282,15 @@ jobs:
284282      with :
285283        persist-credentials : false 
286284    - name : Runner image version 
287-       run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
285+       run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
288286    - name : Restore config.cache 
289287      uses : actions/cache@v4 
290288      with :
291289        path : config.cache 
292-         key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
290+         key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
293291    - name : Register gcc problem matcher 
294292      run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
295-     - name : Install Dependencies  
293+     - name : Install dependencies  
296294      run : sudo ./.github/workflows/posix-deps-apt.sh 
297295    - name : Configure OpenSSL env vars 
298296      run : | 
@@ -324,15 +322,15 @@ jobs:
324322    - name : SSL tests 
325323      run : ./python Lib/test/ssltests.py 
326324
327-   build_wasi :
325+   build-wasi :
328326    name : ' WASI' 
329327    needs : build-context 
330328    if : needs.build-context.outputs.run-tests == 'true' 
331329    uses : ./.github/workflows/reusable-wasi.yml 
332330    with :
333331      config_hash : ${{ needs.build-context.outputs.config-hash }} 
334332
335-   test_hypothesis :
333+   test-hypothesis :
336334    name : " Hypothesis tests on Ubuntu" 
337335    runs-on : ubuntu-24.04 
338336    timeout-minutes : 60 
@@ -347,7 +345,7 @@ jobs:
347345        persist-credentials : false 
348346    - name : Register gcc problem matcher 
349347      run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
350-     - name : Install Dependencies  
348+     - name : Install dependencies  
351349      run : sudo ./.github/workflows/posix-deps-apt.sh 
352350    - name : Configure OpenSSL env vars 
353351      run : | 
@@ -379,12 +377,12 @@ jobs:
379377    - name : Bind mount sources read-only 
380378      run : sudo mount --bind -o ro "$GITHUB_WORKSPACE" "$CPYTHON_RO_SRCDIR" 
381379    - name : Runner image version 
382-       run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
380+       run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
383381    - name : Restore config.cache 
384382      uses : actions/cache@v4 
385383      with :
386384        path : ${{ env.CPYTHON_BUILDDIR }}/config.cache 
387-         key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
385+         key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
388386    - name : Configure CPython out-of-tree 
389387      working-directory : ${{ env.CPYTHON_BUILDDIR }} 
390388      run : | 
@@ -447,8 +445,7 @@ jobs:
447445        name : hypothesis-example-db 
448446        path : ${{ env.CPYTHON_BUILDDIR }}/.hypothesis/examples/ 
449447
450- 
451-   build_asan :
448+   build-asan :
452449    name : ' Address sanitizer' 
453450    runs-on : ${{ matrix.os }} 
454451    timeout-minutes : 60 
@@ -466,15 +463,15 @@ jobs:
466463      with :
467464        persist-credentials : false 
468465    - name : Runner image version 
469-       run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
466+       run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
470467    - name : Restore config.cache 
471468      uses : actions/cache@v4 
472469      with :
473470        path : config.cache 
474-         key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
471+         key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
475472    - name : Register gcc problem matcher 
476473      run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
477-     - name : Install Dependencies  
474+     - name : Install dependencies  
478475      run : sudo ./.github/workflows/posix-deps-apt.sh 
479476    - name : Set up GCC-10 for ASAN 
480477      uses : egor-tensin/setup-gcc@v1 
@@ -511,7 +508,7 @@ jobs:
511508    - name : Tests 
512509      run : xvfb-run make ci 
513510
514-   build_tsan :
511+   build-tsan :
515512    name : >- 
516513      Thread sanitizer 
517514      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }} 
@@ -530,26 +527,27 @@ jobs:
530527  cross-build-linux :
531528    name : Cross build Linux 
532529    runs-on : ubuntu-latest 
530+     timeout-minutes : 60 
533531    needs : build-context 
534532    if : needs.build-context.outputs.run-tests == 'true' 
535533    steps :
536534      - uses : actions/checkout@v4 
537535        with :
538536          persist-credentials : false 
539537      - name : Runner image version 
540-         run : echo "IMAGE_VERSION= ${ImageVersion}" >> "$GITHUB_ENV" 
538+         run : echo "IMAGE_OS_VERSION=${ImageOS}- ${ImageVersion}" >> "$GITHUB_ENV" 
541539      - name : Restore config.cache 
542540        uses : actions/cache@v4 
543541        with :
544542          path : config.cache 
545-           key : ${{ github.job }}-${{ runner.os }}-${{  env.IMAGE_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
543+           key : ${{ github.job }}-${{ env.IMAGE_OS_VERSION  }}-${{ needs.build-context.outputs.config-hash }} 
546544      - name : Register gcc problem matcher 
547545        run : echo "::add-matcher::.github/problem-matchers/gcc.json" 
548546      - name : Set build dir 
549547        run :
550548          #  an absolute path outside of the working directoy
551549          echo "BUILD_DIR=$(realpath ${{ github.workspace }}/../build)" >> "$GITHUB_ENV" 
552-       - name : Install Dependencies  
550+       - name : Install dependencies  
553551        run : sudo ./.github/workflows/posix-deps-apt.sh 
554552      - name : Configure host build 
555553        run : ./configure --prefix="$BUILD_DIR/host-python" 
@@ -594,8 +592,8 @@ jobs:
594592          output-sarif : true 
595593          sanitizer : ${{ matrix.sanitizer }} 
596594      - name : Upload crash 
597-         uses : actions/upload-artifact@v4 
598595        if : failure() && steps.build.outcome == 'success' 
596+         uses : actions/upload-artifact@v4 
599597        with :
600598          name : ${{ matrix.sanitizer }}-artifacts 
601599          path : ./out/artifacts 
@@ -608,36 +606,35 @@ jobs:
608606
609607  all-required-green :  #  This job does nothing and is only used for the branch protection
610608    name : All required checks pass 
611-     if :  always() 
612- 
609+     runs-on :  ubuntu-latest 
610+      timeout-minutes :  5 
613611    needs :
614612    - build-context   #  Transitive dependency, needed to access `run-tests` value
615613    - 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 
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 
624625    - cross-build-linux 
625-     - test_hypothesis 
626-     - build_asan 
627-     - build_tsan 
628626    - cifuzz 
629- 
630-     runs-on : ubuntu-latest 
627+     if : always() 
631628
632629    steps :
633630    - name : Check whether the needed jobs succeeded or failed 
634631      uses : re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe 
635632      with :
636633        allowed-failures : >- 
637-           build_ubuntu_ssltests, 
638-           build_windows_msi, 
634+           build-windows-msi, 
635+           build-ubuntu-ssltests, 
636+           test-hypothesis, 
639637          cifuzz, 
640-           test_hypothesis, 
641638allowed-skips : >- 
642639          ${{ 
643640            !fromJSON(needs.build-context.outputs.run-docs) 
@@ -649,23 +646,23 @@ jobs:
649646          ${{ 
650647            needs.build-context.outputs.run-tests != 'true' 
651648            && ' 
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 , 
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 , 
661658            cross-build-linux, 
662659            ' 
663660            || '' 
664661          }} 
665662          ${{ 
666663            !fromJSON(needs.build-context.outputs.run-windows-tests) 
667664            && ' 
668-             build_windows , 
665+             build-windows , 
669666            ' 
670667            || '' 
671668          }} 
0 commit comments