name: CI
on:
push:
pull_request:
schedule:
- cron: "17 3 * * *"
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
jobs:
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- run: cargo fmt --all -- --check
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- run: cargo clippy --all-targets --all-features -- -D warnings
test-default:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --locked --lib --tests --examples
- run: cargo test --locked --doc
test-all-features:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --locked --all-features --lib --tests --examples
- run: cargo test --locked --all-features --doc
msrv:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.71"
- run: cargo test --locked --all-features --lib --tests --examples
- run: cargo test --locked --all-features --doc
latest:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
env:
CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: allow
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo update
- run: cargo test --all-features --lib --tests --examples
- run: cargo test --all-features --doc
compile-fail:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.71"
- run: cargo test --test compile_fail --locked
env:
ASYNC_RUNTIME_RUN_UI: "1"
loom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --test loom_models --locked
stats:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --locked --features stats --lib --tests --examples
shutdown-stress:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --locked --test v030_shutdown_stress -- --ignored
mobile-check:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
strategy:
matrix:
include:
- os: ubuntu-latest
target: aarch64-linux-android
- os: macos-latest
target: aarch64-apple-ios
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.71"
targets: ${{ matrix.target }}
- run: cargo check --lib --target ${{ matrix.target }} --locked
android-tests:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.71"
targets: x86_64-linux-android
- name: Configure Android NDK tools
shell: bash
run: |
ndk_root="${ANDROID_NDK_LATEST_HOME:-$ANDROID_NDK_HOME}"
echo "CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=$ndk_root/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang" >> "$GITHUB_ENV"
echo "CARGO_TARGET_X86_64_LINUX_ANDROID_RUNNER=bash .github/scripts/run-android-test.sh" >> "$GITHUB_ENV"
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
| sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run core tests in Android emulator
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 35
arch: x86_64
disable-animations: true
script: >-
cargo test --target x86_64-linux-android --locked
--lib
--test general
--test priority
--test local
--test cross_domain
--test task
--test shutdown
--test async_io
ios-simulator-link:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: "1.71"
targets: aarch64-apple-ios-sim
- name: Build and link tests for iOS Simulator
run: >-
cargo test --lib --tests --target aarch64-apple-ios-sim
--locked --no-run
miri:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- run: cargo miri setup
- run: cargo miri test --lib worker::tests::default_selector_is_exactly_eight_four_one