Skip to content

Commit 01e9f70

Browse files
authored
Merge branch 'main' into main
2 parents 7588710 + 46f5a4f commit 01e9f70

File tree

515 files changed

+16066
-8865
lines changed

Some content is hidden

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

515 files changed

+16066
-8865
lines changed

.devcontainer/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ FROM docker.io/library/fedora:40
22

33
ENV CC=clang
44

5-
ENV WASI_SDK_VERSION=21
5+
ENV WASI_SDK_VERSION=22
66
ENV WASI_SDK_PATH=/opt/wasi-sdk
77

88
ENV WASMTIME_HOME=/opt/wasmtime

.github/CODEOWNERS

+1
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ Doc/c-api/stable.rst @encukou
214214
**/*idlelib* @terryjreedy
215215
/Doc/library/idle.rst @terryjreedy
216216

217+
**/*annotationlib* @JelleZijlstra
217218
**/*typing* @JelleZijlstra @AlexWaygood
218219

219220
**/*ftplib @giampaolo

.github/workflows/build.yml

+66-122
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
name: Tests
22

3-
# gh-84728: "paths-ignore" is not used to skip documentation-only PRs, because
4-
# it prevents to mark a job as mandatory. A PR cannot be merged if a job is
5-
# mandatory but not scheduled because of "paths-ignore".
63
on:
74
workflow_dispatch:
85
push:
@@ -23,86 +20,19 @@ concurrency:
2320

