Single-source versioning: derive Python version from Cargo.toml (#255) #502
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: | |
| - master | |
| pull_request: | |
| branches: | |
| - master | |
| workflow_dispatch: {} | |
| env: | |
| COLUMNS: 150 | |
| jobs: | |
| test: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - windows-latest | |
| - macos-latest | |
| python-version: | |
| - '3.10' | |
| - '3.11' | |
| - '3.12' | |
| - '3.13' | |
| - '3.14' | |
| runs-on: "${{ matrix.os }}" | |
| continue-on-error: false | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache Rust | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v2 | |
| - name: Sync project environment | |
| run: uv sync --all-groups --python "${{ matrix.python-version }}" | |
| - name: test | |
| run: uv run pytest | |
| - name: upload coverage to codecov | |
| uses: codecov/codecov-action@v3 | |
| with: | |
| # TODO(tonybaloney): move token to `secrets.CODECOV_TOKEN` | |
| token: 48f9ff3a-6358-4607-aa5d-9cb7cada539c | |
| files: .tests-reports/coverage.xml | |
| fail_ci_if_error: true | |
| ruff: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: astral-sh/setup-uv@v2 | |
| - run: uv tool run ruff check . | |
| # Rust linting | |
| clippy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - name: Cache Rust | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Run clippy | |
| run: cargo clippy --manifest-path backend/Cargo.toml -- -D warnings | |
| rustfmt: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --manifest-path backend/Cargo.toml --check | |
| # Build validation — ensures wheels and sdist build correctly | |
| build-sdist: | |
| name: build sdist | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.13" | |
| - uses: PyO3/maturin-action@v1 | |
| with: | |
| command: sdist | |
| args: --out dist | |
| rust-toolchain: stable | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: pypi_files_sdist | |
| path: dist | |
| build: | |
| name: build on ${{ matrix.os }} (${{ matrix.target }}) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Linux x86_64 | |
| - os: linux | |
| target: x86_64 | |
| runs-on: ubuntu-latest | |
| manylinux: auto | |
| # Linux aarch64 | |
| - os: linux | |
| target: aarch64 | |
| runs-on: ubuntu-latest | |
| manylinux: auto | |
| # macOS aarch64 (Apple Silicon) | |
| - os: macos | |
| target: aarch64 | |
| runs-on: macos-latest | |
| # Windows x86_64 | |
| - os: windows | |
| target: x86_64 | |
| runs-on: windows-latest | |
| # Windows aarch64 | |
| - os: windows | |
| target: aarch64 | |
| python-architecture: arm64 | |
| runs-on: windows-11-arm | |
| runs-on: ${{ matrix.runs-on }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.13" | |
| architecture: ${{ matrix.python-architecture || 'x64' }} | |
| - name: Install twine | |
| run: pip install -U twine | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.target }} | |
| manylinux: ${{ matrix.manylinux || 'auto' }} | |
| args: --release --out dist --interpreter 3.10 3.11 3.12 3.13 3.14 | |
| rust-toolchain: stable | |
| docker-options: -e CI | |
| before-script-linux: | | |
| if command -v yum &> /dev/null; then | |
| yum install -y openssl-devel cmake3 perl-IPC-Cmd perl-Time-Piece | |
| which cmake3 && ln -sf $(which cmake3) /usr/local/bin/cmake || true | |
| elif command -v apk &> /dev/null; then | |
| apk add --no-cache openssl-dev cmake make perl | |
| elif command -v apt-get &> /dev/null; then | |
| apt-get update && apt-get install -y libssl-dev cmake perl | |
| fi | |
| - name: List dist files | |
| run: ls -lh dist/ | |
| shell: bash | |
| - name: Check wheels | |
| run: twine check --strict dist/* | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: pypi_files_${{ matrix.os }}_${{ matrix.target }} | |
| path: dist |