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 <newpavlov@gmail.com>

* Fix install location

* Debug CI
This commit is contained in:
Joseph Richey
2019-09-21 01:46:26 -07:00
committed by GitHub
parent ccc47748d0
commit fa6f929aed
8 changed files with 55 additions and 114 deletions
+5
View File
@@ -0,0 +1,5 @@
[target.wasm32-unknown-unknown]
runner = 'wasm-bindgen-test-runner'
[target.wasm32-wasi]
runner = 'wasmtime'
+37 -20
View File
@@ -29,34 +29,51 @@ matrix:
- name: "WASM via emscripten, stdweb, wasm-bindgen and WASI"
rust: nightly
addons:
firefox: 69.0
chrome: stable
install:
- rustup target add wasm32-unknown-unknown
- rustup target add wasm32-unknown-emscripten
- rustup target add asmjs-unknown-emscripten
- rustup target add wasm32-wasi
- nvm install 9
- ./utils/ci/install_cargo_web.sh
# Get geckodriver
- wget -O geckodriver.tar.gz https://github.com/mozilla/geckodriver/releases/download/v0.25.0/geckodriver-v0.25.0-linux64.tar.gz
- tar -xzf geckodriver.tar.gz
# Get chromedirver (we cannot pin chrome version, so don't pin chromedriver version)
- export VERSION=$(wget -q -O - https://chromedriver.storage.googleapis.com/LATEST_RELEASE)
- wget -O chromedriver.zip https://chromedriver.storage.googleapis.com/$VERSION/chromedriver_linux64.zip
- unzip chromedriver.zip
# Get cargo-web
- wget -O cargo-web.gz https://github.com/koute/cargo-web/releases/download/0.6.26/cargo-web-x86_64-unknown-linux-gnu.gz
- gunzip cargo-web.gz
- chmod +x cargo-web
# Get wasmtime
- wget -O wasmtime.tar.xz https://github.com/CraneStation/wasmtime/releases/download/v0.3.0/wasmtime-v0.3.0-x86_64-linux.tar.xz
- tar -xf wasmtime.tar.xz --strip-components=1
# Get wasm-bindgen-test-runner
- 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
- tar -xzf wasm-bindgen.tar.gz --strip-components=1
# Place the runner binaries in our PATH
- mv cargo-web wasmtime wasm-bindgen-test-runner $HOME/.cargo/bin
# Download and setup emscripten
- cargo web prepare-emscripten
- cargo web -V
- cargo list | grep install-update || cargo install -f cargo-update
- cargo install-update -i cargo-update wasm-bindgen-cli wasm-pack
addons:
chrome: stable
env: EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0"
script:
# Testing wasm32-unknown-emscripten fails because of rust-lang/rust#49877
# We cannot run emscripten test binaries (see rust-lang/rust#63649).
# However, we can still build and link all tests to make sure that works.
# This is actually useful as it finds stuff such as rust-random/rand#669
- EMCC_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" cargo web test --target wasm32-unknown-emscripten --no-run
#- cargo web test --target wasm32-unknown-emscripten
#- cargo web test --nodejs --target wasm32-unknown-emscripten
#- cargo build --target wasm32-unknown-unknown # without any features
- cargo build --target wasm32-wasi
- cargo build --target wasm32-unknown-unknown
- cargo build --target wasm32-unknown-unknown --features=wasm-bindgen
- cargo web test --target wasm32-unknown-unknown --features=stdweb
- cargo build --manifest-path tests/wasm_bindgen/Cargo.toml --target wasm32-unknown-unknown
- wasm-bindgen --nodejs target/wasm32-unknown-unknown/debug/getrandom_wasm_bindgen_test.wasm --out-dir tests/wasm_bindgen/js
- node tests/wasm_bindgen/js/index.js
- wasm-pack test --node tests/wasm_bindgen
- cargo web test --target wasm32-unknown-emscripten --no-run
- cargo web test --target asmjs-unknown-emscripten --no-run
# wasi tests
- cargo test --target wasm32-wasi
# stdweb tests (Node, Chrome)
- cargo web test --nodejs --target=wasm32-unknown-unknown --features=stdweb
- cargo web test --target=wasm32-unknown-unknown --features=stdweb
# wasm-bindgen tests (Node, Firefox, Chrome)
- cargo test --target wasm32-unknown-unknown --features=wasm-bindgen
- GECKODRIVER=$PWD/geckodriver cargo test --target wasm32-unknown-unknown --features=test-in-browser
- CHROMEDRIVER=$PWD/chromedriver cargo test --target wasm32-unknown-unknown --features=test-in-browser
- name: "Linux, nightly, docs"
rust: nightly
+5 -3
View File
@@ -14,9 +14,6 @@ exclude = ["utils/*", ".*", "appveyor.yml"]
travis-ci = { repository = "rust-random/getrandom" }
appveyor = { repository = "rust-random/getrandom" }
[workspace]
members = ["tests/wasm_bindgen"]
[dependencies]
log = { version = "0.4", optional = true }
cfg-if = "0.1"
@@ -35,9 +32,14 @@ wasi = "0.7"
wasm-bindgen = { version = "0.2.29", optional = true }
stdweb = { version = "0.4.18", optional = true }
[target.wasm32-unknown-unknown.dev-dependencies]
wasm-bindgen-test = "0.2"
[features]
std = []
# Enables dummy implementation for unsupported targets
dummy = []
# Unstable feature to support being a libstd dependency
rustc-dep-of-std = ["compiler_builtins", "core"]
# Unstable feature for testing
test-in-browser = ["wasm-bindgen"]
+8 -1
View File
@@ -1,13 +1,19 @@
extern crate getrandom;
#[cfg(feature = "wasm-bindgen")]
use wasm_bindgen_test::*;
use getrandom::getrandom;
#[cfg(feature = "test-in-browser")]
wasm_bindgen_test_configure!(run_in_browser);
#[cfg_attr(feature = "wasm-bindgen", wasm_bindgen_test)]
#[test]
fn test_zero() {
// Test that APIs are happy with zero-length requests
getrandom(&mut [0u8; 0]).unwrap();
}
#[cfg_attr(feature = "wasm-bindgen", wasm_bindgen_test)]
#[test]
fn test_diff() {
let mut v1 = [0u8; 1000];
@@ -25,6 +31,7 @@ fn test_diff() {
assert!(n_diff_bits >= v1.len() as u32);
}
#[cfg_attr(feature = "wasm-bindgen", wasm_bindgen_test)]
#[test]
fn test_huge() {
let mut huge = [0u8; 100_000];
-15
View File
@@ -1,15 +0,0 @@
[package]
name = "getrandom_wasm_bindgen_test"
description = "Minimal test crate for getrandom using wasm-bindgen"
version = "0.1.0"
authors = ["The Rand Project Developers"]
publish = false
license = "MIT/Apache-2.0"
[lib]
crate-type = ["cdylib"]
[dependencies]
getrandom = { path = "../..", features = ["wasm-bindgen"] }
wasm-bindgen = "0.2"
wasm-bindgen-test = "0.2"
-5
View File
@@ -1,5 +0,0 @@
'use strict';
const getrandom_wasm_bindgen_test = require('./getrandom_wasm_bindgen_test');
console.log(getrandom_wasm_bindgen_test.test_gen());
-55
View File
@@ -1,55 +0,0 @@
// Copyright 2018 Developers of the Rand project.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// Crate to test WASM with the `wasm-bindgen` lib.
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png")]
extern crate getrandom;
extern crate wasm_bindgen;
extern crate wasm_bindgen_test;
use std::slice;
use wasm_bindgen::prelude::*;
use wasm_bindgen_test::*;
use getrandom::getrandom;
#[wasm_bindgen]
pub fn test_gen() -> i32 {
let mut int: i32 = 0;
unsafe {
let ptr = &mut int as *mut i32 as *mut u8;
let slice = slice::from_raw_parts_mut(ptr, 4);
getrandom(slice).unwrap();
}
int
}
#[wasm_bindgen_test]
fn test_call() {
let mut buf = [0u8; 0];
getrandom(&mut buf).unwrap();
}
#[wasm_bindgen_test]
fn test_diff() {
let mut v1 = [0u8; 1000];
getrandom(&mut v1).unwrap();
let mut v2 = [0u8; 1000];
getrandom(&mut v2).unwrap();
let mut n_diff_bits = 0;
for i in 0..v1.len() {
n_diff_bits += (v1[i] ^ v2[i]).count_ones();
}
// Check at least 1 bit per byte differs. p(failure) < 1e-1000 with random input.
assert!(n_diff_bits >= v1.len() as u32);
}
-15
View File
@@ -1,15 +0,0 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
CARGO_WEB_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/koute/cargo-web/releases/latest)
CARGO_WEB_VERSION=$(echo $CARGO_WEB_RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
CARGO_WEB_URL="https://github.com/koute/cargo-web/releases/download/$CARGO_WEB_VERSION/cargo-web-x86_64-unknown-linux-gnu.gz"
echo "Downloading cargo-web from: $CARGO_WEB_URL"
curl -L $CARGO_WEB_URL | gzip -d > cargo-web
chmod +x cargo-web
mkdir -p ~/.cargo/bin
mv cargo-web ~/.cargo/bin