diff --git a/.github/workflows/add-issue-header.yml b/.github/workflows/add-issue-header.yml deleted file mode 100644 index 3cbc23a..0000000 --- a/.github/workflows/add-issue-header.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Add issue header -# Automatically edits an issue's descriptions with a header, -# one of: -# -# - Bug report -# - Crash report -# - Feature or enhancement - -on: - issues: - types: - # Only ever run once - - opened - - -jobs: - add-header: - runs-on: ubuntu-latest - permissions: - issues: write - timeout-minutes: 5 - steps: - - uses: actions/github-script@v7 - with: - # language=JavaScript - script: | - // https://devguide.python.org/triage/labels/#type-labels - const HEADERS = new Map([ - ['type-bug', 'Bug report'], - ['type-crash', 'Crash report'], - ['type-feature', 'Feature or enhancement'], - ]); - let issue_data = await github.rest.issues.get({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo - }).then(issue => issue.data); - let header = ''; - for (const label_data of issue_data.labels) { - const label_name = (typeof label_data === 'string') ? label_data : label_data.name; - if (HEADERS.has(label_name)) { - header = HEADERS.get(label_name); - break; - } - } - if (header !== '') { - console.log(`Setting new header: ${header}`); - await github.rest.issues.update({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `# ${header}\n\n${issue_data.body.replaceAll('\r', '')}` - }); - } diff --git a/.github/workflows/documentation-links.yml b/.github/workflows/documentation-links.yml deleted file mode 100644 index a09a305..0000000 --- a/.github/workflows/documentation-links.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Read the Docs PR preview -# Automatically edits a pull request's descriptions with a link -# to the documentation's preview on Read the Docs. - -on: - pull_request_target: - types: - - opened - paths: - - 'Doc/**' - - '.github/workflows/doc.yml' - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - documentation-links: - runs-on: ubuntu-latest - permissions: - pull-requests: write - timeout-minutes: 5 - - steps: - - uses: readthedocs/actions/preview@v1 - with: - project-slug: "cpython-previews" - single-version: "true" diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml deleted file mode 100644 index 3009b10..0000000 --- a/.github/workflows/jit.yml +++ /dev/null @@ -1,155 +0,0 @@ -name: JIT -on: - pull_request: - paths: - - '**jit**' - - 'Python/bytecodes.c' - - 'Python/optimizer*.c' - - '!Python/perf_jit_trampoline.c' - - '!**/*.md' - - '!**/*.ini' - push: - paths: - - '**jit**' - - 'Python/bytecodes.c' - - 'Python/optimizer*.c' - - '!Python/perf_jit_trampoline.c' - - '!**/*.md' - - '!**/*.ini' - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -env: - FORCE_COLOR: 1 - -jobs: - interpreter: - name: Interpreter (Debug) - runs-on: ubuntu-24.04 - timeout-minutes: 90 - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Build tier two interpreter - run: | - ./configure --enable-experimental-jit=interpreter --with-pydebug - make all --jobs 4 - - name: Test tier two interpreter - run: | - ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - jit: - name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) - needs: interpreter - runs-on: ${{ matrix.runner }} - timeout-minutes: 90 - strategy: - fail-fast: false - matrix: - target: - - i686-pc-windows-msvc/msvc - - x86_64-pc-windows-msvc/msvc - - aarch64-pc-windows-msvc/msvc - - x86_64-apple-darwin/clang - - aarch64-apple-darwin/clang - - x86_64-unknown-linux-gnu/gcc - - aarch64-unknown-linux-gnu/gcc - debug: - - true - - false - llvm: - - 19 - include: - - target: i686-pc-windows-msvc/msvc - architecture: Win32 - runner: windows-latest - - target: x86_64-pc-windows-msvc/msvc - architecture: x64 - runner: windows-latest - - target: aarch64-pc-windows-msvc/msvc - architecture: ARM64 - runner: windows-11-arm - - target: x86_64-apple-darwin/clang - architecture: x86_64 - runner: macos-13 - - target: aarch64-apple-darwin/clang - architecture: aarch64 - runner: macos-14 - - target: x86_64-unknown-linux-gnu/gcc - architecture: x86_64 - runner: ubuntu-24.04 - - target: aarch64-unknown-linux-gnu/gcc - architecture: aarch64 - runner: ubuntu-24.04-arm - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - # PCbuild downloads LLVM automatically: - - name: Windows - if: runner.os == 'Windows' - run: | - ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} - ./PCbuild/rt.bat ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - # The `find` line is required as a result of https://github.com/actions/runner-images/issues/9966. - # This is a bug in the macOS runner image where the pre-installed Python is installed in the same - # directory as the Homebrew Python, which causes the build to fail for macos-13. This line removes - # the symlink to the pre-installed Python so that the Homebrew Python is used instead. - - name: macOS - if: runner.os == 'macOS' - run: | - brew update - find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete - brew install llvm@${{ matrix.llvm }} - export SDKROOT="$(xcrun --show-sdk-path)" - ./configure --enable-experimental-jit --enable-universalsdk --with-universal-archs=universal2 ${{ matrix.debug && '--with-pydebug' || '' }} - make all --jobs 4 - ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - - name: Linux - if: runner.os == 'Linux' - run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} - make all --jobs 4 - ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - # XXX: GH-133171 - # jit-with-disabled-gil: - # name: Free-Threaded (Debug) - # needs: interpreter - # runs-on: ubuntu-24.04 - # timeout-minutes: 90 - # strategy: - # fail-fast: false - # matrix: - # llvm: - # - 19 - # steps: - # - uses: actions/checkout@v6 - # with: - # persist-credentials: false - # - uses: actions/setup-python@v5 - # with: - # python-version: '3.11' - # - name: Build with JIT enabled and GIL disabled - # run: | - # sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - # export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - # ./configure --enable-experimental-jit --with-pydebug --disable-gil - # make all --jobs 4 - # - name: Run tests - # run: | - # ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 4ed6555..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Lint - -on: [push, pull_request, workflow_dispatch] - -permissions: - contents: read - -env: - FORCE_COLOR: 1 - RUFF_OUTPUT_FORMAT: github - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - lint: - runs-on: ubuntu-latest - timeout-minutes: 10 - - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/setup-python@v5 - with: - python-version: "3.x" - - uses: pre-commit/action@v3.0.1 diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml deleted file mode 100644 index 3824f7f..0000000 --- a/.github/workflows/mypy.yml +++ /dev/null @@ -1,73 +0,0 @@ -# Workflow to run mypy on select parts of the CPython repo -name: mypy - -on: - push: - branches: - - main - pull_request: - paths: - - ".github/workflows/mypy.yml" - - "Lib/_colorize.py" - - "Lib/_pyrepl/**" - - "Lib/test/libregrtest/**" - - "Lib/tomllib/**" - - "Misc/mypy/**" - - "Tools/build/compute-changes.py" - - "Tools/build/deepfreeze.py" - - "Tools/build/generate_sbom.py" - - "Tools/build/generate-build-details.py" - - "Tools/build/verify_ensurepip_wheels.py" - - "Tools/build/update_file.py" - - "Tools/build/umarshal.py" - - "Tools/cases_generator/**" - - "Tools/clinic/**" - - "Tools/jit/**" - - "Tools/peg_generator/**" - - "Tools/requirements-dev.txt" - - "Tools/wasm/**" - workflow_dispatch: - -permissions: - contents: read - -env: - PIP_DISABLE_PIP_VERSION_CHECK: 1 - FORCE_COLOR: 1 - TERM: xterm-256color # needed for FORCE_COLOR to work on mypy on Ubuntu, see https://github.com/python/mypy/issues/13817 - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - mypy: - name: Run mypy on ${{ matrix.target }} - runs-on: ubuntu-latest - timeout-minutes: 10 - strategy: - fail-fast: false - matrix: - target: [ - "Lib/_pyrepl", - "Lib/test/libregrtest", - "Lib/tomllib", - "Tools/build", - "Tools/cases_generator", - "Tools/clinic", - "Tools/jit", - "Tools/peg_generator", - "Tools/wasm", - ] - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/setup-python@v5 - with: - python-version: "3.13" - cache: pip - cache-dependency-path: Tools/requirements-dev.txt - - run: pip install -r Tools/requirements-dev.txt - - run: python3 Misc/mypy/make_symlinks.py --symlink - - run: mypy --config-file ${{ matrix.target }}/mypy.ini diff --git a/.github/workflows/new-bugs-announce-notifier.yml b/.github/workflows/new-bugs-announce-notifier.yml deleted file mode 100644 index 4d46f88..0000000 --- a/.github/workflows/new-bugs-announce-notifier.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: new-bugs-announce notifier - -on: - issues: - types: - - opened - -permissions: - issues: read - -jobs: - notify-new-bugs-announce: - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/setup-node@v6 - with: - node-version: 20 - - run: npm install mailgun.js form-data - - name: Send notification - uses: actions/github-script@v7 - env: - MAILGUN_API_KEY: ${{ secrets.MAILGUN_PYTHON_ORG_MAILGUN_KEY }} - with: - script: | - const Mailgun = require("mailgun.js"); - const formData = require('form-data'); - const mailgun = new Mailgun(formData); - const DOMAIN = "mailgun.python.org"; - const mg = mailgun.client({username: 'api', key: process.env.MAILGUN_API_KEY}); - github.rest.issues.get({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - }) - .then(function(issue) { - const payload = { - author : issue.data.user.login, - issue : issue.data.number, - title : issue.data.title, - url : issue.data.html_url, - labels : issue.data.labels.map(label => { return label.name }).join(", "), - assignee : issue.data.assignees.map(assignee => { return assignee.login }), - // We need to truncate the body size, because the max size for - // the whole payload is 16kb. We want to be safe and assume that - // body can take up to ~8kb of space. - body : issue.data.body.substring(0, 8000) - }; - - const data = { - from: "CPython Issues ", - to: "new-bugs-announce@python.org", - subject: `[Issue ${issue.data.number}] ${issue.data.title}`, - template: "new-github-issue", - 'o:tracking-clicks': 'no', - 'h:X-Mailgun-Variables': JSON.stringify(payload) - }; - return mg.messages.create(DOMAIN, data) - }) - .then(msg => console.log(msg)); diff --git a/.github/workflows/posix-deps-apt.sh b/.github/workflows/posix-deps-apt.sh deleted file mode 100644 index 7773222..0000000 --- a/.github/workflows/posix-deps-apt.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -apt-get update - -apt-get -yq install \ - build-essential \ - pkg-config \ - ccache \ - gdb \ - lcov \ - libb2-dev \ - libbz2-dev \ - libffi-dev \ - libgdbm-dev \ - libgdbm-compat-dev \ - liblzma-dev \ - libncurses5-dev \ - libreadline6-dev \ - libsqlite3-dev \ - libssl-dev \ - libzstd-dev \ - lzma \ - lzma-dev \ - strace \ - tk-dev \ - uuid-dev \ - xvfb \ - zlib1g-dev diff --git a/.github/workflows/project-updater.yml b/.github/workflows/project-updater.yml deleted file mode 100644 index 1d9d637..0000000 --- a/.github/workflows/project-updater.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Update GH projects - -on: - issues: - types: - - opened - - labeled - -permissions: - contents: read - -jobs: - add-to-project: - name: Add issues to projects - runs-on: ubuntu-latest - timeout-minutes: 10 - strategy: - fail-fast: false - matrix: - include: - # if an issue has any of these labels, it will be added - # to the corresponding project - - { project: 2, label: "release-blocker, deferred-blocker" } - - { project: 32, label: sprint } - - steps: - - uses: actions/add-to-project@v1.0.0 - with: - project-url: https://github.com/orgs/python/projects/${{ matrix.project }} - github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} - labeled: ${{ matrix.label }} diff --git a/.github/workflows/regen-abidump.sh b/.github/workflows/regen-abidump.sh deleted file mode 100644 index 251bb38..0000000 --- a/.github/workflows/regen-abidump.sh +++ /dev/null @@ -1,8 +0,0 @@ -set -ex - -export DEBIAN_FRONTEND=noninteractive -./.github/workflows/posix-deps-apt.sh -apt-get install -yq abigail-tools python3 -export CFLAGS="-g3 -O0" -./configure --enable-shared && make -make regen-abidump diff --git a/.github/workflows/require-pr-label.yml b/.github/workflows/require-pr-label.yml deleted file mode 100644 index 7e534c5..0000000 --- a/.github/workflows/require-pr-label.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Check labels - -on: - pull_request: - types: [opened, reopened, labeled, unlabeled, synchronize] - -jobs: - label-dnm: - name: DO-NOT-MERGE - if: github.repository_owner == 'python' - runs-on: ubuntu-latest - permissions: - pull-requests: read - timeout-minutes: 10 - - steps: - - name: Check there's no DO-NOT-MERGE - uses: mheap/github-action-required-labels@v5 - with: - mode: exactly - count: 0 - labels: | - DO-NOT-MERGE - - label-reviews: - name: Unresolved review - if: github.repository_owner == 'python' - runs-on: ubuntu-latest - permissions: - pull-requests: read - timeout-minutes: 10 - - steps: - # Check that the PR is not awaiting changes from the author due to previous review. - - name: Check there's no required changes - uses: mheap/github-action-required-labels@v5 - with: - mode: exactly - count: 0 - labels: | - awaiting changes - awaiting change review - - id: is-feature - name: Check whether this PR is a feature (contains a "type-feature" label) - uses: mheap/github-action-required-labels@v5 - with: - mode: exactly - count: 1 - labels: | - type-feature - exit_type: success # don't fail the check if the PR is not a feature, just record the result - # In case of a feature PR, check for a complete review (contains an "awaiting merge" label). - - id: awaiting-merge - if: steps.is-feature.outputs.status == 'success' - name: Check for complete review - uses: mheap/github-action-required-labels@v5 - with: - mode: exactly - count: 1 - labels: | - awaiting merge diff --git a/.github/workflows/reusable-context.yml b/.github/workflows/reusable-context.yml deleted file mode 100644 index 4f99943..0000000 --- a/.github/workflows/reusable-context.yml +++ /dev/null @@ -1,107 +0,0 @@ -name: Reusable build context - -on: # yamllint disable-line rule:truthy - workflow_call: - outputs: - # Every referenced step MUST always set its output variable, - # either via ``Tools/build/compute-changes.py`` or in this workflow file. - # Boolean outputs (generally prefixed ``run-``) can then later be used - # safely through the following idiom in job conditionals and other - # expressions. Here's some examples: - # - # if: fromJSON(needs.build-context.outputs.run-tests) - # - # ${{ - # fromJSON(needs.build-context.outputs.run-tests) - # && 'truthy-branch' - # || 'falsy-branch' - # }} - # - config-hash: - description: Config hash value for use in cache keys - value: ${{ jobs.compute-changes.outputs.config-hash }} # str - run-docs: - description: Whether to build the docs - value: ${{ jobs.compute-changes.outputs.run-docs }} # bool - run-tests: - description: Whether to run the regular tests - value: ${{ jobs.compute-changes.outputs.run-tests }} # bool - run-windows-tests: - description: Whether to run the Windows tests - value: ${{ jobs.compute-changes.outputs.run-windows-tests }} # bool - run-windows-msi: - description: Whether to run the MSI installer smoke tests - value: ${{ jobs.compute-changes.outputs.run-windows-msi }} # bool - run-ci-fuzz: - description: Whether to run the CIFuzz job - value: ${{ jobs.compute-changes.outputs.run-ci-fuzz }} # bool - -jobs: - compute-changes: - name: Create context from changed files - runs-on: ubuntu-latest - timeout-minutes: 10 - outputs: - config-hash: ${{ steps.config-hash.outputs.hash }} - run-ci-fuzz: ${{ steps.changes.outputs.run-ci-fuzz }} - run-docs: ${{ steps.changes.outputs.run-docs }} - run-tests: ${{ steps.changes.outputs.run-tests }} - run-windows-msi: ${{ steps.changes.outputs.run-windows-msi }} - run-windows-tests: ${{ steps.changes.outputs.run-windows-tests }} - steps: - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3" - - - run: >- - echo '${{ github.event_name }}' - - - uses: actions/checkout@v6 - with: - persist-credentials: false - ref: >- - ${{ - github.event_name == 'pull_request' - && github.event.pull_request.head.sha - || '' - }} - - # Adapted from https://github.com/actions/checkout/issues/520#issuecomment-1167205721 - - name: Fetch commits to get branch diff - if: github.event_name == 'pull_request' - run: | - set -eux - - # Fetch enough history to find a common ancestor commit (aka merge-base): - git fetch origin "${refspec_pr}" --depth=$(( commits + 1 )) \ - --no-tags --prune --no-recurse-submodules - - # This should get the oldest commit in the local fetched history (which may not be the commit the PR branched from): - COMMON_ANCESTOR=$( git rev-list --first-parent --max-parents=0 --max-count=1 "${branch_pr}" ) - DATE=$( git log --date=iso8601 --format=%cd "${COMMON_ANCESTOR}" ) - - # Get all commits since that commit date from the base branch (eg: main): - git fetch origin "${refspec_base}" --shallow-since="${DATE}" \ - --no-tags --prune --no-recurse-submodules - env: - branch_pr: 'origin/${{ github.event.pull_request.head.ref }}' - commits: ${{ github.event.pull_request.commits }} - refspec_base: '+${{ github.event.pull_request.base.sha }}:remotes/origin/${{ github.event.pull_request.base.ref }}' - refspec_pr: '+${{ github.event.pull_request.head.sha }}:remotes/origin/${{ github.event.pull_request.head.ref }}' - - # We only want to run tests on PRs when related files are changed, - # or when someone triggers a manual workflow run. - - name: Compute changed files - id: changes - run: python Tools/build/compute-changes.py - env: - GITHUB_DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} - GITHUB_EVENT_NAME: ${{ github.event_name }} - CCF_TARGET_REF: ${{ github.base_ref || github.event.repository.default_branch }} - CCF_HEAD_REF: ${{ github.event.pull_request.head.sha || github.sha }} - - - name: Compute hash for config cache key - id: config-hash - run: | - echo "hash=${{ hashFiles('configure', 'configure.ac', '.github/workflows/build.yml') }}" >> "$GITHUB_OUTPUT" diff --git a/.github/workflows/reusable-docs.yml b/.github/workflows/reusable-docs.yml deleted file mode 100644 index a2db39c..0000000 --- a/.github/workflows/reusable-docs.yml +++ /dev/null @@ -1,104 +0,0 @@ -name: Reusable Docs - -on: - workflow_call: - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -env: - FORCE_COLOR: 1 - -jobs: - build-doc: - name: 'Docs' - runs-on: ubuntu-latest - timeout-minutes: 60 - env: - branch_base: 'origin/${{ github.event.pull_request.base.ref }}' - branch_pr: 'origin/${{ github.event.pull_request.head.ref }}' - commits: ${{ github.event.pull_request.commits }} - refspec_base: '+${{ github.event.pull_request.base.sha }}:remotes/origin/${{ github.event.pull_request.base.ref }}' - refspec_pr: '+${{ github.event.pull_request.head.sha }}:remotes/origin/${{ github.event.pull_request.head.ref }}' - steps: - - name: 'Check out latest PR branch commit' - uses: actions/checkout@v6 - with: - persist-credentials: false - ref: >- - ${{ - github.event_name == 'pull_request' - && github.event.pull_request.head.sha - || '' - }} - # Adapted from https://github.com/actions/checkout/issues/520#issuecomment-1167205721 - - name: 'Fetch commits to get branch diff' - if: github.event_name == 'pull_request' - run: | - # Fetch enough history to find a common ancestor commit (aka merge-base): - git fetch origin "${refspec_pr}" --depth=$(( commits + 1 )) \ - --no-tags --prune --no-recurse-submodules - - # This should get the oldest commit in the local fetched history (which may not be the commit the PR branched from): - COMMON_ANCESTOR=$( git rev-list --first-parent --max-parents=0 --max-count=1 "${branch_pr}" ) - DATE=$( git log --date=iso8601 --format=%cd "${COMMON_ANCESTOR}" ) - - # Get all commits since that commit date from the base branch (eg: master or main): - git fetch origin "${refspec_base}" --shallow-since="${DATE}" \ - --no-tags --prune --no-recurse-submodules - - name: 'Set up Python' - uses: actions/setup-python@v5 - with: - python-version: '3' - cache: 'pip' - cache-dependency-path: 'Doc/requirements.txt' - - name: 'Install build dependencies' - run: make -C Doc/ venv - - # To annotate PRs with Sphinx nitpicks (missing references) - - name: 'Build HTML documentation' - continue-on-error: true - run: | - set -Eeuo pipefail - # Build docs with the nit-picky option; write warnings to file - make -C Doc/ PYTHON=../python SPHINXOPTS="--quiet --nitpicky --fail-on-warning --warning-file sphinx-warnings.txt" html - - name: 'Check warnings' - if: github.event_name == 'pull_request' - run: | - python Doc/tools/check-warnings.py \ - --annotate-diff "${branch_base}" "${branch_pr}" \ - --fail-if-regression \ - --fail-if-improved \ - --fail-if-new-news-nit - - # Run "doctest" on HEAD as new syntax doesn't exist in the latest stable release - doctest: - name: 'Doctest' - runs-on: ubuntu-24.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/cache@v5 - with: - path: ~/.cache/pip - key: ubuntu-doc-${{ hashFiles('Doc/requirements.txt') }} - restore-keys: | - ubuntu-doc- - - name: 'Install Dependencies' - run: sudo ./.github/workflows/posix-deps-apt.sh && sudo apt-get install wamerican - - name: 'Configure CPython' - run: ./configure --with-pydebug - - name: 'Build CPython' - run: make -j4 - - name: 'Install build dependencies' - run: make -C Doc/ PYTHON=../python venv - # Use "xvfb-run" since some doctest tests open GUI windows - - name: 'Run documentation doctest' - run: xvfb-run make -C Doc/ PYTHON=../python SPHINXERRORHANDLING="--fail-on-warning" doctest diff --git a/.github/workflows/reusable-macos.yml b/.github/workflows/reusable-macos.yml deleted file mode 100644 index 5ca56e9..0000000 --- a/.github/workflows/reusable-macos.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Reusable macOS - -on: - workflow_call: - inputs: - config_hash: - required: true - type: string - free-threading: - required: false - type: boolean - default: false - os: - description: OS to run the job - required: true - type: string - -env: - FORCE_COLOR: 1 - -jobs: - build-macos: - name: build and test (${{ inputs.os }}) - runs-on: ${{ inputs.os }} - timeout-minutes: 60 - env: - HOMEBREW_NO_ANALYTICS: 1 - HOMEBREW_NO_AUTO_UPDATE: 1 - HOMEBREW_NO_INSTALL_CLEANUP: 1 - HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1 - PYTHONSTRICTEXTENSIONBUILD: 1 - TERM: linux - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Runner image version - run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV" - - name: Restore config.cache - uses: actions/cache@v5 - with: - path: config.cache - key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.config_hash }} - - name: Install Homebrew dependencies - run: | - brew install pkg-config openssl@3.0 xz gdbm tcl-tk@8 make - # Because alternate versions are not symlinked into place by default: - brew link --overwrite tcl-tk@8 - - name: Configure CPython - run: | - MACOSX_DEPLOYMENT_TARGET=10.15 \ - GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \ - GDBM_LIBS="-L$(brew --prefix gdbm)/lib -lgdbm" \ - ./configure \ - --config-cache \ - --with-pydebug \ - --enable-slower-safety \ - --enable-safety \ - ${{ inputs.free-threading && '--disable-gil' || '' }} \ - --prefix=/opt/python-dev \ - --with-openssl="$(brew --prefix openssl@3.0)" - - name: Build CPython - if : ${{ inputs.free-threading || inputs.os != 'macos-13' }} - run: gmake -j8 - - name: Build CPython for compiler warning check - if : ${{ !inputs.free-threading && inputs.os == 'macos-13' }} - run: set -o pipefail; gmake -j8 --output-sync 2>&1 | tee compiler_output_macos.txt - - name: Display build info - run: make pythoninfo - - name: Check compiler warnings - if : ${{ !inputs.free-threading && inputs.os == 'macos-13' }} - run: >- - python3 Tools/build/check_warnings.py - --compiler-output-file-path=compiler_output_macos.txt - --warning-ignore-file-path=Tools/build/.warningignore_macos - --compiler-output-type=clang - --fail-on-regression - --fail-on-improvement - --path-prefix="./" - - name: Tests - run: make ci diff --git a/.github/workflows/reusable-san.yml b/.github/workflows/reusable-san.yml deleted file mode 100644 index 1100099..0000000 --- a/.github/workflows/reusable-san.yml +++ /dev/null @@ -1,124 +0,0 @@ -name: Reusable Sanitizer - -on: - workflow_call: - inputs: - sanitizer: - required: true - type: string - config_hash: - required: true - type: string - free-threading: - description: Whether to use free-threaded mode - required: false - type: boolean - default: false - -env: - FORCE_COLOR: 1 - -jobs: - build-san-reusable: - name: >- - ${{ inputs.sanitizer }}${{ - inputs.free-threading - && ' (free-threading)' - || '' - }} - runs-on: ubuntu-24.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Runner image version - run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV" - - name: Restore config.cache - uses: actions/cache@v5 - with: - path: config.cache - key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.sanitizer }}-${{ inputs.config_hash }} - - name: Install dependencies - run: | - sudo ./.github/workflows/posix-deps-apt.sh - # Install clang - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - - if [ "${SANITIZER}" = "TSan" ]; then - sudo ./llvm.sh 17 # gh-121946: llvm-18 package is temporarily broken - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100 - sudo update-alternatives --set clang /usr/bin/clang-17 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-17 100 - sudo update-alternatives --set clang++ /usr/bin/clang++-17 - # Reduce ASLR to avoid TSan crashing - sudo sysctl -w vm.mmap_rnd_bits=28 - else - sudo ./llvm.sh 20 - fi - - - name: Sanitizer option setup - run: | - if [ "${SANITIZER}" = "TSan" ]; then - echo "TSAN_OPTIONS=${SAN_LOG_OPTION} suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{ - fromJSON(inputs.free-threading) - && '_free_threading' - || '' - }}.txt handle_segv=0" >> "$GITHUB_ENV" - else - echo "UBSAN_OPTIONS=${SAN_LOG_OPTION}" >> "$GITHUB_ENV" - fi - echo "CC=clang" >> "$GITHUB_ENV" - echo "CXX=clang++" >> "$GITHUB_ENV" - env: - SANITIZER: ${{ inputs.sanitizer }} - SAN_LOG_OPTION: log_path=${{ github.workspace }}/san_log - - name: Add ccache to PATH - run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" - - name: Configure CPython - run: >- - ./configure - --config-cache - ${{ - inputs.sanitizer == 'TSan' - && '--with-thread-sanitizer' - || '--with-undefined-behavior-sanitizer' - }} - --with-pydebug - ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} - - name: Build CPython - run: make -j4 - - name: Display build info - run: make pythoninfo - - name: Tests - run: >- - ./python -m test - ${{ inputs.sanitizer == 'TSan' && '--tsan' || '' }} - -j4 - - name: Parallel tests - if: >- - inputs.sanitizer == 'TSan' - && fromJSON(inputs.free-threading) - run: ./python -m test --tsan-parallel --parallel-threads=4 -j4 - - name: Display logs - if: always() - run: find "${GITHUB_WORKSPACE}" -name 'san_log.*' | xargs head -n 1000 - - name: Archive logs - if: always() - uses: actions/upload-artifact@v6 - with: - name: >- - ${{ inputs.sanitizer }}-logs-${{ - fromJSON(inputs.free-threading) - && 'free-threading' - || 'default' - }} - path: san_log.* - if-no-files-found: ignore diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml deleted file mode 100644 index 4feb966..0000000 --- a/.github/workflows/reusable-ubuntu.yml +++ /dev/null @@ -1,127 +0,0 @@ -name: Reusable Ubuntu - -on: - workflow_call: - inputs: - config_hash: - required: true - type: string - bolt-optimizations: - description: Whether to enable BOLT optimizations - required: false - type: boolean - default: false - free-threading: - description: Whether to use free-threaded mode - required: false - type: boolean - default: false - os: - description: OS to run the job - required: true - type: string - -env: - FORCE_COLOR: 1 - -jobs: - build-ubuntu-reusable: - name: build and test (${{ inputs.os }}) - runs-on: ${{ inputs.os }} - timeout-minutes: 60 - env: - OPENSSL_VER: 3.0.15 - PYTHONSTRICTEXTENSIONBUILD: 1 - TERM: linux - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Register gcc problem matcher - run: echo "::add-matcher::.github/problem-matchers/gcc.json" - - name: Install dependencies - run: sudo ./.github/workflows/posix-deps-apt.sh - - name: Install Clang and BOLT - if: ${{ fromJSON(inputs.bolt-optimizations) }} - run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh 19 - sudo apt-get install bolt-19 - echo PATH="$(llvm-config-19 --bindir):$PATH" >> $GITHUB_ENV - - name: Configure OpenSSL env vars - run: | - echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV" - echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> "$GITHUB_ENV" - echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> "$GITHUB_ENV" - - name: 'Restore OpenSSL build' - id: cache-openssl - uses: actions/cache@v5 - with: - path: ./multissl/openssl/${{ env.OPENSSL_VER }} - key: ${{ inputs.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - - name: Install OpenSSL - if: steps.cache-openssl.outputs.cache-hit != 'true' - run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux - - name: Add ccache to PATH - run: | - echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: Configure ccache action - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" - - name: Setup directory envs for out-of-tree builds - run: | - echo "CPYTHON_RO_SRCDIR=$(realpath -m "${GITHUB_WORKSPACE}"/../cpython-ro-srcdir)" >> "$GITHUB_ENV" - echo "CPYTHON_BUILDDIR=$(realpath -m "${GITHUB_WORKSPACE}"/../cpython-builddir)" >> "$GITHUB_ENV" - - name: Create directories for read-only out-of-tree builds - run: mkdir -p "$CPYTHON_RO_SRCDIR" "$CPYTHON_BUILDDIR" - - name: Bind mount sources read-only - run: sudo mount --bind -o ro "$GITHUB_WORKSPACE" "$CPYTHON_RO_SRCDIR" - - name: Runner image version - run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV" - - name: Restore config.cache - uses: actions/cache@v5 - with: - path: ${{ env.CPYTHON_BUILDDIR }}/config.cache - key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.config_hash }} - - name: Configure CPython out-of-tree - working-directory: ${{ env.CPYTHON_BUILDDIR }} - # `test_unpickle_module_race` writes to the source directory, which is - # read-only during builds — so we exclude it from profiling with BOLT. - run: >- - PROFILE_TASK='-m test --pgo --ignore test_unpickle_module_race' - ../cpython-ro-srcdir/configure - --config-cache - --with-pydebug - --enable-slower-safety - --enable-safety - --with-openssl="$OPENSSL_DIR" - ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} - ${{ fromJSON(inputs.bolt-optimizations) && '--enable-bolt' || '' }} - - name: Build CPython out-of-tree - if: ${{ inputs.free-threading }} - working-directory: ${{ env.CPYTHON_BUILDDIR }} - run: make -j - - name: Build CPython out-of-tree (for compiler warning check) - if: ${{ !inputs.free-threading }} - working-directory: ${{ env.CPYTHON_BUILDDIR }} - run: set -o pipefail; make -j --output-sync 2>&1 | tee compiler_output_ubuntu.txt - - name: Display build info - working-directory: ${{ env.CPYTHON_BUILDDIR }} - run: make pythoninfo - - name: Check compiler warnings - if: ${{ !inputs.free-threading }} - run: >- - python Tools/build/check_warnings.py - --compiler-output-file-path="${CPYTHON_BUILDDIR}/compiler_output_ubuntu.txt" - --warning-ignore-file-path "${GITHUB_WORKSPACE}/Tools/build/.warningignore_ubuntu" - --compiler-output-type=gcc - --fail-on-regression - --fail-on-improvement - --path-prefix="../cpython-ro-srcdir/" - - name: Remount sources writable for tests - # some tests write to srcdir, lack of pyc files slows down testing - run: sudo mount "$CPYTHON_RO_SRCDIR" -oremount,rw - - name: Tests - working-directory: ${{ env.CPYTHON_BUILDDIR }} - run: xvfb-run make ci diff --git a/.github/workflows/reusable-wasi.yml b/.github/workflows/reusable-wasi.yml deleted file mode 100644 index 56b9b2e..0000000 --- a/.github/workflows/reusable-wasi.yml +++ /dev/null @@ -1,84 +0,0 @@ -name: Reusable WASI - -on: - workflow_call: - inputs: - config_hash: - required: true - type: string - -env: - FORCE_COLOR: 1 - -jobs: - build-wasi-reusable: - name: 'build and test' - runs-on: ubuntu-24.04 - timeout-minutes: 60 - env: - WASMTIME_VERSION: 22.0.0 - WASI_SDK_VERSION: 24 - WASI_SDK_PATH: /opt/wasi-sdk - CROSS_BUILD_PYTHON: cross-build/build - CROSS_BUILD_WASI: cross-build/wasm32-wasip1 - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - # No problem resolver registered as one doesn't currently exist for Clang. - - name: "Install wasmtime" - uses: bytecodealliance/actions/wasmtime/setup@v1 - with: - version: ${{ env.WASMTIME_VERSION }} - - name: "Restore WASI SDK" - id: cache-wasi-sdk - uses: actions/cache@v5 - with: - path: ${{ env.WASI_SDK_PATH }} - key: ${{ runner.os }}-wasi-sdk-${{ env.WASI_SDK_VERSION }} - - name: "Install WASI SDK" # Hard-coded to x64. - if: steps.cache-wasi-sdk.outputs.cache-hit != 'true' - run: | - mkdir "${WASI_SDK_PATH}" && \ - curl -s -S --location "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION}/wasi-sdk-${WASI_SDK_VERSION}.0-x86_64-linux.tar.gz" | \ - tar --strip-components 1 --directory "${WASI_SDK_PATH}" --extract --gunzip - - name: "Configure ccache action" - uses: hendrikmuhs/ccache-action@v1.2 - with: - save: ${{ github.event_name == 'push' }} - max-size: "200M" - - name: "Add ccache to PATH" - run: echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV" - - name: "Install Python" - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - name: "Runner image version" - run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV" - - name: "Restore Python build config.cache" - uses: actions/cache@v5 - with: - path: ${{ env.CROSS_BUILD_PYTHON }}/config.cache - # Include env.pythonLocation in key to avoid changes in environment when setup-python updates Python. - # Include the hash of `Tools/wasm/wasi.py` as it may change the environment variables. - # (Make sure to keep the key in sync with the other config.cache step below.) - key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ env.WASI_SDK_VERSION }}-${{ env.WASMTIME_VERSION }}-${{ inputs.config_hash }}-${{ hashFiles('Tools/wasm/wasi.py') }}-${{ env.pythonLocation }} - - name: "Configure build Python" - run: python3 Tools/wasm/wasi configure-build-python -- --config-cache --with-pydebug - - name: "Make build Python" - run: python3 Tools/wasm/wasi make-build-python - - name: "Restore host config.cache" - uses: actions/cache@v5 - with: - path: ${{ env.CROSS_BUILD_WASI }}/config.cache - # Should be kept in sync with the other config.cache step above. - key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ env.WASI_SDK_VERSION }}-${{ env.WASMTIME_VERSION }}-${{ inputs.config_hash }}-${{ hashFiles('Tools/wasm/wasi.py') }}-${{ env.pythonLocation }} - - name: "Configure host" - # `--with-pydebug` inferred from configure-build-python - run: python3 Tools/wasm/wasi configure-host -- --config-cache - - name: "Make host" - run: python3 Tools/wasm/wasi make-host - - name: "Display build info" - run: make --directory "${CROSS_BUILD_WASI}" pythoninfo - - name: "Test" - run: make --directory "${CROSS_BUILD_WASI}" test diff --git a/.github/workflows/reusable-windows-msi.yml b/.github/workflows/reusable-windows-msi.yml deleted file mode 100644 index fb1fe0a..0000000 --- a/.github/workflows/reusable-windows-msi.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Reusable Windows MSI - -on: - workflow_call: - inputs: - arch: - description: CPU architecture - required: true - type: string - -permissions: - contents: read - -env: - FORCE_COLOR: 1 - -jobs: - build: - name: installer for ${{ inputs.arch }} - runs-on: ${{ inputs.arch == 'arm64' && 'windows-11-arm' || 'windows-latest' }} - timeout-minutes: 60 - env: - ARCH: ${{ inputs.arch }} - IncludeFreethreaded: true - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Build CPython installer - run: ./Tools/msi/build.bat --doc -"${ARCH}" - shell: bash diff --git a/.github/workflows/reusable-windows.yml b/.github/workflows/reusable-windows.yml deleted file mode 100644 index 158c828..0000000 --- a/.github/workflows/reusable-windows.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Reusable Windows - -on: - workflow_call: - inputs: - arch: - description: CPU architecture - required: true - type: string - free-threading: - description: Whether to compile CPython in free-threading mode - required: false - type: boolean - default: false - -env: - FORCE_COLOR: 1 - IncludeUwp: >- - true - -jobs: - build: - name: Build and test (${{ inputs.arch }}) - runs-on: ${{ inputs.arch == 'arm64' && 'windows-11-arm' || 'windows-latest' }} - timeout-minutes: 60 - env: - ARCH: ${{ inputs.arch }} - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - name: Register MSVC problem matcher - if: inputs.arch != 'Win32' - run: echo "::add-matcher::.github/problem-matchers/msvc.json" - - name: Build CPython - run: >- - .\\PCbuild\\build.bat - -e -d -v - -p "${ARCH}" - ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} - shell: bash - - name: Display build info - run: .\\python.bat -m test.pythoninfo - - name: Tests - run: >- - .\\PCbuild\\rt.bat - -p "${ARCH}" - -d -q --fast-ci - ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} - shell: bash diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index febb2dd..0000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Mark stale pull requests - -on: - schedule: - - cron: "0 */6 * * *" - -jobs: - stale: - if: github.repository_owner == 'python' - runs-on: ubuntu-latest - permissions: - pull-requests: write - timeout-minutes: 10 - - steps: - - name: "Check PRs" - uses: actions/stale@v9 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-pr-message: 'This PR is stale because it has been open for 30 days with no activity.' - stale-pr-label: 'stale' - days-before-issue-stale: -1 - days-before-pr-stale: 30 - days-before-close: -1 - ascending: true - operations-per-run: 120 diff --git a/.github/workflows/tail-call.yml b/.github/workflows/tail-call.yml deleted file mode 100644 index 1bfff6e..0000000 --- a/.github/workflows/tail-call.yml +++ /dev/null @@ -1,139 +0,0 @@ -name: Tail calling interpreter -on: - pull_request: - paths: - - '.github/workflows/tail-call.yml' - - 'Python/bytecodes.c' - - 'Python/ceval.c' - - 'Python/ceval_macros.h' - - 'Python/generated_cases.c.h' - push: - paths: - - '.github/workflows/tail-call.yml' - - 'Python/bytecodes.c' - - 'Python/ceval.c' - - 'Python/ceval_macros.h' - - 'Python/generated_cases.c.h' - workflow_dispatch: - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -env: - FORCE_COLOR: 1 - -jobs: - tail-call: - name: ${{ matrix.target }} - runs-on: ${{ matrix.runner }} - timeout-minutes: 90 - strategy: - fail-fast: false - matrix: - target: -# Un-comment as we add support for more platforms for tail-calling interpreters. -# - i686-pc-windows-msvc/msvc - - x86_64-pc-windows-msvc/msvc -# - aarch64-pc-windows-msvc/msvc - - x86_64-apple-darwin/clang - - aarch64-apple-darwin/clang - - x86_64-unknown-linux-gnu/gcc - - aarch64-unknown-linux-gnu/gcc - - free-threading - llvm: - - 20 - include: -# - target: i686-pc-windows-msvc/msvc -# architecture: Win32 -# runner: windows-latest - - target: x86_64-pc-windows-msvc/msvc - architecture: x64 - runner: windows-latest -# - target: aarch64-pc-windows-msvc/msvc -# architecture: ARM64 -# runner: windows-latest - - target: x86_64-apple-darwin/clang - architecture: x86_64 - runner: macos-13 - - target: aarch64-apple-darwin/clang - architecture: aarch64 - runner: macos-14 - - target: x86_64-unknown-linux-gnu/gcc - architecture: x86_64 - runner: ubuntu-24.04 - - target: aarch64-unknown-linux-gnu/gcc - architecture: aarch64 - runner: ubuntu-24.04-arm - - target: free-threading - architecture: x86_64 - runner: ubuntu-24.04 - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Native Windows (debug) - if: runner.os == 'Windows' && matrix.architecture != 'ARM64' - shell: cmd - run: | - choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0 - set PlatformToolset=clangcl - set LLVMToolsVersion=${{ matrix.llvm }}.1.0 - set LLVMInstallDir=C:\Program Files\LLVM - call ./PCbuild/build.bat --tail-call-interp -d -p ${{ matrix.architecture }} - call ./PCbuild/rt.bat -d -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - # No tests (yet): - - name: Emulated Windows (release) - if: runner.os == 'Windows' && matrix.architecture == 'ARM64' - shell: cmd - run: | - choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0 - set PlatformToolset=clangcl - set LLVMToolsVersion=${{ matrix.llvm }}.1.0 - set LLVMInstallDir=C:\Program Files\LLVM - ./PCbuild/build.bat --tail-call-interp -p ${{ matrix.architecture }} - - # The `find` line is required as a result of https://github.com/actions/runner-images/issues/9966. - # This is a bug in the macOS runner image where the pre-installed Python is installed in the same - # directory as the Homebrew Python, which causes the build to fail for macos-13. This line removes - # the symlink to the pre-installed Python so that the Homebrew Python is used instead. - # Note: when a new LLVM is released, the homebrew installation directory changes, so the builds will fail. - # We either need to upgrade LLVM or change the directory being pointed to. - - name: Native macOS (release) - if: runner.os == 'macOS' - run: | - brew update - find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete - brew install llvm@${{ matrix.llvm }} - export SDKROOT="$(xcrun --show-sdk-path)" - export PATH="/usr/local/opt/llvm/bin:$PATH" - export PATH="/opt/homebrew/opt/llvm/bin:$PATH" - CC=clang-20 ./configure --with-tail-call-interp - make all --jobs 4 - ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - - name: Native Linux (debug) - if: runner.os == 'Linux' && matrix.target != 'free-threading' - run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - CC=clang-20 ./configure --with-tail-call-interp --with-pydebug - make all --jobs 4 - ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - - name: Native Linux with free-threading (release) - if: matrix.target == 'free-threading' - run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - CC=clang-20 ./configure --with-tail-call-interp --disable-gil - make all --jobs 4 - ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 diff --git a/.github/workflows/verify-ensurepip-wheels.yml b/.github/workflows/verify-ensurepip-wheels.yml deleted file mode 100644 index 7cd3f92..0000000 --- a/.github/workflows/verify-ensurepip-wheels.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Verify bundled wheels - -on: - workflow_dispatch: - push: - paths: - - 'Lib/ensurepip/_bundled/**' - - '.github/workflows/verify-ensurepip-wheels.yml' - - 'Tools/build/verify_ensurepip_wheels.py' - pull_request: - paths: - - 'Lib/ensurepip/_bundled/**' - - '.github/workflows/verify-ensurepip-wheels.yml' - - 'Tools/build/verify_ensurepip_wheels.py' - -permissions: - contents: read - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - verify: - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v6 - with: - persist-credentials: false - - uses: actions/setup-python@v5 - with: - python-version: '3' - - name: Compare checksum of bundled wheels to the ones published on PyPI - run: ./Tools/build/verify_ensurepip_wheels.py