Skip to content

Web optimizations

Web optimizations #330

Workflow file for this run

# This CI config checks that getrandom's backend implementation
# do not contain potential panics.
#
# It is unclear how to implement a no-panic check for esp_idf, fuchsia,
# vxworks, hermit, and solid backends, so we do not check them here,
# but they still should be panic-free. We do not check wasm_js backend
# since glue code generated by wasm-bindgen contains potential panics,
# so resulting WASM files inevitably contain potential panics for any
# code which non-trivially interacts with the JS enviroment.
name: No panic
on:
push:
branches: master
pull_request:
branches: master
permissions:
contents: read
defaults:
run:
working-directory: nopanic_check
env:
RUSTFLAGS: "-Dwarnings"
jobs:
linux:
name: Linux
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: wasm32-wasip1, wasm32-wasip2
- uses: Swatinem/rust-cache@v2
- name: Build (linux_android_with_fallback.rs)
run: cargo build --release
- name: Check (linux_android_with_fallback.rs)
run: (exit $( grep -c panic target/release/libgetrandom_wrapper.so ))
- name: Build (linux_android.rs)
env:
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="linux_getrandom"
run: cargo build --release
- name: Check (linux_android.rs)
run: (exit $( grep -c panic target/release/libgetrandom_wrapper.so ))
- name: Build (linux_rustix.rs)
env:
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="linux_rustix"
run: cargo build --release
- name: Check (linux_rustix.rs)
run: (exit $( grep -c panic target/release/libgetrandom_wrapper.so ))
- name: Build (rdrand.rs)
env:
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="rdrand"
run: cargo build --release
- name: Check (rdrand.rs)
run: (exit $( grep -c panic target/release/libgetrandom_wrapper.so ))
- name: Build (custom.rs)
env:
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="custom"
run: cargo build --release
- name: Check (custom.rs)
run: (exit $( grep -c panic target/release/libgetrandom_wrapper.so ))
- name: Build (wasi.rs, preview 1)
run: cargo build --release --target wasm32-wasip1
- name: Check (wasi.rs, preview 1)
run: (exit $( grep -c panic target/wasm32-wasip1/release/getrandom_wrapper.wasm ))
- name: Build (wasi.rs, preview 2)
run: cargo build --release --target wasm32-wasip2
- name: Check (wasi.rs, preview 2)
run: (exit $( grep -c panic target/wasm32-wasip2/release/getrandom_wrapper.wasm ))
cross:
name: Cross
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
components: rust-src
targets: aarch64-unknown-linux-gnu,x86_64-unknown-netbsd,x86_64-unknown-freebsd,x86_64-pc-solaris
- uses: Swatinem/rust-cache@v2
# TODO: use pre-compiled cross after a new (post-0.2.5) release
- name: Install cross
env:
# Allow compiler warnings during cross installation
RUSTFLAGS:
run: cargo install cross --force --git https://github.com/cross-rs/cross
- name: Build (rndr.rs)
env:
RUSTFLAGS: -Dwarnings --cfg getrandom_backend="rndr"
run: cross build --release --target=aarch64-unknown-linux-gnu
- name: Check (rndr.rs)
run: (exit $( grep -c panic target/aarch64-unknown-linux-gnu/release/libgetrandom_wrapper.so ))
- name: Build (getrandom.rs)
run: cross build --release --target=x86_64-unknown-freebsd
- name: Check (getrandom.rs)
run: (exit $( grep -c panic target/x86_64-unknown-freebsd/release/libgetrandom_wrapper.so ))
- name: Build (netbsd.rs)
run: cross build --release --target=x86_64-unknown-netbsd
- name: Check (netbsd.rs)
run: (exit $( grep -c panic target/x86_64-unknown-netbsd/release/libgetrandom_wrapper.so ))
- name: Build (solaris.rs)
run: cross build --release --target=x86_64-pc-solaris
- name: Check (solaris.rs)
run: (exit $( grep -c panic target/x86_64-pc-solaris/release/libgetrandom_wrapper.so ))
macos:
name: macOS
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
targets: aarch64-apple-ios
- uses: Swatinem/rust-cache@v2
# We do not need the grep check since linker fails
# if `panic_nonexistent` can not be eliminated
- name: Build (getentropy.rs)
run: cargo build --release --target=aarch64-apple-darwin
- name: Build (apple-other.rs)
run: cargo build --release --target=aarch64-apple-ios
windows:
name: Windows
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2024-10-14
components: rust-src
- run: cargo build --release
- run: cargo build --release --target=x86_64-win7-windows-msvc -Zbuild-std="std,panic_abort"