Skip to content

Commit fa6f929

Browse files
authored
Improve CI for web targets (#108)
* Simplify CI process for WASM Run WASI tests, and run both stdweb/wasm-bindgen on both node and in browsers These changes also remove the need for a separate tests/wasm_bindgen * Use all pre-built binaries in the CI * Fix Cargo.toml typo Co-Authored-By: Artyom Pavlov <[email protected]> * Fix install location * Debug CI
1 parent ccc4774 commit fa6f929

File tree

8 files changed

+55
-114
lines changed

8 files changed

+55
-114
lines changed

.cargo/config

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[target.wasm32-unknown-unknown]
2+
runner = 'wasm-bindgen-test-runner'
3+
4+
[target.wasm32-wasi]
5+
runner = 'wasmtime'

.travis.yml

+37-20
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,51 @@ matrix:
2929

3030
- name: "WASM via emscripten, stdweb, wasm-bindgen and WASI"
3131
rust: nightly
32+
addons:
33+
firefox: 69.0
34+
chrome: stable
3235
install:
3336
- rustup target add wasm32-unknown-unknown
3437
- rustup target add wasm32-unknown-emscripten
38+
- rustup target add asmjs-unknown-emscripten
3539
- rustup target add wasm32-wasi
36-
- nvm install 9
37-
- ./utils/ci/install_cargo_web.sh
40+
# Get geckodriver
41+
- wget -O geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v0.25.0/geckodriver-v0.25.0-linux64.tar.gz
42+
- tar -xzf geckodriver.tar.gz
43+
# Get chromedirver (we cannot pin chrome version, so don't pin chromedriver version)
44+
- export VERSION=$(wget -q -O - https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
45+
- wget -O chromedriver.zip https://chromedriver.storage.googleapis.com/$VERSION/chromedriver_linux64.zip
46+
- unzip chromedriver.zip
47+
# Get cargo-web
48+
- wget -O cargo-web.gz https://github.com/koute/cargo-web/releases/download/0.6.26/cargo-web-x86_64-unknown-linux-gnu.gz
49+
- gunzip cargo-web.gz
50+
- chmod +x cargo-web
51+
# Get wasmtime
52+
- wget -O wasmtime.tar.xz https://github.com/CraneStation/wasmtime/releases/download/v0.3.0/wasmtime-v0.3.0-x86_64-linux.tar.xz
53+
- tar -xf wasmtime.tar.xz --strip-components=1
54+
# Get wasm-bindgen-test-runner
55+
- wget -O wasm-bindgen.tar.gz https://github.com/rustwasm/wasm-bindgen/releases/download/0.2.50/wasm-bindgen-0.2.50-x86_64-unknown-linux-musl.tar.gz
56+
- tar -xzf wasm-bindgen.tar.gz --strip-components=1
57+
# Place the runner binaries in our PATH
58+
- mv cargo-web wasmtime wasm-bindgen-test-runner $HOME/.cargo/bin
59+
# Download and setup emscripten
3860
- cargo web prepare-emscripten
39-
- cargo web -V
40-
- cargo list | grep install-update || cargo install -f cargo-update
41-
- cargo install-update -i cargo-update wasm-bindgen-cli wasm-pack
42-
addons:
43-
chrome: stable
61+
env: EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0"
4462
script:
45-
# Testing wasm32-unknown-emscripten fails because of rust-lang/rust#49877
63+
# We cannot run emscripten test binaries (see rust-lang/rust#63649).
4664
# However, we can still build and link all tests to make sure that works.
4765
# This is actually useful as it finds stuff such as rust-random/rand#669
48-
- EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" cargo web test --target wasm32-unknown-emscripten --no-run
49-
#- cargo web test --target wasm32-unknown-emscripten
50-
#- cargo web test --nodejs --target wasm32-unknown-emscripten
51-
#- cargo build --target wasm32-unknown-unknown # without any features
52-
- cargo build --target wasm32-wasi
53-
- cargo build --target wasm32-unknown-unknown
54-
- cargo build --target wasm32-unknown-unknown --features=wasm-bindgen
55-
- cargo web test --target wasm32-unknown-unknown --features=stdweb
56-
- cargo build --manifest-path tests/wasm_bindgen/Cargo.toml --target wasm32-unknown-unknown
57-
- wasm-bindgen --nodejs target/wasm32-unknown-unknown/debug/getrandom_wasm_bindgen_test.wasm --out-dir tests/wasm_bindgen/js
58-
- node tests/wasm_bindgen/js/index.js
59-
- wasm-pack test --node tests/wasm_bindgen
66+
- cargo web test --target wasm32-unknown-emscripten --no-run
67+
- cargo web test --target asmjs-unknown-emscripten --no-run
68+
# wasi tests
69+
- cargo test --target wasm32-wasi
70+
# stdweb tests (Node, Chrome)
71+
- cargo web test --nodejs --target=wasm32-unknown-unknown --features=stdweb
72+
- cargo web test --target=wasm32-unknown-unknown --features=stdweb
73+
# wasm-bindgen tests (Node, Firefox, Chrome)
74+
- cargo test --target wasm32-unknown-unknown --features=wasm-bindgen
75+
- GECKODRIVER=$PWD/geckodriver cargo test --target wasm32-unknown-unknown --features=test-in-browser
76+
- CHROMEDRIVER=$PWD/chromedriver cargo test --target wasm32-unknown-unknown --features=test-in-browser
6077

6178
- name: "Linux, nightly, docs"
6279
rust: nightly

Cargo.toml

+5-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ exclude = ["utils/*", ".*", "appveyor.yml"]
1414
travis-ci = { repository = "rust-random/getrandom" }
1515
appveyor = { repository = "rust-random/getrandom" }
1616

17-
[workspace]
18-
members = ["tests/wasm_bindgen"]
19-
2017
[dependencies]
2118
log = { version = "0.4", optional = true }
2219
cfg-if = "0.1"
@@ -35,9 +32,14 @@ wasi = "0.7"
3532
wasm-bindgen = { version = "0.2.29", optional = true }
3633
stdweb = { version = "0.4.18", optional = true }
3734

35+
[target.wasm32-unknown-unknown.dev-dependencies]
36+
wasm-bindgen-test = "0.2"
37+
3838
[features]
3939
std = []
4040
# Enables dummy implementation for unsupported targets
4141
dummy = []
4242
# Unstable feature to support being a libstd dependency
4343
rustc-dep-of-std = ["compiler_builtins", "core"]
44+
# Unstable feature for testing
45+
test-in-browser = ["wasm-bindgen"]

tests/mod.rs renamed to tests/common.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
extern crate getrandom;
1+
#[cfg(feature = "wasm-bindgen")]
2+
use wasm_bindgen_test::*;
23

34
use getrandom::getrandom;
45

6+
#[cfg(feature = "test-in-browser")]
7+
wasm_bindgen_test_configure!(run_in_browser);
8+
9+
#[cfg_attr(feature = "wasm-bindgen", wasm_bindgen_test)]
510
#[test]
611
fn test_zero() {
712
// Test that APIs are happy with zero-length requests
813
getrandom(&mut [0u8; 0]).unwrap();
914
}
1015

16+
#[cfg_attr(feature = "wasm-bindgen", wasm_bindgen_test)]
1117
#[test]
1218
fn test_diff() {
1319
let mut v1 = [0u8; 1000];
@@ -25,6 +31,7 @@ fn test_diff() {
2531
assert!(n_diff_bits >= v1.len() as u32);
2632
}
2733

34+
#[cfg_attr(feature = "wasm-bindgen", wasm_bindgen_test)]
2835
#[test]
2936
fn test_huge() {
3037
let mut huge = [0u8; 100_000];

tests/wasm_bindgen/Cargo.toml

-15
This file was deleted.

tests/wasm_bindgen/js/index.js

-5
This file was deleted.

tests/wasm_bindgen/src/lib.rs

-55
This file was deleted.

utils/ci/install_cargo_web.sh

-15
This file was deleted.

0 commit comments

Comments
 (0)