Skip to content

Bump GHA versions

Bump GHA versions #538

Workflow file for this run

name: CI
on:
push:
branches: [ main ]
merge_group:
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
crate:
description: Which crate to publish
required: true
type: choice
options:
- graph
- graph_builder
- graph_mate
- all
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
PY_PACKAGE_NAME: "graph_mate"
PYTHON_VERSION: "3.8" # to build abi3 wheels
MATURIN_ARGS: "--features extension-module --manifest-path crates/mate/Cargo.toml --release --out dist"
jobs:
check:
name: Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Run cargo check
run: cargo check --no-default-features
- name: Run cargo check
run: cargo check --all-features
test:
name: Test Suite
strategy:
fail-fast: false
matrix:
rust: [stable, beta]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Run unit tests
run: cargo +${{ matrix.rust }} nextest run --no-default-features
- name: Run unit tests
run: cargo +${{ matrix.rust }} nextest run --all-features
test_careful:
name: Test Suite (cargo careful)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Install cargo-careful
run: cargo install cargo-careful
- name: Run unit tests
run: cargo +nightly careful test --no-default-features
- name: Run unit tests
run: cargo +nightly careful test --features force_fallback_impl
- name: Run unit tests
run: cargo +nightly careful test --all-features
build_python:
name: Build graph-mate with maturin
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- run: pip install maturin
working-directory: crates/mate
- run: maturin build --features extension-module
working-directory: crates/mate
test_python:
name: Run python tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- run: pip install maturin
working-directory: crates/mate
- run: pip install -r requirements/dev.txt
working-directory: crates/mate
- run: maturin build --features extension-module
working-directory: crates/mate
- run: pip install target/wheels/*.whl --force-reinstall
- run: pytest tests
working-directory: crates/mate
fmt:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: rustfmt
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Run cargo fmt
run: cargo fmt --all -- --check
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: clippy
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings
macos-x86_64:
name: Package graph_mate for Mac x86_64
runs-on: macos-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: test_python
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
architecture: x64
- name: Build wheels - x86_64
uses: PyO3/maturin-action@v1
with:
target: x86_64
args: ${{ env.MATURIN_ARGS }} --sdist
- name: Install built wheel - x86_64
run: |
pip install dist/${{ env.PY_PACKAGE_NAME }}-*.whl --force-reinstall
python -c "import ${{ env.PY_PACKAGE_NAME }}"
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
macos-universal:
name: Package graph_mate for Mac Universal
runs-on: macos-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: test_python
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
architecture: x64
- name: Build wheels - universal2
uses: PyO3/maturin-action@v1
with:
target: universal2-apple-darwin
args: ${{ env.MATURIN_ARGS }}
- name: Install built wheel - universal2
run: |
pip install dist/${{ env.PY_PACKAGE_NAME }}-*universal2.whl --force-reinstall
python -c "import ${{ env.PY_PACKAGE_NAME }}"
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
windows:
name: Package graph_mate for Windows
runs-on: windows-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: test_python
strategy:
matrix:
target: [x64, x86]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
architecture: ${{ matrix.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: ${{ env.MATURIN_ARGS }}
- name: Install built wheel
shell: bash
run: |
python -m pip install dist/${{ env.PY_PACKAGE_NAME }}-*.whl --force-reinstall
python -c "import ${{ env.PY_PACKAGE_NAME }}"
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
linux:
name: Package graph_mate for Linux
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
needs: test_python
strategy:
matrix:
target: [x86_64, i686]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
architecture: x64
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
args: ${{ env.MATURIN_ARGS }}
- name: Install built wheel
if: matrix.target == 'x86_64'
run: |
pip install dist/${{ env.PY_PACKAGE_NAME }}-*.whl --force-reinstall
python -c "import ${{ env.PY_PACKAGE_NAME }}"
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
release_crate:
name: Release a Rust crate
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/') && inputs.crate != 'all' && inputs.crate != 'graph_mate'
needs:
- check
- test
- test_careful
- fmt
- clippy
- test_python
- macos-universal
- macos-x86_64
- windows
- linux
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Publish release
if: startsWith(github.ref, 'refs/tags/')
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish -p ${{ inputs.crate }}
release_graph_mate:
name: Release graph_mate
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/') && inputs.crate == 'graph_mate'
needs:
- check
- test
- test_careful
- fmt
- clippy
- test_python
- macos-universal
- macos-x86_64
- windows
- linux
steps:
- uses: actions/download-artifact@v4
with:
name: wheels
- uses: actions/setup-python@v5
- name: Publish to PyPi
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.GRAPH_PYPI_TOKEN }}
run: |
pip install --upgrade twine
twine upload --skip-existing *
release_all:
name: Release all Rust crates
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/') && inputs.crate == 'all'
needs:
- check
- test
- test_careful
- fmt
- clippy
- test_python
- macos-universal
- macos-x86_64
- windows
- linux
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Setup Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Set up Rust cache
uses: Swatinem/rust-cache@v2
- name: Publish release
if: startsWith(github.ref, 'refs/tags/')
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish
# Parts of this Actions file is taken and adapted from Ruff under MIT License:
# https://github.com/charliermarsh/ruff/blob/e00bcd19f51f33a399751d2a7b854d59024473ca/.github/workflows/ruff.yaml
# Their license: https://raw.githubusercontent.com/charliermarsh/ruff/e00bcd19f51f33a399751d2a7b854d59024473ca/LICENSE