feat: Add free-threaded Python 3.14t support with parallel processing (1.55x speedup) #879
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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', '3.14t', '3.15.0-alpha.1'] | |
| os: [ | |
| ubuntu-latest, | |
| windows-latest, | |
| macos-latest, | |
| "ubuntu-24.04-arm" | |
| ] | |
| 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: Verify freethreaded Python | |
| if: endsWith(matrix.python-version, 't') | |
| run: | | |
| python --version --version | |
| python -c "import sys; print('Free-threading enabled:', not sys._is_gil_enabled() if hasattr(sys, '_is_gil_enabled') else False)" | |
| - 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 --system -e . | |
| uv pip install --system 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 --system -e . | |
| - name: Run ruff | |
| run: uvx ruff check json2xml tests | |