name: CI on: push: branches: ['main', '0.8.x'] pull_request: merge_group: schedule: - cron: "21 3 * * 5" jobs: test-freebsd: # see https://github.com/actions/runner/issues/385 # use https://github.com/vmactions/freebsd-vm for now name: test on freebsd runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: test on freebsd uses: vmactions/freebsd-vm@v1 with: usesh: true mem: 4096 copyback: false prepare: | pkg install -y curl curl https://sh.rustup.rs -sSf --output rustup.sh sh rustup.sh -y --profile minimal --default-toolchain stable echo "~~~~ rustc --version ~~~~" $HOME/.cargo/bin/rustc --version echo "~~~~ freebsd-version ~~~~" freebsd-version run: $HOME/.cargo/bin/cargo build --all-targets && $HOME/.cargo/bin/cargo test && $HOME/.cargo/bin/cargo test --manifest-path fuzz/Cargo.toml test: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] rust: [stable, beta] exclude: - os: macos-latest rust: beta - os: windows-latest rust: beta runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust }} - uses: Swatinem/rust-cache@v2 - run: cargo build --all-targets - run: cargo test - run: cargo test --manifest-path fuzz/Cargo.toml if: ${{ matrix.rust }} == "stable" test-aws-lc-rs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 # Prevent feature unification from selecting *ring* as the crypto provider - run: RUST_BACKTRACE=1 cargo test --manifest-path quinn-proto/Cargo.toml --no-default-features --features rustls-aws-lc-rs - run: RUST_BACKTRACE=1 cargo test --manifest-path quinn/Cargo.toml --no-default-features --features rustls-aws-lc-rs,runtime-tokio msrv: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.70.0 - uses: Swatinem/rust-cache@v2 - run: cargo check --lib --all-features -p quinn-udp -p quinn-proto -p quinn lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - uses: Swatinem/rust-cache@v2 - run: cargo fmt --all -- --check - run: cargo check --manifest-path quinn/Cargo.toml --all-targets --no-default-features - run: cargo clippy --all-targets -- -D warnings - uses: dtolnay/rust-toolchain@stable with: components: clippy - name: doc run: cargo doc --no-deps --document-private-items env: RUSTDOCFLAGS: -Dwarnings - name: lint fuzz run: | cd fuzz cargo clippy -- -D warnings audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: EmbarkStudios/cargo-deny-action@v2 test-android: runs-on: ubuntu-latest strategy: matrix: include: - target: x86_64-linux-android emulator-arch: x86_64 # Note that x86_64 image is only available for API 21+. See # https://github.com/ReactiveCircus/android-emulator-runner?tab=readme-ov-file#configurations. api-level: 26 - target: i686-linux-android emulator-arch: x86 api-level: 26 steps: - name: Checkout code uses: actions/checkout@v4 - name: Install JDK uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: '21' - name: Install Android SDK uses: android-actions/setup-android@v3 - name: Install Android NDK run: sdkmanager --install "ndk;25.2.9519653" - name: Install Rust uses: dtolnay/rust-toolchain@stable with: toolchain: stable target: ${{ matrix.target }} - uses: Swatinem/rust-cache@v2 - name: Install cargo-ndk run: cargo install cargo-ndk - name: Build unit tests for Android run: cargo ndk -t ${{ matrix.target }} test --no-run - name: Enable KVM group perms 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: Set up Android Emulator and run tests env: TARGET: ${{ matrix.target }} uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} arch: ${{ matrix.emulator-arch }} script: .github/workflows/rust-android-run-tests-on-emulator.sh features: strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} env: RUSTFLAGS: -Dwarnings steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - uses: taiki-e/install-action@cargo-hack - run: cargo hack check --feature-powerset --optional-deps --no-dev-deps --ignore-unknown-features --ignore-private --group-features runtime-async-std,async-io,async-std --group-features runtime-smol,async-io,smol