Skip to content

feat: Add Python 3.14 freethreaded support #851

feat: Add Python 3.14 freethreaded support

feat: Add Python 3.14 freethreaded support #851

Workflow file for this run

name: Json2xml
on:
push:
branches: [main, master]
paths-ignore:
- 'docs/**'
- '*.md'
- '*.rst'
pull_request:
paths-ignore:
- 'docs/**'
- '*.md'
- '*.rst'
permissions:
contents: read
checks: write # For test results
pull-requests: write # For codecov
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
python-version: [pypy-3.10, pypy-3.11, '3.10', '3.11', '3.12', '3.13', '3.14.0']
os: [
ubuntu-22.04,
windows-2022,
macos-14,
]
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python ${{ matrix.python-version }}
uses: actions/[email protected]
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: |
requirements*.txt
requirements-dev.in
pyproject.toml
- name: Install dependencies
run: |
uv pip install -e .
uv pip install pytest pytest-xdist pytest-cov
- name: Create coverage directory
run: mkdir -p coverage/reports
- name: Run tests
run: |
pytest --cov=json2xml --cov-report=xml:coverage/reports/coverage.xml --cov-report=term -xvs tests -n auto
env:
PYTHONPATH: ${{ github.workspace }}
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
if: success()
with:
directory: ./coverage/reports/
env_vars: OS,PYTHON
fail_ci_if_error: false # Don't fail CI if codecov upload fails
files: ./coverage/reports/coverage.xml
flags: unittests
token: ${{ secrets.CODECOV_TOKEN }}
name: codecov-umbrella
verbose: true
env:
OS: ${{ matrix.os }}
PYTHON: ${{ matrix.python-version }}
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python 3.12
uses: actions/[email protected]
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: |
requirements*.txt
requirements-dev.in
pyproject.toml
- name: Install dependencies
run: |
uv pip install -e .
uv pip install ruff>=0.3.0
- name: Run ruff
run: ruff check json2xml tests
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python 3.12
uses: actions/[email protected]
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: |
requirements*.txt
requirements-dev.in
pyproject.toml
- name: Install dependencies
run: |
uv pip install -e .
uv pip install mypy>=1.0.0 types-setuptools
- name: Run mypy
run: mypy json2xml tests
test-freethreaded:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
python-version: '3.14.0'
arch: x64
platform: linux
- os: windows-2022
python-version: '3.14.0'
arch: x64
platform: win32
- os: macos-14
python-version: '3.14.0'
arch: x64
platform: darwin
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Download and setup Python ${{ matrix.python-version }} (freethreaded)
run: |
if [ "${{ matrix.platform }}" = "linux" ]; then
wget -O python.tar.gz "https://github.com/actions/python-versions/releases/download/3.14.0-18313368925/python-3.14.0-linux-22.04-${{ matrix.arch }}-freethreaded.tar.gz"
tar -xzf python.tar.gz
echo "$PWD/python-3.14.0-linux-22.04-${{ matrix.arch }}-freethreaded/bin" >> $GITHUB_PATH
elif [ "${{ matrix.platform }}" = "win32" ]; then
curl -L -o python.zip "https://github.com/actions/python-versions/releases/download/3.14.0-18313368925/python-3.14.0-win32-${{ matrix.arch }}-freethreaded.zip"
Expand-Archive python.zip -DestinationPath .
echo "$PWD/python-3.14.0-win32-${{ matrix.arch }}-freethreaded" >> $env:GITHUB_PATH
elif [ "${{ matrix.platform }}" = "darwin" ]; then
curl -L -o python.tar.gz "https://github.com/actions/python-versions/releases/download/3.14.0-18313368925/python-3.14.0-darwin-${{ matrix.arch }}-freethreaded.tar.gz"
tar -xzf python.tar.gz
echo "$PWD/python-3.14.0-darwin-${{ matrix.arch }}-freethreaded/bin" >> $GITHUB_PATH
fi
- name: Install uv
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: |
requirements*.txt
requirements-dev.in
pyproject.toml
- name: Install dependencies
run: |
uv pip install -e .
uv pip install pytest pytest-xdist pytest-cov
- name: Create coverage directory
run: mkdir -p coverage/reports
- name: Run tests with freethreaded Python
run: |
pytest --cov=json2xml --cov-report=xml:coverage/reports/coverage.xml --cov-report=term -xvs tests -n auto
env:
PYTHONPATH: ${{ github.workspace }}
PYTHON_FREETHREADED: 1
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
if: success()
with:
directory: ./coverage/reports/
env_vars: OS,PYTHON
fail_ci_if_error: false # Don't fail CI if codecov upload fails
files: ./coverage/reports/coverage.xml
flags: freethreaded
token: ${{ secrets.CODECOV_TOKEN }}
name: codecov-freethreaded
verbose: true
env:
OS: ${{ matrix.os }}
PYTHON: ${{ matrix.python-version }}-freethreaded