CI #493
Workflow file for this run
This file contains 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 ] | |
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@v3 | |
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@v3 | |
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@v3 | |
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@v3 | |
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@v4 | |
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@v3 | |
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@v4 | |
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@v3 | |
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@v3 | |
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@v3 | |
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@v4 | |
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 | |
maturin-version: "v0.14.0-beta.7" | |
- 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@v2 | |
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@v3 | |
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@v4 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
architecture: x64 | |
- name: Build wheels - universal2 | |
uses: PyO3/maturin-action@v1 | |
with: | |
args: ${{ env.MATURIN_ARGS }} --universal2 | |
maturin-version: "v0.14.0-beta.7" | |
- 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@v2 | |
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@v3 | |
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@v4 | |
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 }} | |
maturin-version: "v0.14.0-beta.7" | |
- 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@v2 | |
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@v3 | |
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@v4 | |
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 }} | |
maturin-version: "v0.14.0-beta.7" | |
- 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@v2 | |
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@v3 | |
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@v2 | |
with: | |
name: wheels | |
- uses: actions/setup-python@v4 | |
- 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@v3 | |
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 |