wasm-bindgen/.travis.yml
Alex Crichton c4dcaee1b9
Prepare to have targeted error diagnostics (#604)
This commit starts to add infrastructure for targeted diagnostics in the
`#[wasm_bindgen]` attribute, intended eventually at providing much better errors
as they'll be pointing to exactly the code in question rather than always to a
`#[wasm_bindgen]` attribute.

The general changes are are:

* A new `Diagnostic` error type is added to the backend. A `Diagnostic` is
  created with a textual error or with a span, and it can also be created from a
  list of diagnostics. A `Diagnostic` implements `ToTokens` which emits a bunch
  of invocations of `compile_error!` that will cause rustc to later generate
  errors.

* Fallible implementations of `ToTokens` have switched to using a new trait,
  `TryToTokens`, which returns a `Result` to use `?` with.

* The `MacroParse` trait has changed to returning a `Result` to propagate errors
  upwards.

* A new `ui-tests` crate was added which uses `compiletest_rs` to add UI tests.
  These UI tests will verify that our output improves over time and does not
  regress. This test suite is added to CI as a new builder as well.

* No `Diagnostic` instances are created just yet, everything continues to panic
  and return `Ok`, with the one exception of the top-level invocations of
  `syn::parse` which now create a `Diagnostic` and pass it along.

This commit does not immediately improve diagnostics but the intention is that
it is laying the groundwork for improving diagnostics over time. It should
ideally be much easier to contribute improved diagnostics after this commit!

cc #601
2018-08-01 17:15:27 -05:00

188 lines
6.4 KiB
YAML

language: rust
sudo: false
INSTALL_NODE_VIA_NVM: &INSTALL_NODE_VIA_NVM
|
rustup target add wasm32-unknown-unknown
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
source ~/.nvm/nvm.sh
nvm install v10.5
INSTALL_GECKODRIVER: &INSTALL_GECKODRIVER
|
curl --retry 5 -LO https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz
tar xf geckodriver-v0.21.0-linux64.tar.gz
export GECKODRIVER=`pwd`/geckodriver
DEPLOY_TO_GITHUB: &DEPLOY_TO_GITHUB
before_deploy:
|
name="wasm-bindgen-$TRAVIS_TAG-$TARGET"
mkdir "$name"
cp "target/$TARGET/release/wasm-bindgen" "$name/"
cp "target/$TARGET/release/wasm2es6js" "$name/"
cp "target/$TARGET/release/wasm-bindgen-test-runner" "$name/"
cp README.md LICENSE-MIT LICENSE-APACHE "$name/"
tar czvf "$name.tar.gz" "$name"
deploy:
api_key:
secure: "qCiELnEnvyKpWHDttgTNf+ElZGbWlvthu5aOIj5nYfov+h6g1+mkWnDFP6at/WPlE78zE/f/z/dL2KB2I7w/cxH/T4P1nWh0A9DvrpY6hqWkK2pgN5dPeWE/a4flI7AdH0A6wMRw7m00uMgDjlzN78v7XueccpJCxSO5allQN5jweAQvMX2QA07TbLRJc7Lq6lfVwSf8OfrcO8qCbcIzJTsC4vtbh6jkUYg1OAaU2tAYlskBy9ZYmHWCExIAu/zxzcJY9OpApPD9Ea4CyrsfjniAyRBJ87Weh/sP4XhiWeRPVmvA4HAzv4Pps9ps+Ar5QmsX53rhKQ3id7/VPR8ggaAHxrYUiJPvJRtbP6cKKOlDiK0ooP+vI4vjxWeNVj9ibEolSYOlT0ENIvPK1BppA6VgAoJOjwPr0Q16Ma4AmvLkIkowJiXCm2Jlje/5c0vPEAGJVgUtkj3jFQzgXwyEMpzxUlhHmYpmnfeaM0tK/Kiiwe1monL/ydMlyfV55kNylylCg+XoTnf420AFChKbD4DM5Z7ZsjU9g8fF3LUoN0sKpmLDp+GvwjLi9YtGogWB71Q2MFp43MSL0YLshkyYYoZKrVMiy5J9hKNUxhT2jNEq53Z69syIHHMCxHL9GoAcuHxIKOA7uTMW0aCoyy2I+dfAKKsrUGwGYaNC5LZdUQI="
file_glob: true
file:
- wasm-bindgen-$TRAVIS_TAG-$TARGET.tar.gz
on:
tags: true
provider: releases
skip_cleanup: true
if: branch = master OR branch =~ /^\d/
matrix:
include:
# Tests pass on nightly
- rust: nightly
env: JOB=test-bindgen
install:
- *INSTALL_NODE_VIA_NVM
- npm ci --verbose
script:
- cargo test --release
- cargo test --target wasm32-unknown-unknown
# Check JS output from all tests against eslint
- npm run run-lint-generated-tests
# Check Examples against eslint
- npm run run-lint-examples
addons:
firefox: latest
if: branch = master
# All examples work
- rust: nightly
env: JOB=examples-build
install:
- *INSTALL_NODE_VIA_NVM
- npm ci --verbose
script:
- |
for dir in `ls examples | grep -v README | grep -v asm.js | grep -v no_modules`; do
(cd examples/$dir &&
sed -i 's/: "webpack-dev-server"/: "webpack"/' package.json &&
sed -i 's/npm install//' build.sh &&
ln -s ../../node_modules . &&
./build.sh) || exit 1;
done
if: branch = master
# The `web-sys` crate's tests pass on nightly.
- rust: nightly
env: JOB=test-web-sys
install:
- *INSTALL_NODE_VIA_NVM
- *INSTALL_GECKODRIVER
script:
- cargo test -p web-sys --target wasm32-unknown-unknown
addons:
firefox: latest
if: branch = master
# The `js-sys` crate's tests pass on nightly.
- rust: nightly
env: JOB=test-js-sys
install:
- *INSTALL_NODE_VIA_NVM
- *INSTALL_GECKODRIVER
script:
- cargo test -p js-sys --target wasm32-unknown-unknown
addons:
firefox: latest
if: branch = master
# Tests pass on nightly using yarn
- rust: nightly
env: JOB=test-yarn-smoke
install:
- *INSTALL_NODE_VIA_NVM
- travis_retry curl -OLSf https://yarnpkg.com/install.sh
- travis_retry bash install.sh -- --version 1.7.0
- export PATH=$HOME/.yarn/bin:$PATH
- yarn install --freeze-lockfile
script: cargo test api::works
if: branch = master
# WebIDL tests pass on nightly
- rust: nightly
env: JOB=test-webidl
install: *INSTALL_NODE_VIA_NVM
script:
- cargo test -p wasm-bindgen-webidl
- cargo test -p webidl-tests --target wasm32-unknown-unknown
if: branch = master
# UI tests for the macro work just fine
- rust: nightly
env: JOB=macro-ui
script: cargo test -p ui-tests
if: branch = master
# Dist linux binary
- rust: nightly
env: JOB=dist-linux TARGET=x86_64-unknown-linux-musl
before_script: rustup target add $TARGET
install:
- travis_retry curl -O https://www.openssl.org/source/openssl-1.0.2o.tar.gz
- tar xf openssl-1.0.2o.tar.gz
- (cd openssl-1.0.2o &&
CC=musl-gcc ./Configure --prefix=$HOME/openssl-musl no-dso no-ssl2 no-ssl3 linux-x86_64 -fPIC &&
make -j$(nproc) &&
make install)
- export OPENSSL_DIR=$HOME/openssl-musl
script: cargo build --manifest-path crates/cli/Cargo.toml --release --target $TARGET
addons:
apt:
packages:
- musl-tools
<<: *DEPLOY_TO_GITHUB
# Dist OSX binary
- rust: nightly
os: osx
env: JOB=dist-osx MACOSX_DEPLOYMENT_TARGET=10.7 TARGET=x86_64-apple-darwin
script: cargo build --manifest-path crates/cli/Cargo.toml --release --target $TARGET
<<: *DEPLOY_TO_GITHUB
# CLI builds on stable
- rust: stable
env: JOB=check-stable-cli
script: cargo check --manifest-path crates/cli/Cargo.toml
if: branch = master
# CLI builds on nightly
- rust: nightly
env: JOB=check-nightly-cli
script: cargo check --manifest-path crates/cli/Cargo.toml
if: branch = master
# Build documentation for the gh-pages branch
- rust: nightly
env: JOB=guide-build-and-deploy
cache:
directories:
- $HOME/.cargo
before_script:
- (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
- (test -x $HOME/.cargo/bin/mdbook || cargo install --vers "^0.1" mdbook)
- cargo install-update -a
script:
- (cd guide && mdbook build)
- cargo doc --no-deps -p wasm-bindgen -p web-sys -p js-sys -p wasm-bindgen-futures
- mv target/doc guide/book/api
deploy:
provider: pages
skip-cleanup: true
github-token: $GITHUB_TOKEN # Set in travis-ci.org dashboard, marked secure
local-dir: guide/book
keep-history: false
if: branch = master
notifications:
email:
on_success: never