Skip to content

Commit 2e9eb8a

Browse files
authored
Merge branch '3.14' into backport-c2d3d6b-3.14
2 parents 0b5eaae + 856fdc6 commit 2e9eb8a

662 files changed

Lines changed: 16828 additions & 8311 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ Include/opcode.h generated
8282
Include/opcode_ids.h generated
8383
Include/token.h generated
8484
Lib/_opcode_metadata.py generated
85-
Lib/keyword.py generated
8685
Lib/idlelib/help.html generated
86+
Lib/keyword.py generated
87+
Lib/pydoc_data/topics.py generated
88+
Lib/pydoc_data/module_docs.py generated
8789
Lib/test/certdata/*.pem generated
8890
Lib/test/certdata/*.0 generated
8991
Lib/test/levenshtein_examples.json generated

.github/CODEOWNERS

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
# https://git-scm.com/docs/gitignore#_pattern_format
66

77
# GitHub
8-
.github/** @ezio-melotti @hugovk @AA-Turner
8+
.github/** @ezio-melotti @hugovk @AA-Turner @webknjaz
9+
.github/workflows/jit.yml @savannahostrowski
10+
Tools/build/compute-changes.py @AA-Turner @hugovk @webknjaz
11+
Lib/test/test_tools/test_compute_changes.py @AA-Turner @hugovk @webknjaz
912

1013
# pre-commit
1114
.pre-commit-config.yaml @hugovk
@@ -161,6 +164,7 @@ Doc/c-api/module.rst @ericsnowcurrently
161164
# Dates and times
162165
**/*datetime* @pganssle @abalkin
163166
**/*str*time* @pganssle @abalkin
167+
Doc/library/datetime-* @pganssle
164168
Doc/library/time.rst @pganssle @abalkin
165169
Lib/test/test_time.py @pganssle @abalkin
166170
Modules/timemodule.c @pganssle @abalkin

.github/dependabot.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,17 @@ updates:
1212
update-types:
1313
- "version-update:semver-minor"
1414
- "version-update:semver-patch"
15+
cooldown:
16+
# https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns
17+
# Cooldowns protect against supply chain attacks by avoiding the
18+
# highest-risk window immediately after new releases.
19+
default-days: 14
1520
- package-ecosystem: "pip"
1621
directory: "/Tools/"
1722
schedule:
1823
interval: "monthly"
1924
labels:
2025
- "skip issue"
2126
- "skip news"
27+
cooldown:
28+
default-days: 14

.github/workflows/add-issue-header.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
issues: write
2121
timeout-minutes: 5
2222
steps:
23-
- uses: actions/github-script@v7
23+
- uses: actions/github-script@v8
2424
with:
2525
# language=JavaScript
2626
script: |

.github/workflows/build.yml

Lines changed: 61 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ jobs:
5555
needs: build-context
5656
if: needs.build-context.outputs.run-tests == 'true'
5757
steps:
58-
- uses: actions/checkout@v4
58+
- uses: actions/checkout@v6
5959
with:
6060
persist-credentials: false
61-
- uses: actions/setup-python@v5
61+
- uses: actions/setup-python@v6
6262
with:
6363
python-version: '3.x'
6464
- name: Install dependencies
@@ -89,7 +89,7 @@ jobs:
8989
if: ${{ failure() && steps.check.conclusion == 'failure' }}
9090
run: |
9191
make regen-abidump
92-
- uses: actions/upload-artifact@v4
92+
- uses: actions/upload-artifact@v6
9393
name: Publish updated ABI files
9494
if: ${{ failure() && steps.check.conclusion == 'failure' }}
9595
with:
@@ -111,7 +111,7 @@ jobs:
111111
run: |
112112
apt update && apt install git -yq
113113
git config --global --add safe.directory "$GITHUB_WORKSPACE"
114-
- uses: actions/checkout@v4
114+
- uses: actions/checkout@v6
115115
with:
116116
fetch-depth: 1
117117
persist-credentials: false
@@ -148,10 +148,10 @@ jobs:
148148
needs: build-context
149149
if: needs.build-context.outputs.run-tests == 'true'
150150
steps:
151-
- uses: actions/checkout@v4
151+
- uses: actions/checkout@v6
152152
with:
153153
persist-credentials: false
154-
- uses: actions/setup-python@v5
154+
- uses: actions/setup-python@v6
155155
with:
156156
python-version: '3.x'
157157
- name: Runner image version
@@ -303,15 +303,15 @@ jobs:
303303
# Keep 1.1.1w in our list despite it being upstream EOL and otherwise
304304
# unsupported as it most resembles other 1.1.1-work-a-like ssl APIs
305305
# supported by important vendors such as AWS-LC.
306-
openssl_ver: [1.1.1w, 3.0.18, 3.2.6, 3.3.5, 3.4.3, 3.5.4]
306+
openssl_ver: [1.1.1w, 3.0.19, 3.3.6, 3.4.4, 3.5.5, 3.6.1]
307307
# See Tools/ssl/make_ssl_data.py for notes on adding a new version
308308
env:
309309
OPENSSL_VER: ${{ matrix.openssl_ver }}
310310
MULTISSL_DIR: ${{ github.workspace }}/multissl
311311
OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}
312312
LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib
313313
steps:
314-
- uses: actions/checkout@v4
314+
- uses: actions/checkout@v6
315315
with:
316316
persist-credentials: false
317317
- name: Runner image version
@@ -327,7 +327,7 @@ jobs:
327327
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV"
328328
- name: 'Restore OpenSSL build'
329329
id: cache-openssl
330-
uses: actions/cache@v4
330+
uses: actions/cache@v5
331331
with:
332332
path: ./multissl/openssl/${{ env.OPENSSL_VER }}
333333
key: ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
@@ -362,7 +362,7 @@ jobs:
362362

363363
runs-on: ${{ matrix.runs-on }}
364364
steps:
365-
- uses: actions/checkout@v4
365+
- uses: actions/checkout@v6
366366
with:
367367
persist-credentials: false
368368
- name: Build and test
@@ -375,7 +375,7 @@ jobs:
375375
timeout-minutes: 60
376376
runs-on: macos-14
377377
steps:
378-
- uses: actions/checkout@v4
378+
- uses: actions/checkout@v6
379379
with:
380380
persist-credentials: false
381381

@@ -407,7 +407,7 @@ jobs:
407407
OPENSSL_VER: 3.0.18
408408
PYTHONSTRICTEXTENSIONBUILD: 1
409409
steps:
410-
- uses: actions/checkout@v4
410+
- uses: actions/checkout@v6
411411
with:
412412
persist-credentials: false
413413
- name: Register gcc problem matcher
@@ -421,7 +421,7 @@ jobs:
421421
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV"
422422
- name: 'Restore OpenSSL build'
423423
id: cache-openssl
424-
uses: actions/cache@v4
424+
uses: actions/cache@v5
425425
with:
426426
path: ./multissl/openssl/${{ env.OPENSSL_VER }}
427427
key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
@@ -471,7 +471,7 @@ jobs:
471471
./python -m venv "$VENV_LOC" && "$VENV_PYTHON" -m pip install -r "${GITHUB_WORKSPACE}/Tools/requirements-hypothesis.txt"
472472
- name: 'Restore Hypothesis database'
473473
id: cache-hypothesis-database
474-
uses: actions/cache@v4
474+
uses: actions/cache@v5
475475
with:
476476
path: ${{ env.CPYTHON_BUILDDIR }}/.hypothesis/
477477
key: hypothesis-database-${{ github.head_ref || github.run_id }}
@@ -498,7 +498,7 @@ jobs:
498498
-x test_subprocess \
499499
-x test_signal \
500500
-x test_sysconfig
501-
- uses: actions/upload-artifact@v4
501+
- uses: actions/upload-artifact@v6
502502
if: always()
503503
with:
504504
name: hypothesis-example-db
@@ -519,7 +519,7 @@ jobs:
519519
PYTHONSTRICTEXTENSIONBUILD: 1
520520
ASAN_OPTIONS: detect_leaks=0:allocator_may_return_null=1:handle_segv=0
521521
steps:
522-
- uses: actions/checkout@v4
522+
- uses: actions/checkout@v6
523523
with:
524524
persist-credentials: false
525525
- name: Runner image version
@@ -529,7 +529,7 @@ jobs:
529529
- name: Install dependencies
530530
run: sudo ./.github/workflows/posix-deps-apt.sh
531531
- name: Set up GCC-10 for ASAN
532-
uses: egor-tensin/setup-gcc@v1
532+
uses: egor-tensin/setup-gcc@v2
533533
with:
534534
version: 10
535535
- name: Configure OpenSSL env vars
@@ -539,7 +539,7 @@ jobs:
539539
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV"
540540
- name: 'Restore OpenSSL build'
541541
id: cache-openssl
542-
uses: actions/cache@v4
542+
uses: actions/cache@v5
543543
with:
544544
path: ./multissl/openssl/${{ env.OPENSSL_VER }}
545545
key: ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
@@ -589,7 +589,7 @@ jobs:
589589
needs: build-context
590590
if: needs.build-context.outputs.run-ubuntu == 'true'
591591
steps:
592-
- uses: actions/checkout@v4
592+
- uses: actions/checkout@v6
593593
with:
594594
persist-credentials: false
595595
- name: Runner image version
@@ -617,45 +617,48 @@ jobs:
617617
run: |
618618
"$BUILD_DIR/cross-python/bin/python3" -m test test_sysconfig test_site test_embed
619619
620-
# CIFuzz job based on https://google.github.io/oss-fuzz/getting-started/continuous-integration/
621620
cifuzz:
622-
name: CIFuzz
623-
runs-on: ubuntu-latest
624-
timeout-minutes: 60
621+
# ${{ '' } is a hack to nest jobs under the same sidebar category.
622+
name: CIFuzz${{ '' }} # zizmor: ignore[obfuscation]
625623
needs: build-context
626-
if: needs.build-context.outputs.run-ci-fuzz == 'true'
624+
if: >-
625+
needs.build-context.outputs.run-ci-fuzz == 'true'
626+
|| needs.build-context.outputs.run-ci-fuzz-stdlib == 'true'
627627
permissions:
628628
security-events: write
629629
strategy:
630630
fail-fast: false
631631
matrix:
632-
sanitizer: [address, undefined, memory]
633-
steps:
634-
- name: Build fuzzers (${{ matrix.sanitizer }})
635-
id: build
636-
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
637-
with:
638-
oss-fuzz-project-name: cpython3
639-
sanitizer: ${{ matrix.sanitizer }}
640-
- name: Run fuzzers (${{ matrix.sanitizer }})
641-
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
642-
with:
643-
fuzz-seconds: 600
644-
oss-fuzz-project-name: cpython3
645-
output-sarif: true
646-
sanitizer: ${{ matrix.sanitizer }}
647-
- name: Upload crash
648-
if: failure() && steps.build.outcome == 'success'
649-
uses: actions/upload-artifact@v4
650-
with:
651-
name: ${{ matrix.sanitizer }}-artifacts
652-
path: ./out/artifacts
653-
- name: Upload SARIF
654-
if: always() && steps.build.outcome == 'success'
655-
uses: github/codeql-action/upload-sarif@v3
656-
with:
657-
sarif_file: cifuzz-sarif/results.sarif
658-
checkout_path: cifuzz-sarif
632+
sanitizer:
633+
- address
634+
oss-fuzz-project-name:
635+
- cpython3
636+
- python3-libraries
637+
include:
638+
- sanitizer: undefined
639+
oss-fuzz-project-name: cpython3
640+
- sanitizer: memory
641+
oss-fuzz-project-name: cpython3
642+
exclude:
643+
# Note that the 'no-exclude' sentinel below is to prevent
644+
# an empty string value from excluding all jobs and causing
645+
# GHA to create a 'default' matrix entry with all empty values.
646+
- oss-fuzz-project-name: >-
647+
${{
648+
needs.build-context.outputs.run-ci-fuzz == 'true'
649+
&& 'no-exclude'
650+
|| 'cpython3'
651+
}}
652+
- oss-fuzz-project-name: >-
653+
${{
654+
needs.build-context.outputs.run-ci-fuzz-stdlib == 'true'
655+
&& 'no-exclude'
656+
|| 'python3-libraries'
657+
}}
658+
uses: ./.github/workflows/reusable-cifuzz.yml
659+
with:
660+
oss-fuzz-project-name: ${{ matrix.oss-fuzz-project-name }}
661+
sanitizer: ${{ matrix.sanitizer }}
659662

660663
all-required-green: # This job does nothing and is only used for the branch protection
661664
name: All required checks pass
@@ -671,7 +674,6 @@ jobs:
671674
- build-macos
672675
- build-ubuntu
673676
- build-ubuntu-ssltests
674-
- build-android
675677
- build-ios
676678
- build-wasi
677679
- test-hypothesis
@@ -686,6 +688,7 @@ jobs:
686688
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
687689
with:
688690
allowed-failures: >-
691+
build-android,
689692
build-windows-msi,
690693
build-ubuntu-ssltests,
691694
test-hypothesis,
@@ -701,7 +704,12 @@ jobs:
701704
|| ''
702705
}}
703706
${{ !fromJSON(needs.build-context.outputs.run-windows-tests) && 'build-windows,' || '' }}
704-
${{ !fromJSON(needs.build-context.outputs.run-ci-fuzz) && 'cifuzz,' || '' }}
707+
${{
708+
!fromJSON(needs.build-context.outputs.run-ci-fuzz)
709+
&& !fromJSON(needs.build-context.outputs.run-ci-fuzz-stdlib)
710+
&& 'cifuzz,' ||
711+
''
712+
}}
705713
${{ !fromJSON(needs.build-context.outputs.run-macos) && 'build-macos,' || '' }}
706714
${{
707715
!fromJSON(needs.build-context.outputs.run-ubuntu)

0 commit comments

Comments
 (0)