name: CI on: push: branches: - main pull_request: permissions: {} 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" - "3.13t" - "3.14" - "3.14t" steps: - name: Install uv uses: astral-sh/setup-uv@v7 with: version: "0.7.13" python-version: ${{ matrix.python-version }} - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false - uses: dtolnay/rust-toolchain@stable - name: Build LibCST run: uv sync --locked --dev - name: Native Parser Tests run: uv run poe test - name: Coverage run: uv run coverage report # Run linters lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@v7 with: version: "0.7.13" python-version: "3.10" - run: uv run poe lint - run: uv run poe fixtures # Run pyre typechecker typecheck: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@v7 with: version: "0.7.13" python-version: "3.10" - run: uv run poe typecheck # Build the docs docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@v7 with: version: "0.7.13" python-version: "3.10" - uses: ts-graphviz/setup-graphviz@v2 - run: uv run --group docs poe 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 - uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: test run: cargo test --manifest-path=native/Cargo.toml --release - name: test without python if: matrix.os == 'ubuntu-latest' run: cargo test --manifest-path=native/Cargo.toml --release --no-default-features - name: clippy run: cargo clippy --manifest-path=native/Cargo.toml --all-targets --all-features - name: compile-benchmarks run: cargo bench --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 - name: format run: cargo fmt --all --manifest-path=native/Cargo.toml -- --check build: # only trigger here for pull requests - regular pushes are handled in pypi_upload if: ${{ github.event_name == 'pull_request' }} uses: Instagram/LibCST/.github/workflows/build.yml@main