See #194 This installs (and caches) the emsdk toolchain at the last version compatible w/ stable rust. It also tests on both asmjs and wasm32, uses node by default, and works around an asm.js bug.
320 lines
10 KiB
YAML
320 lines
10 KiB
YAML
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@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: nightly # Needed for -Z minimal-versions
|
|
override: true
|
|
- 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
|
|
- run: cargo deadlinks -- --features=custom,std
|
|
- run: |
|
|
cargo generate-lockfile -Z minimal-versions
|
|
cargo test --features=custom,std
|
|
|
|
main-tests:
|
|
name: Main tests
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, windows-latest]
|
|
toolchain: [nightly, beta, stable, 1.34]
|
|
# Only Test macOS on stable to reduce macOS CI jobs
|
|
include:
|
|
- os: macos-latest
|
|
toolchain: stable
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: ${{ matrix.toolchain }}
|
|
override: true
|
|
- run: cargo test
|
|
- run: cargo test --features=std
|
|
- run: cargo test --features=custom # custom should do nothing here
|
|
- if: ${{ matrix.toolchain == 'nightly' }}
|
|
run: cargo build --benches
|
|
|
|
linux-tests:
|
|
name: Additional Linux targets
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
target: [
|
|
x86_64-unknown-linux-musl,
|
|
i686-unknown-linux-gnu,
|
|
i686-unknown-linux-musl,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: ${{ matrix.target }}
|
|
toolchain: stable
|
|
- 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
|
|
- run: cargo test --target=${{ matrix.target }} --features=std
|
|
|
|
# We can only Build/Link on these targets for now.
|
|
# TODO: Run the iOS binaries in the simulator
|
|
# TODO: build/run aarch64-apple-darwin binaries on a x86_64 Mac
|
|
apple-tests:
|
|
name: Additional Apple targets
|
|
runs-on: macos-latest
|
|
strategy:
|
|
matrix:
|
|
target: [
|
|
aarch64-apple-ios,
|
|
x86_64-apple-ios,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: ${{ matrix.target }}
|
|
toolchain: stable
|
|
- name: Build Tests
|
|
run: cargo test --no-run --target=${{ matrix.target }} --features=std
|
|
|
|
windows-tests:
|
|
name: Additional Windows targets
|
|
runs-on: windows-latest
|
|
strategy:
|
|
matrix:
|
|
toolchain: [
|
|
stable-x86_64-gnu,
|
|
stable-i686-gnu,
|
|
stable-i686-msvc,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: ${{ matrix.toolchain }}
|
|
override: true
|
|
- 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,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: ${{ matrix.target }}
|
|
toolchain: stable
|
|
- name: Install precompiled cross
|
|
run: |
|
|
export URL=$(curl -s https://api.github.com/repos/rust-embedded/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
|
|
- name: Test
|
|
run: cross test --no-fail-fast --target=${{ matrix.target }} --features=std
|
|
|
|
cross-link:
|
|
name: Cross Build/Link
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
target: [
|
|
x86_64-sun-solaris,
|
|
x86_64-unknown-netbsd,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: ${{ matrix.target }}
|
|
toolchain: stable
|
|
- name: Install precompiled cross
|
|
run: |
|
|
export URL=$(curl -s https://api.github.com/repos/rust-embedded/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
|
|
- name: Build Tests
|
|
run: cross test --no-run --target=${{ matrix.target }} --features=std
|
|
|
|
web-tests:
|
|
name: Web tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: wasm32-unknown-unknown
|
|
toolchain: stable
|
|
- name: Install precompiled wasm-bindgen-test-runner
|
|
run: |
|
|
export VERSION=$(cargo metadata --format-version=1 | jq -r '.packages[] | select ( .name == "wasm-bindgen" ) | .version')
|
|
wget -O /tmp/binaries.tar.gz https://github.com/rustwasm/wasm-bindgen/releases/download/$VERSION/wasm-bindgen-$VERSION-x86_64-unknown-linux-musl.tar.gz
|
|
tar -C /tmp -xzf /tmp/binaries.tar.gz --strip-components=1
|
|
mv /tmp/wasm-bindgen-test-runner ~/.cargo/bin
|
|
- name: Test (Node)
|
|
run: cargo test --target=wasm32-unknown-unknown --features=js
|
|
- name: Test (Firefox)
|
|
env:
|
|
GECKODRIVER: /usr/bin/geckodriver
|
|
run: cargo test --target=wasm32-unknown-unknown --features=js,test-in-browser
|
|
- name: Test (Chrome)
|
|
env:
|
|
CHROMEDRIVER: /usr/bin/chromedriver
|
|
run: cargo test --target=wasm32-unknown-unknown --features=js,test-in-browser
|
|
- name: Build Tests (with custom, without JS)
|
|
run: cargo test --no-run --target=wasm32-unknown-unknown --features=custom
|
|
|
|
wasi-tests:
|
|
name: WASI test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: wasm32-wasi
|
|
toolchain: stable
|
|
- 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
|
|
- run: cargo test --target wasm32-wasi
|
|
|
|
emscripten-tests:
|
|
name: Emscripten tests
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
EMSDK_VERSION: 1.39.20 # Last emsdk compatible with Rust's LLVM 11
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: stable
|
|
- run: rustup target add wasm32-unknown-emscripten
|
|
- run: rustup target add asmjs-unknown-emscripten
|
|
- name: Cache emsdk
|
|
id: cache-emsdk
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ~/emsdk
|
|
key: ${{ runner.os }}-${{ env.EMSDK_VERSION }}-emsdk
|
|
- name: Install emsdk
|
|
if: steps.cache-emsdk.outputs.cache-hit != 'true'
|
|
run: |
|
|
git clone https://github.com/emscripten-core/emsdk.git ~/emsdk
|
|
cd ~/emsdk
|
|
./emsdk install $EMSDK_VERSION
|
|
./emsdk activate $EMSDK_VERSION
|
|
- run: echo "$HOME/emsdk/upstream/emscripten" >> $GITHUB_PATH
|
|
- name: wasm test
|
|
run: cargo test --target=wasm32-unknown-emscripten --features=std
|
|
- name: asm.js test
|
|
run: | # Debug info breaks on asm.js
|
|
RUSTFLAGS="$RUSTFLAGS -C debuginfo=0"
|
|
cargo test --target=asmjs-unknown-emscripten --features=std
|
|
|
|
build:
|
|
name: Build only
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
target: [
|
|
x86_64-unknown-freebsd,
|
|
x86_64-fuchsia,
|
|
x86_64-unknown-redox,
|
|
x86_64-fortanix-unknown-sgx,
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
target: ${{ matrix.target }}
|
|
toolchain: nightly # Required to build libc for Redox
|
|
override: true
|
|
- name: Build
|
|
run: cargo build --target=${{ matrix.target }} --features=std
|
|
|
|
build-std:
|
|
name: Build-only (build-std)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install toolchain
|
|
uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
toolchain: nightly # Required to build libcore
|
|
components: rust-src
|
|
override: true
|
|
- name: UEFI (RDRAND)
|
|
run: cargo build -Z build-std=core --features=rdrand --target=x86_64-unknown-uefi
|
|
- name: Hermit (RDRAND)
|
|
run: cargo build -Z build-std=core --features=rdrand --target=x86_64-unknown-hermit
|
|
- name: L4Re (RDRAND)
|
|
run: cargo build -Z build-std=core --features=rdrand --target=x86_64-unknown-l4re-uclibc
|
|
- name: VxWorks
|
|
run: cargo build -Z build-std=core --target=x86_64-wrs-vxworks
|
|
|
|
clippy-fmt:
|
|
name: Clippy + rustfmt
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v1
|
|
- uses: actions-rs/toolchain@v1
|
|
with:
|
|
profile: minimal
|
|
# https://github.com/rust-lang/rust-clippy/pull/6379 added MSRV
|
|
# support, so we need to use nightly until this is on stable.
|
|
toolchain: nightly
|
|
components: rustfmt, clippy
|
|
override: true
|
|
- name: clippy
|
|
run: cargo clippy --all --features=custom,std
|
|
- name: fmt
|
|
run: cargo fmt --all -- --check
|