async-runtime 0.3.0

A priority-aware native async runtime for the smol ecosystem with host-driven local domains
Documentation
name: CI

on:
  push:
  pull_request:

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

  msrv:
    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 --all-targets --all-features --locked
      - run: cargo test --doc --locked

  latest:
    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-targets --all-features
      - run: cargo test --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"

  mobile-check:
    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:
    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:
    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:
    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