2421
jobs:
2522
check_source:
26-
name: 'Check for source changes'
27-
runs-on: ubuntu-latest
28-
timeout-minutes: 10
29-
outputs:
30-
run-docs: ${{ steps.docs-changes.outputs.run-docs || false }}
31-
run_tests: ${{ steps.check.outputs.run_tests }}
32-
run_hypothesis: ${{ steps.check.outputs.run_hypothesis }}
33-
run_cifuzz: ${{ steps.check.outputs.run_cifuzz }}
34-
config_hash: ${{ steps.config_hash.outputs.hash }}
35-
steps:
36-
- uses: actions/checkout@v4
37-
- name: Check for source changes
38-
id: check
39-
run: |
40-
if [ -z "$GITHUB_BASE_REF" ]; then
41-
echo "run_tests=true" >> $GITHUB_OUTPUT
42-
else
43-
git fetch origin $GITHUB_BASE_REF --depth=1
44-
# git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more
45-
# reliable than git diff "origin/$GITHUB_BASE_REF.." (2 dots),
46-
# but it requires to download more commits (this job uses
47-
# "git fetch --depth=1").
48-
#
49-
# git diff "origin/$GITHUB_BASE_REF..." (3 dots) works with Git
50-
# 2.26, but Git 2.28 is stricter and fails with "no merge base".
51-
#
52-
# git diff "origin/$GITHUB_BASE_REF.." (2 dots) should be enough on
53-
# GitHub, since GitHub starts by merging origin/$GITHUB_BASE_REF
54-
# into the PR branch anyway.
55-
#
56-
# https://github.com/python/core-workflow/issues/373
57-
git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc|^\.pre-commit-config\.yaml$|\.ruff\.toml$|\.md$|mypy\.ini$)' && echo "run_tests=true" >> $GITHUB_OUTPUT || true
58-
fi
59-
60-
# Check if we should run hypothesis tests
61-
GIT_BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}
62-
echo $GIT_BRANCH
63-
if $(echo "$GIT_BRANCH" | grep -q -w '3\.\(8\|9\|10\|11\)'); then
64-
echo "Branch too old for hypothesis tests"
65-
echo "run_hypothesis=false" >> $GITHUB_OUTPUT
66-
else
67-
echo "Run hypothesis tests"
68-
echo "run_hypothesis=true" >> $GITHUB_OUTPUT
69-
fi
70-
71-
# oss-fuzz maintains a configuration for fuzzing the main branch of
72-
# CPython, so CIFuzz should be run only for code that is likely to be
73-
# merged into the main branch; compatibility with older branches may
74-
# be broken.
75-
FUZZ_RELEVANT_FILES='(\.c$|\.h$|\.cpp$|^configure$|^\.github/workflows/build\.yml$|^Modules/_xxtestfuzz)'
76-
if [ "$GITHUB_BASE_REF" = "main" ] && [ "$(git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qE $FUZZ_RELEVANT_FILES; echo $?)" -eq 0 ]; then
77-
# The tests are pretty slow so they are executed only for PRs
78-
# changing relevant files.
79-
echo "Run CIFuzz tests"
80-
echo "run_cifuzz=true" >> $GITHUB_OUTPUT
81-
else
82-
echo "Branch too old for CIFuzz tests; or no C files were changed"
83-
echo "run_cifuzz=false" >> $GITHUB_OUTPUT
84-
fi
85-
- name: Compute hash for config cache key
86-
id: config_hash
87-
run: |
88-
echo "hash=${{ hashFiles('configure', 'configure.ac', '.github/workflows/build.yml') }}" >> $GITHUB_OUTPUT
89-
- name: Get a list of the changed documentation-related files
90-
if: github.event_name == 'pull_request'
91-
id: changed-docs-files
92-
uses: Ana06/get-changed-files@v2.3.0
93-
with:
94-
filter: |
95-
Doc/**
96-
Misc/**
97-
.github/workflows/reusable-docs.yml
98-
format: csv # works for paths with spaces
99-
- name: Check for docs changes
100-
if: >-
101-
github.event_name == 'pull_request'
102-
&& steps.changed-docs-files.outputs.added_modified_renamed != ''
103-
id: docs-changes
104-
run: |
105-
echo "run-docs=true" >> "${GITHUB_OUTPUT}"
23+
name: Change detection
24+
# To use boolean outputs from this job, parse them as JSON.
25+
# Here's some examples:
26+
#
27+
# if: fromJSON(needs.check_source.outputs.run-docs)
28+
#
29+
# ${{
30+
# fromJSON(needs.check_source.outputs.run_tests)
31+
# && 'truthy-branch'
32+
# || 'falsy-branch'
33+
# }}
34+
#
35+
uses: ./.github/workflows/reusable-change-detection.yml
10636

10737
check-docs:
10838
name: Docs
@@ -198,55 +128,70 @@ jobs:
198128
arch: ${{ matrix.arch }}
199129
free-threading: ${{ matrix.free-threading }}
200130

201-
build_macos:
202-
name: 'macOS'
131+
build_windows_msi:
132+
name: >- # ${{ '' } is a hack to nest jobs under the same sidebar category
133+
Windows MSI${{ '' }}
203134
needs: check_source
204-
if: needs.check_source.outputs.run_tests == 'true'
205-
uses: ./.github/workflows/reusable-macos.yml
135+
if: fromJSON(needs.check_source.outputs.run-win-msi)
136+
strategy:
137+
matrix:
138+
arch:
139+
- x86
140+
- x64
141+
- arm64
142+
uses: ./.github/workflows/reusable-windows-msi.yml
206143
with:
207-
config_hash: ${{ needs.check_source.outputs.config_hash }}
208-
# Cirrus and macos-14 are M1, macos-13 is default GHA Intel.
209-
# Cirrus used for upstream, macos-14 for forks.
210-
os-matrix: '["ghcr.io/cirruslabs/macos-runner:sonoma", "macos-14", "macos-13"]'
144+
arch: ${{ matrix.arch }}
211145

212-
build_macos_free_threading:
213-
name: 'macOS (free-threading)'
146+
build_macos:
147+
name: >-
148+
macOS
149+
${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
214150
needs: check_source
215151
if: needs.check_source.outputs.run_tests == 'true'
152+
strategy:
153+
fail-fast: false
154+
matrix:
155+
# Cirrus and macos-14 are M1, macos-13 is default GHA Intel.
156+
# macOS 13 only runs tests against the GIL-enabled CPython.
157+
# Cirrus used for upstream, macos-14 for forks.
158+
os:
159+
- ghcr.io/cirruslabs/macos-runner:sonoma
160+
- macos-14
161+
- macos-13
162+
is-fork: # only used for the exclusion trick
163+
- ${{ github.repository_owner != 'python' }}
164+
free-threading:
165+
- false
166+
- true
167+
exclude:
168+
- os: ghcr.io/cirruslabs/macos-runner:sonoma
169+
is-fork: true
170+
- os: macos-14
171+
is-fork: false
172+
- os: macos-13
173+
free-threading: true
216174
uses: ./.github/workflows/reusable-macos.yml
217175
with:
218176
config_hash: ${{ needs.check_source.outputs.config_hash }}
219-
free-threading: true
220-
# Cirrus and macos-14 are M1.
221-
# Cirrus used for upstream, macos-14 for forks.
222-
os-matrix: '["ghcr.io/cirruslabs/macos-runner:sonoma", "macos-14"]'
177+
free-threading: ${{ matrix.free-threading }}
178+
os: ${{ matrix.os }}
223179

224180
build_ubuntu:
225-
name: 'Ubuntu'
226-
needs: check_source
227-
if: needs.check_source.outputs.run_tests == 'true'
228-
uses: ./.github/workflows/reusable-ubuntu.yml
229-
with:
230-
config_hash: ${{ needs.check_source.outputs.config_hash }}
231-
options: |
232-
../cpython-ro-srcdir/configure \
233-
--config-cache \
234-
--with-pydebug \
235-
--with-openssl=$OPENSSL_DIR
236-
237-
build_ubuntu_free_threading:
238-
name: 'Ubuntu (free-threading)'
181+
name: >-
182+
Ubuntu
183+
${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
239184
needs: check_source
240185
if: needs.check_source.outputs.run_tests == 'true'
186+
strategy:
187+
matrix:
188+
free-threading:
189+
- false
190+
- true
241191
uses: ./.github/workflows/reusable-ubuntu.yml
242192
with:
243193
config_hash: ${{ needs.check_source.outputs.config_hash }}
244-
options: |
245-
../cpython-ro-srcdir/configure \
246-
--config-cache \
247-
--with-pydebug \
248-
--with-openssl=$OPENSSL_DIR \
249-
--disable-gil
194+
free-threading: ${{ matrix.free-threading }}
250195

251196
build_ubuntu_ssltests:
252197
name: 'Ubuntu SSL tests with OpenSSL'
@@ -298,7 +243,7 @@ jobs:
298243
with:
299244
save: false
300245
- name: Configure CPython
301-
run: ./configure --config-cache --with-pydebug --with-openssl=$OPENSSL_DIR
246+
run: ./configure CFLAGS="-fdiagnostics-format=json" --config-cache --enable-slower-safety --with-pydebug --with-openssl=$OPENSSL_DIR
302247
- name: Build CPython
303248
run: make -j4
304249
- name: Display build info
@@ -371,6 +316,7 @@ jobs:
371316
../cpython-ro-srcdir/configure \
372317
--config-cache \
373318
--with-pydebug \
319+
--enable-slower-safety \
374320
--with-openssl=$OPENSSL_DIR
375321
- name: Build CPython out-of-tree
376322
working-directory: ${{ env.CPYTHON_BUILDDIR }}
@@ -556,12 +502,11 @@ jobs:
556502
- check-docs
557503
- check_generated_files
558504
- build_macos
559-
- build_macos_free_threading
560505
- build_ubuntu
561-
- build_ubuntu_free_threading
562506
- build_ubuntu_ssltests
563507
- build_wasi
564508
- build_windows
509+
- build_windows_msi
565510
- test_hypothesis
566511
- build_asan
567512
- build_tsan
@@ -576,6 +521,7 @@ jobs:
576521
with:
577522
allowed-failures: >-
578523
build_ubuntu_ssltests,
524+
build_windows_msi,
579525
cifuzz,
580526
test_hypothesis,
581527
allowed-skips: >-
@@ -591,9 +537,7 @@ jobs:
591537
&& '
592538
check_generated_files,
593539
build_macos,
594-
build_macos_free_threading,
595540
build_ubuntu,
596-
build_ubuntu_free_threading,
597541
build_ubuntu_ssltests,
598542
build_wasi,
599543
build_windows,

.github/workflows/build_msi.yml

-40
This file was deleted.

0 commit comments

Comments
 (0)