add free-threaded CI #23
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: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| jobs: | |
| test: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-latest, ubuntu-latest, windows-latest] | |
| python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - uses: actions/setup-python@v5 | |
| with: | |
| cache: pip | |
| cache-dependency-path: "pyproject.toml" | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install hatch | |
| run: | | |
| pip install -U hatch | |
| - uses: actions-rs/toolchain@v1 | |
| with: | |
| toolchain: stable | |
| - name: Build LibCST | |
| run: hatch -vv env create | |
| - name: Native Parser Tests | |
| run: hatch run test | |
| - name: Pure Parser Tests | |
| env: | |
| COVERAGE_FILE: .coverage.pure | |
| LIBCST_PARSER_TYPE: pure | |
| run: hatch run test | |
| - name: Coverage | |
| run: | | |
| hatch run coverage combine .coverage.pure | |
| hatch run coverage report | |
| # TODO: | |
| # merge into regular CI once hatch has support for creating environments on | |
| # the free-threaded build: https://github.com/pypa/hatch/issues/1931 | |
| free-threaded-tests: | |
| name: "test (${{ matrix.os }}, 3.13t)" | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-latest, ubuntu-latest, windows-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| # TODO: update to tagged release when there is one | |
| - uses: actions/setup-python@9e62be81b28222addecf85e47571213eb7680449 | |
| with: | |
| cache: pip | |
| cache-dependency-path: "pyproject.toml" | |
| python-version: '3.13t' | |
| - name: Build LibCST | |
| run: | | |
| pip install setuptools setuptools-scm setuptools-rust wheel | |
| pip install 'scikit-build-core;platform_system=="Windows"' | |
| pip install git+https://github.com/hynek/argon2-cffi-bindings@refs/pull/70/merge | |
| pip install -e ".[dev]" --no-build-isolation | |
| - name: Native Parser Tests | |
| # TODO: remove when native modules declare free-threaded support | |
| env: | |
| PYTHON_GIL: '0' | |
| run: | | |
| python -m coverage run -m libcst.tests | |
| - name: Pure Parser Tests | |
| env: | |
| COVERAGE_FILE: .coverage.pure | |
| LIBCST_PARSER_TYPE: pure | |
| run: | | |
| python -m coverage run -m libcst.tests | |
| - name: Coverage | |
| run: | | |
| python -m coverage combine .coverage.pure | |
| python -m coverage report | |
| # Run linters | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - uses: actions/setup-python@v5 | |
| with: | |
| cache: pip | |
| cache-dependency-path: "pyproject.toml" | |
| python-version: "3.10" | |
| - name: Install hatch | |
| run: pip install -U hatch | |
| - run: hatch run lint | |
| - run: hatch run fixtures | |
| # Run pyre typechecker | |
| typecheck: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - uses: actions/setup-python@v5 | |
| with: | |
| cache: pip | |
| cache-dependency-path: "pyproject.toml" | |
| python-version: "3.10" | |
| - name: Install hatch | |
| run: pip install -U hatch | |
| - run: hatch run typecheck | |
| # Build the docs | |
| docs: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| persist-credentials: false | |
| - uses: actions/setup-python@v5 | |
| with: | |
| cache: pip | |
| cache-dependency-path: "pyproject.toml" | |
| python-version: "3.10" | |
| - name: Install hatch | |
| run: pip install -U hatch | |
| - uses: ts-graphviz/setup-graphviz@v2 | |
| - run: hatch run docs | |
| - name: Archive Docs | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sphinx-docs | |
| path: docs/build | |
| # Test rust parts | |
| native: | |
| name: Rust unit tests | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| python-version: ["3.10", "3.13t"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| # TODO: update to tagged release when there is one | |
| - uses: actions/setup-python@9e62be81b28222addecf85e47571213eb7680449 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: test | |
| uses: actions-rs/cargo@v1 | |
| with: | |
| command: test | |
| args: --manifest-path=native/Cargo.toml --release | |
| - name: test without python | |
| if: matrix.os == 'ubuntu-latest' | |
| uses: actions-rs/cargo@v1 | |
| with: | |
| command: test | |
| args: --manifest-path=native/Cargo.toml --release --no-default-features | |
| - name: clippy | |
| uses: actions-rs/clippy-check@v1 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| args: --manifest-path=native/Cargo.toml --all-features | |
| - name: compile-benchmarks | |
| uses: actions-rs/cargo@v1 | |
| with: | |
| command: bench | |
| args: --manifest-path=native/Cargo.toml --no-run | |
| rustfmt: | |
| name: Rustfmt | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - run: rustup component add rustfmt | |
| - uses: actions-rs/cargo@v1 | |
| with: | |
| command: fmt | |
| args: --all --manifest-path=native/Cargo.toml -- --check |