name: Tests on: push: branches: master pull_request: branches: master schedule: - cron: "0 12 * * 1" env: CARGO_INCREMENTAL: 0 RUSTFLAGS: "-Dwarnings" jobs: check-doc: name: Docs, deadlinks, minimal dependencies runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@nightly # Needed for -Z minimal-versions and doc_cfg - name: Install precompiled cargo-deadlinks run: | export URL=$(curl -s https://api.github.com/repos/deadlinks/cargo-deadlinks/releases/latest | jq -r '.assets[] | select(.name | contains("cargo-deadlinks-linux")) | .browser_download_url') wget -O /tmp/cargo-deadlinks $URL chmod +x /tmp/cargo-deadlinks mv /tmp/cargo-deadlinks ~/.cargo/bin - uses: Swatinem/rust-cache@v2 - name: Generate Docs env: RUSTDOCFLAGS: --cfg docsrs run: cargo deadlinks -- --features=custom,std - run: | cargo generate-lockfile -Z minimal-versions cargo test --features=custom,std # TODO: add aarch64-based macOS runner when it's supported by Github Actions main-tests: name: Tier 1 Test runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] toolchain: [nightly, beta, stable, 1.36] # Only Test macOS on stable to reduce macOS CI jobs include: - os: macos-latest toolchain: stable steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo test - run: cargo test --features=std - run: cargo test --features=custom # custom should do nothing here - if: ${{ matrix.toolchain == 'nightly' }} run: cargo test --benches linux-tests: name: Linux Test runs-on: ubuntu-latest strategy: matrix: target: [ x86_64-unknown-linux-musl, i686-unknown-linux-gnu, i686-unknown-linux-musl, ] steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Install multilib # update is needed to fix the 404 error on install, see: # https://github.com/actions/virtual-environments/issues/675 run: | sudo apt-get update sudo apt-get install gcc-multilib - uses: Swatinem/rust-cache@v2 - run: cargo test --target=${{ matrix.target }} --features=std ios-tests: name: iOS Simulator Test runs-on: macos-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: targets: x86_64-apple-ios - name: Download cargo-dinghy run: | VERSION=0.6.2 URL="https://github.com/sonos/dinghy/releases/download/${VERSION}/cargo-dinghy-macos-${VERSION}.tgz" curl -L $URL | tar -xz --strip-components=1 -C ~/.cargo/bin cargo dinghy --version - name: Setup Simulator run: | RUNTIME_ID=$(xcrun simctl list runtimes | grep iOS | cut -d ' ' -f 7 | tail -1) SIM_ID=$(xcrun simctl create My-iphone7 com.apple.CoreSimulator.SimDeviceType.iPhone-7 $RUNTIME_ID) xcrun simctl boot $SIM_ID echo "device=$SIM_ID" >> $GITHUB_ENV - uses: Swatinem/rust-cache@v2 - name: Run tests run: cargo dinghy -d ${{ env.device }} test windows-tests: name: Windows Test runs-on: windows-latest strategy: matrix: toolchain: [ stable-x86_64-gnu, stable-i686-gnu, stable-i686-msvc, ] steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.toolchain }} - uses: Swatinem/rust-cache@v2 - run: cargo test --features=std cross-tests: name: Cross Test runs-on: ubuntu-latest strategy: matrix: target: [ aarch64-unknown-linux-gnu, aarch64-linux-android, mips-unknown-linux-gnu, wasm32-unknown-emscripten, ] steps: - uses: actions/checkout@v3 - name: Install precompiled cross run: | export URL=$(curl -s https://api.github.com/repos/cross-rs/cross/releases/latest | jq -r '.assets[] | select(.name | contains("x86_64-unknown-linux-gnu.tar.gz")) | .browser_download_url') wget -O /tmp/binaries.tar.gz $URL tar -C /tmp -xzf /tmp/binaries.tar.gz mv /tmp/cross ~/.cargo/bin - uses: Swatinem/rust-cache@v2 - name: Test run: cross test --no-fail-fast --target=${{ matrix.target }} --features=std macos-link: name: macOS ARM64 Build/Link runs-on: macos-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@nightly with: targets: aarch64-apple-darwin, aarch64-apple-ios components: rust-src - uses: Swatinem/rust-cache@v2 - run: cargo test --no-run --target=aarch64-apple-darwin --features=std - run: cargo test --no-run --target=aarch64-apple-ios --features=std - run: cargo test --no-run --target=aarch64-apple-watchos-sim -Zbuild-std --features=std cross-link: name: Cross Build/Link runs-on: ubuntu-latest strategy: matrix: target: [ sparcv9-sun-solaris, x86_64-unknown-illumos, x86_64-unknown-freebsd, x86_64-unknown-netbsd, ] steps: - uses: actions/checkout@v3 - name: Install precompiled cross run: | export URL=$(curl -s https://api.github.com/repos/cross-rs/cross/releases/latest | jq -r '.assets[] | select(.name | contains("x86_64-unknown-linux-gnu.tar.gz")) | .browser_download_url') wget -O /tmp/binaries.tar.gz $URL tar -C /tmp -xzf /tmp/binaries.tar.gz mv /tmp/cross ~/.cargo/bin - uses: Swatinem/rust-cache@v2 - name: Build Tests run: cross test --no-run --target=${{ matrix.target }} --features=std web-tests: name: Web Test strategy: fail-fast: false matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-musl - os: windows-latest target: x86_64-pc-windows-msvc # Reenable when Safari tests start working # - os: macos-12 # target: x86_64-apple-darwin runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable - run: choco install wget if: matrix.os == 'windows-latest' - name: Install precompiled wasm-pack shell: bash run: | VERSION=$(wget -nv -O - https://api.github.com/repos/rustwasm/wasm-pack/releases/latest | jq -r '.tag_name') URL=https://github.com/rustwasm/wasm-pack/releases/download/${VERSION}/wasm-pack-${VERSION}-${{ matrix.target }}.tar.gz wget -O - $URL | tar -xz --strip-components=1 -C ~/.cargo/bin wasm-pack --version - uses: Swatinem/rust-cache@v2 - name: Test (Node) run: wasm-pack test --node --features=js - name: Test (Firefox) run: wasm-pack test --headless --firefox --features=js,test-in-browser - name: Test (Chrome) run: wasm-pack test --headless --chrome --features=js,test-in-browser - name: Test (Edge) if: matrix.os == 'windows-latest' run: wasm-pack test --headless --chrome --chromedriver $Env:EDGEWEBDRIVER\msedgedriver.exe --features=js,test-in-browser # Safari tests are broken: https://github.com/rustwasm/wasm-bindgen/issues/3004 # - name: Test (Safari) # if: matrix.os == 'macos-12' # run: wasm-pack test --headless --safari --features=js,test-in-browser - name: Test (custom getrandom) run: wasm-pack test --node --features=custom wasm64-tests: name: wasm64 Build/Link runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@nightly # Need to build libstd with: components: rust-src - uses: Swatinem/rust-cache@v2 - name: Build and Link tests (build-std) # This target is Tier 3, so we have to build libstd ourselves. # We currently cannot run these tests because wasm-bindgen-test-runner # does not yet support memory64. run: cargo test --no-run -Z build-std=std,panic_abort --target=wasm64-unknown-unknown --features=js wasi-tests: name: WASI Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: targets: wasm32-wasi - name: Install precompiled wasmtime run: | export URL=$(curl -s https://api.github.com/repos/bytecodealliance/wasmtime/releases/latest | jq -r '.assets[] | select(.name | contains("x86_64-linux.tar.xz")) | .browser_download_url') wget -O /tmp/binaries.tar.xz $URL tar -C /tmp -xf /tmp/binaries.tar.xz --strip-components=1 mv /tmp/wasmtime ~/.cargo/bin - uses: Swatinem/rust-cache@v2 - run: cargo test --target wasm32-wasi build-tier2: name: Tier 2 Build runs-on: ubuntu-latest strategy: matrix: target: [ x86_64-fuchsia, x86_64-unknown-redox, x86_64-fortanix-unknown-sgx, ] steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - uses: Swatinem/rust-cache@v2 - name: Build run: cargo build --target=${{ matrix.target }} --features=std build-tier3: name: Tier 3 Build runs-on: ubuntu-latest strategy: matrix: # Supported tier 3 targets without libstd support target: [ x86_64-unknown-hermit, x86_64-wrs-vxworks, aarch64-kmc-solid_asp3, armv6k-nintendo-3ds, riscv32imc-esp-espidf, # `std` support still in progress. Can be moved up with the other # apple targets after https://github.com/rust-lang/rust/pull/103503 aarch64-apple-tvos, ] include: # Supported tier 3 targets without libstd support - target: x86_64-unknown-openbsd features: ["std"] - target: x86_64-unknown-dragonfly features: ["std"] - target: x86_64-unknown-haiku features: ["std"] # Unsupported tier 3 targets to test the rdrand feature - target: x86_64-unknown-uefi features: ["rdrand"] - target: x86_64-unknown-l4re-uclibc features: ["rdrand"] steps: - uses: actions/checkout@v3 - uses: dtolnay/rust-toolchain@nightly # Required to build libcore with: components: rust-src - uses: Swatinem/rust-cache@v2 - run: cargo build -Z build-std=${{ contains(matrix.features, 'std') && 'std' || 'core'}} --target=${{ matrix.target }} --features="${{ join(matrix.features, ',') }}" clippy-fmt: name: Clippy + rustfmt runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - uses: Swatinem/rust-cache@v2 - name: clippy run: cargo clippy --all --features=custom,std - name: fmt run: cargo fmt --all -- --check