name: CI
on:
pull_request:
push:
branches:
- main
env:
CARGO_TERM_COLOR: always
RUST_LOG: debug
jobs:
lint:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: stable
components: clippy, rustfmt
- uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1
- run: cargo fmt --check
- run: cargo clippy --all-targets -F __bench -- -Dwarnings
- name: Install cargo-machete
uses: taiki-e/install-action@d6912b47771be2c443ec90dbb3d28e023987e782
with:
tool: cargo-machete@0.8.0 - name: Check for unused dependencies
run: cargo machete
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: stable
- uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1
- run: cargo doc --no-deps
check-msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Install taplo for extracting rust-version
uses: taiki-e/install-action@d6912b47771be2c443ec90dbb3d28e023987e782
with:
tool: taplo@0.10.0
- run: |
rust_version=$(taplo get -f Cargo.toml 'package.rust-version')
prev_rust_version=$(echo "$rust_version" | awk -F'.' -v OFS='.' '{ $2 = $2 - 1; print }')
echo "rust-version=$rust_version" >> $GITHUB_OUTPUT
echo "prev-rust-version=$prev_rust_version" >> $GITHUB_OUTPUT
id: get-rust-version
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: ${{ steps.get-rust-version.outputs.rust-version }}
- run: cargo build
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: ${{ steps.get-rust-version.outputs.prev-rust-version }}
- run: sed --in-place '/^rust-version/d' Cargo.toml
- run: cargo build
id: build-prev-version
continue-on-error: true
- run: |
if [[ "${{ steps.build-prev-version }}" == "success" ]]; then
echo "::error::Build with previous of MSRV succeeded unexpectedly. Change rust-version in Cargo.toml"
exit 1
fi
test-lib:
strategy:
matrix:
runner:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.runner }}
timeout-minutes: 15
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: stable
- uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1
- run: cargo test --release
test-examples:
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
matrix:
workspace-member:
- http-multi-server-channels
- http-single-server-channels
- sql-integration
- api-integration
defaults:
run:
working-directory: examples/${{ matrix.workspace-member }}
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: stable
- uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1
with:
key: ${{ matrix.workspace-member }}
- if: ${{ matrix.workspace-member == 'sql-integration' }}
run: docker compose -f docker-compose.yml up -d
- if: ${{ matrix.workspace-member == 'api-integration' }}
run: cargo test --profile debug-release -- --nocapture
- if: ${{ matrix.workspace-member != 'api-integration' }}
run: cargo test --release -- --nocapture
test-wasm-example:
runs-on: ubuntu-latest
timeout-minutes: 15
defaults:
run:
working-directory: examples/wasm-http-channels
steps:
- uses: actions/checkout@v5
- uses: dtolnay/rust-toolchain@e97e2d8cc328f1b50210efc529dca0028893a2d9
with:
toolchain: stable
targets: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@f13886b937689c021905a6b90929199931d60db1
- name: Install wasm-pack
uses: taiki-e/install-action@d6912b47771be2c443ec90dbb3d28e023987e782
with:
tool: wasm-pack@0.13.1 - run: wasm-pack build --target web
working-directory: ./examples/wasm-http-channels
env:
RUSTFLAGS: '--cfg getrandom_backend="wasm_js"'
build-api-integration-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Build examples/api-integration Dockerfile
run: docker build . -f examples/api-integration/Dockerfile --tag 'polytune-api-integration'