1111 - ' main'
1212 - ' 3.*'
1313
14- permissions :
15- contents : read
14+ permissions : {}
1615
1716concurrency :
1817 # https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#concurrency
6463 run : |
6564 apt update && apt install git -yq
6665 git config --global --add safe.directory "$GITHUB_WORKSPACE"
67- - uses : actions/checkout@v6
66+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
6867 with :
6968 fetch-depth : 1
7069 persist-credentials : false
@@ -101,10 +100,10 @@ jobs:
101100 needs : build-context
102101 if : needs.build-context.outputs.run-tests == 'true'
103102 steps :
104- - uses : actions/checkout@v6
103+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
105104 with :
106105 persist-credentials : false
107- - uses : actions/setup-python@v6
106+ - uses : actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
108107 with :
109108 python-version : ' 3.x'
110109 - name : Runner image version
@@ -165,13 +164,21 @@ jobs:
165164 free-threading :
166165 - false
167166 - true
167+ interpreter :
168+ - switch-case
168169 exclude :
169170 # Skip Win32 on free-threaded builds
170171 - { arch: Win32, free-threading: true }
172+ include :
173+ # msvc::musttail is currently only supported on x64,
174+ # and only supported on 3.15+.
175+ - { arch: x64, free-threading: false, interpreter: tail-call }
176+ - { arch: x64, free-threading: true, interpreter: tail-call }
171177 uses : ./.github/workflows/reusable-windows.yml
172178 with :
173179 arch : ${{ matrix.arch }}
174180 free-threading : ${{ matrix.free-threading }}
181+ interpreter : ${{ matrix.interpreter }}
175182
176183 build-windows-msi :
177184 # ${{ '' } is a hack to nest jobs under the same sidebar category.
@@ -198,10 +205,10 @@ jobs:
198205 strategy :
199206 fail-fast : false
200207 matrix :
201- # macos-14 is M1 , macos-15-intel is Intel.
208+ # macos-26 is Apple Silicon , macos-15-intel is Intel.
202209 # macos-15-intel only runs tests against the GIL-enabled CPython.
203210 os :
204- - macos-14
211+ - macos-26
205212 - macos-15-intel
206213 free-threading :
207214 - false
@@ -283,7 +290,7 @@ jobs:
283290 SSLLIB_DIR : ${{ github.workspace }}/multissl/${{ matrix.ssllib.name }}/${{ matrix.ssllib.version }}
284291 LD_LIBRARY_PATH : ${{ github.workspace }}/multissl/${{ matrix.ssllib.name }}/${{ matrix.ssllib.version }}/lib
285292 steps :
286- - uses : actions/checkout@v6
293+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
287294 with :
288295 persist-credentials : false
289296 - name : Runner image version
@@ -294,7 +301,7 @@ jobs:
294301 run : sudo ./.github/workflows/posix-deps-apt.sh
295302 - name : ' Restore SSL library build'
296303 id : cache-ssl-lib
297- uses : actions/cache@v5
304+ uses : actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
298305 with :
299306 path : ./multissl/${{ matrix.ssllib.name }}/${{ matrix.ssllib.version }}
300307 key : ${{ matrix.os }}-multissl-${{ matrix.ssllib.name }}-${{ matrix.ssllib.version }}
@@ -336,13 +343,13 @@ jobs:
336343 matrix :
337344 include :
338345 - arch : aarch64
339- runs-on : macos-14
346+ runs-on : macos-26
340347 - arch : x86_64
341348 runs-on : ubuntu-24.04
342349
343350 runs-on : ${{ matrix.runs-on }}
344351 steps :
345- - uses : actions/checkout@v6
352+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
346353 with :
347354 persist-credentials : false
348355 - name : Build and test
@@ -355,7 +362,7 @@ jobs:
355362 timeout-minutes : 60
356363 runs-on : macos-14
357364 steps :
358- - uses : actions/checkout@v6
365+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
359366 with :
360367 persist-credentials : false
361368
@@ -369,7 +376,13 @@ jobs:
369376 sudo xcode-select --switch /Applications/Xcode_15.4.app
370377
371378 - name : Build and test
372- run : python3 Apple ci iOS --fast-ci --simulator 'iPhone SE (3rd generation),OS=17.5'
379+ run : python3 Platforms/Apple ci iOS --fast-ci --simulator 'iPhone SE (3rd generation),OS=17.5'
380+
381+ build-emscripten :
382+ name : ' Emscripten'
383+ needs : build-context
384+ if : needs.build-context.outputs.run-emscripten == 'true'
385+ uses : ./.github/workflows/reusable-emscripten.yml
373386
374387 build-wasi :
375388 name : ' WASI'
@@ -387,7 +400,7 @@ jobs:
387400 OPENSSL_VER : 3.5.5
388401 PYTHONSTRICTEXTENSIONBUILD : 1
389402 steps :
390- - uses : actions/checkout@v6
403+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
391404 with :
392405 persist-credentials : false
393406 - name : Register gcc problem matcher
@@ -401,7 +414,7 @@ jobs:
401414 echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV"
402415 - name : ' Restore OpenSSL build'
403416 id : cache-openssl
404- uses : actions/cache@v5
417+ uses : actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
405418 with :
406419 path : ./multissl/openssl/${{ env.OPENSSL_VER }}
407420 key : ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
@@ -448,7 +461,7 @@ jobs:
448461 ./python -m venv "$VENV_LOC" && "$VENV_PYTHON" -m pip install -r "${GITHUB_WORKSPACE}/Tools/requirements-hypothesis.txt"
449462 - name : ' Restore Hypothesis database'
450463 id : cache-hypothesis-database
451- uses : actions/cache@v5
464+ uses : actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
452465 with :
453466 path : ${{ env.CPYTHON_BUILDDIR }}/.hypothesis/
454467 key : hypothesis-database-${{ github.head_ref || github.run_id }}
@@ -475,7 +488,7 @@ jobs:
475488 -x test_subprocess \
476489 -x test_signal \
477490 -x test_sysconfig
478- - uses : actions/upload-artifact@v7
491+ - uses : actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
479492 if : always()
480493 with :
481494 name : hypothesis-example-db
@@ -496,7 +509,7 @@ jobs:
496509 PYTHONSTRICTEXTENSIONBUILD : 1
497510 ASAN_OPTIONS : detect_leaks=0:allocator_may_return_null=1:handle_segv=0
498511 steps :
499- - uses : actions/checkout@v6
512+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
500513 with :
501514 persist-credentials : false
502515 - name : Runner image version
@@ -506,7 +519,7 @@ jobs:
506519 - name : Install dependencies
507520 run : sudo ./.github/workflows/posix-deps-apt.sh
508521 - name : Set up GCC-10 for ASAN
509- uses : egor-tensin/setup-gcc@v2
522+ uses : egor-tensin/setup-gcc@a2861a8b8538f49cf2850980acccf6b05a1b2ae4 # v2.0
510523 with :
511524 version : 10
512525 - name : Configure OpenSSL env vars
@@ -516,7 +529,7 @@ jobs:
516529 echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV"
517530 - name : ' Restore OpenSSL build'
518531 id : cache-openssl
519- uses : actions/cache@v5
532+ uses : actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
520533 with :
521534 path : ./multissl/openssl/${{ env.OPENSSL_VER }}
522535 key : ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
@@ -563,7 +576,7 @@ jobs:
563576 needs : build-context
564577 if : needs.build-context.outputs.run-ubuntu == 'true'
565578 steps :
566- - uses : actions/checkout@v6
579+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
567580 with :
568581 persist-credentials : false
569582 - name : Runner image version
@@ -650,6 +663,7 @@ jobs:
650663 - build-ubuntu
651664 - build-ubuntu-ssltests
652665 - build-ios
666+ - build-emscripten
653667 - build-wasi
654668 - test-hypothesis
655669 - build-asan
@@ -664,6 +678,7 @@ jobs:
664678 with :
665679 allowed-failures : >-
666680 build-android,
681+ build-emscripten,
667682 build-windows-msi,
668683 build-ubuntu-ssltests,
669684 test-hypothesis,
@@ -706,5 +721,6 @@ jobs:
706721 }}
707722 ${{ !fromJSON(needs.build-context.outputs.run-android) && 'build-android,' || '' }}
708723 ${{ !fromJSON(needs.build-context.outputs.run-ios) && 'build-ios,' || '' }}
724+ ${{ !fromJSON(needs.build-context.outputs.run-emscripten) && 'build-emscripten,' || '' }}
709725 ${{ !fromJSON(needs.build-context.outputs.run-wasi) && 'build-wasi,' || '' }}
710726 jobs : ${{ toJSON(needs) }}
0 commit comments