Use configuration flags to switch between backends (#504) #1285
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: | |
push: | |
branches: master | |
pull_request: | |
branches: master | |
schedule: | |
- cron: "0 12 * * 1" | |
permissions: | |
contents: read | |
env: | |
CARGO_INCREMENTAL: 0 | |
RUSTFLAGS: "-Dwarnings" | |
jobs: | |
main-tests: | |
name: Tier 1 Test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-22.04, windows-2022] | |
toolchain: [nightly, beta, stable, "1.60"] | |
# Only Test macOS on stable to reduce macOS CI jobs | |
include: | |
# x86_64-apple-darwin. | |
- os: macos-12 | |
toolchain: stable | |
# aarch64-apple-darwin. | |
- os: macos-14 | |
toolchain: stable | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.toolchain }} | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo test | |
# Make sure enabling the std feature doesn't break anything | |
- run: cargo test --features=std | |
- if: ${{ matrix.toolchain == 'nightly' }} | |
run: cargo test --benches | |
linux-tests: | |
name: Linux Test | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
target: [x86_64-unknown-linux-musl, i686-unknown-linux-musl] | |
include: | |
- target: i686-unknown-linux-gnu | |
packages: libc6-dev-i386 lib32gcc-11-dev | |
- target: x86_64-unknown-linux-gnux32 | |
packages: libc6-dev-x32 libx32gcc-11-dev | |
# TODO: Find a Linux image/runner with CONFIG_X86_X32_ABI set | |
cargo_test_opts: --no-run | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install libc and libgcc | |
if: matrix.packages | |
run: | | |
sudo apt-get update | |
sudo apt-get install --no-install-recommends ${{ matrix.packages }} | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo test ${{ matrix.cargo_test_opts }} --target=${{ matrix.target }} --features=std | |
- env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="linux_getrandom" | |
run: cargo test ${{ matrix.cargo_test_opts }} --target=${{ matrix.target }} --features=std | |
- env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="rdrand" | |
run: cargo test --features=std | |
ios-tests: | |
name: iOS Simulator Test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [macos-12, macos-14] | |
# Only test on stable to reduce macOS CI jobs | |
toolchain: [stable] | |
include: | |
# The Aarch64 device simulator doesn't seem to work on an x86-64 host | |
# and the x86_64 device simulator doesn't seem to work on an Aarch64 | |
# host, at least within GitHub Actions. | |
- os: macos-12 | |
target: x86_64-apple-ios | |
ios_platform: auto-ios-x86_64 | |
- os: macos-14 | |
target: aarch64-apple-ios-sim | |
ios_platform: auto-ios-aarch64-sim | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install precompiled cargo-dinghy | |
run: | | |
VERSION=0.7.2 | |
URL="https://github.com/sonos/dinghy/releases/download/${VERSION}/cargo-dinghy-macos-${VERSION}.tgz" | |
wget -O - $URL | tar -xz --strip-components=1 -C ~/.cargo/bin | |
- name: Check cargo-dinghy version. | |
run: cargo dinghy --version | |
- name: Setup Simulator | |
# Use the first installed iOS runtime and the first (i.e. oldest) supported iPhone device. | |
run: | | |
RUNTIME=$(xcrun simctl list runtimes --json | jq '.runtimes | map(select(.name | contains("iOS"))) | .[0]') | |
RUNTIME_ID=$(echo $RUNTIME | jq -r '.identifier') | |
echo "Using runtime:" $RUNTIME_ID | |
DEVICE_ID=$(echo $RUNTIME | jq -r '.supportedDeviceTypes | map(select(.productFamily == "iPhone")) | .[0].identifier') | |
echo "Using device:" $DEVICE_ID | |
SIM_ID=$(xcrun simctl create Test-iPhone $DEVICE_ID $RUNTIME_ID) | |
echo "Created simulator:" $SIM_ID | |
xcrun simctl boot $SIM_ID | |
echo "device=$SIM_ID" >> $GITHUB_ENV | |
- uses: Swatinem/rust-cache@v2 | |
- name: Run tests | |
run: cargo dinghy -p ${{ matrix.ios_platform }} -d ${{ env.device }} test | |
windows-tests: | |
name: Windows Test | |
runs-on: windows-2022 | |
strategy: | |
matrix: | |
toolchain: [ | |
stable-x86_64-gnu, | |
stable-i686-gnu, | |
stable-i686-msvc, | |
] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.toolchain }} | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo test --features=std | |
windows7: | |
name: Test Windows 7 impl on Windows 10 | |
runs-on: windows-2022 | |
steps: | |
- uses: actions/checkout@v4 | |
# Win7 targets are Tier3, so pin a nightly where libstd builds. | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: nightly-2024-05-20 | |
components: rust-src | |
- uses: Swatinem/rust-cache@v2 | |
- run: cargo test --target=x86_64-win7-windows-msvc -Z build-std --features=std | |
- run: cargo test --target=i686-win7-windows-msvc -Z build-std --features=std | |
cross-tests: | |
name: Cross Test | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
target: [ | |
aarch64-unknown-linux-gnu, | |
# TODO: add Android tests back when the cross cuts a new release. | |
# See: https://github.com/cross-rs/cross/issues/1222 | |
# aarch64-linux-android, | |
powerpc-unknown-linux-gnu, | |
wasm32-unknown-emscripten, | |
] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install precompiled cross | |
run: | | |
VERSION=v0.2.5 | |
URL=https://github.com/cross-rs/cross/releases/download/${VERSION}/cross-x86_64-unknown-linux-gnu.tar.gz | |
wget -O - $URL | tar -xz -C ~/.cargo/bin | |
cross --version | |
- name: Test | |
run: cross test --no-fail-fast --target=${{ matrix.target }} --features=std | |
macos-link: | |
name: macOS ARM64 Build/Link | |
# visionOS requires Xcode 15.2+, which is only available on the arm64 runners. | |
runs-on: macos-14 | |
steps: | |
- uses: actions/checkout@v4 | |
- 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-tvos -Zbuild-std --features=std | |
- run: cargo test --no-run --target=aarch64-apple-watchos -Zbuild-std --features=std | |
# visionOS requires Xcode 15.2+, GitHub Actions defaults to an older version. | |
- run: sudo xcode-select -switch /Applications/Xcode_15.2.app | |
- run: cargo test --no-run --target=aarch64-apple-visionos -Zbuild-std --features=std | |
cross-link: | |
name: Cross Build/Link | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
target: [ | |
sparcv9-sun-solaris, | |
x86_64-unknown-illumos, | |
x86_64-unknown-freebsd, | |
x86_64-unknown-netbsd, | |
] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install precompiled cross | |
run: | | |
VERSION=v0.2.5 | |
URL=https://github.com/cross-rs/cross/releases/download/${VERSION}/cross-x86_64-unknown-linux-gnu.tar.gz | |
wget -O - $URL | tar -xz -C ~/.cargo/bin | |
cross --version | |
- 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-22.04 | |
host: x86_64-unknown-linux-musl | |
- os: macos-12 | |
host: x86_64-apple-darwin | |
# We get spurious failures on Windows, see: | |
# https://github.com/rust-random/getrandom/issues/400 | |
# - os: windows-2022 | |
# host: x86_64-pc-windows-msvc | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- run: choco install wget | |
if: runner.os == 'Windows' | |
- name: Install precompiled wasm-pack | |
shell: bash | |
run: | | |
VERSION=v0.12.1 | |
URL=https://github.com/rustwasm/wasm-pack/releases/download/${VERSION}/wasm-pack-${VERSION}-${{ matrix.host }}.tar.gz | |
wget -O - $URL | tar -xz --strip-components=1 -C ~/.cargo/bin | |
wasm-pack --version | |
- uses: Swatinem/rust-cache@v2 | |
- name: Test (Node) | |
env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="wasm_js" | |
run: wasm-pack test --node | |
- name: Test (Firefox) | |
env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="wasm_js" --cfg getrandom_browser_test | |
run: wasm-pack test --headless --firefox | |
- name: Test (Chrome) | |
env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="wasm_js" --cfg getrandom_browser_test | |
run: wasm-pack test --headless --chrome | |
- name: Test (Edge) | |
if: runner.os == 'Windows' | |
env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="wasm_js" --cfg getrandom_browser_test | |
run: wasm-pack test --headless --chrome --chromedriver $Env:EDGEWEBDRIVER\msedgedriver.exe | |
- name: Test (Safari) | |
if: runner.os == 'macOS' | |
env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="wasm_js" --cfg getrandom_browser_test | |
run: wasm-pack test --headless --safari | |
wasm64-tests: | |
name: wasm64 Build/Link | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- 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) | |
env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="wasm_js" --cfg getrandom_browser_test | |
# 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 | |
wasi-tests: | |
name: WASI Tests | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: nightly # TODO: Use stable after 1.82 is released as stable | |
targets: wasm32-wasip1,wasm32-wasip2 | |
- name: Install Wasmtime | |
run: | | |
VERSION=v24.0.0 | |
URL=https://github.com/bytecodealliance/wasmtime/releases/download/${VERSION}/wasmtime-${VERSION}-x86_64-linux.tar.xz | |
wget -O - $URL | tar -xJ --strip-components=1 -C ~/.cargo/bin | |
wasmtime --version | |
- uses: Swatinem/rust-cache@v2 | |
- name: WASI 0.1 Test | |
run: cargo test --target wasm32-wasip1 | |
- name: WASI 0.2 Test | |
run: cargo test --target wasm32-wasip2 | |
build-tier2: | |
name: Tier 2 Build | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
target: [ | |
x86_64-unknown-fuchsia, | |
x86_64-unknown-redox, | |
x86_64-fortanix-unknown-sgx, | |
] | |
steps: | |
- uses: actions/checkout@v4 | |
- 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-22.04 | |
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, | |
armv7-sony-vita-newlibeabihf, | |
aarch64-unknown-nto-qnx710, | |
] | |
# Supported tier 3 targets with libstd support | |
include: | |
- target: aarch64-unknown-nto-qnx710 | |
features: ["std"] | |
- target: x86_64-unknown-openbsd | |
features: ["std"] | |
- target: x86_64-unknown-dragonfly | |
features: ["std"] | |
- target: x86_64-unknown-haiku | |
features: ["std"] | |
- target: i686-unknown-hurd-gnu | |
features: ["std"] | |
steps: | |
- uses: actions/checkout@v4 | |
- 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, ',') }}" | |
build-rdrand: | |
name: RDRAND Build | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
target: [ | |
x86_64-unknown-uefi, | |
x86_64-unknown-l4re-uclibc, | |
] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly # Required to build libcore | |
with: | |
components: rust-src | |
- uses: Swatinem/rust-cache@v2 | |
- env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="rdrand" | |
run: cargo build -Z build-std=core --target=${{ matrix.target }} | |
build-esp-idf: | |
name: ESP-IDF Build | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly # Required to build libcore | |
with: | |
components: rust-src | |
- uses: Swatinem/rust-cache@v2 | |
- env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="esp_idf" | |
run: cargo build -Z build-std=core --target=riscv32imc-esp-espidf | |
build-no-atomics: | |
name: No Atomics Build | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: riscv32i-unknown-none-elf | |
- uses: Swatinem/rust-cache@v2 | |
- env: | |
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="custom" | |
run: cargo build --target riscv32i-unknown-none-elf |