wasm-bindgen/.travis.yml
Alex Crichton 894b479213 Migrate wasm-bindgen to using walrus
This commit moves `wasm-bindgen` the CLI tool from internally using
`parity-wasm` for wasm parsing/serialization to instead use `walrus`.
The `walrus` crate is something we've been working on recently with an
aim to replace the usage of `parity-wasm` in `wasm-bindgen` to make the
current CLI tool more maintainable as well as more future-proof.

The `walrus` crate provides a much nicer AST to work with as well as a
structured `Module`, whereas `parity-wasm` provides a very raw interface
to the wasm module which isn't really appropriate for our use case. The
many transformations and tweaks that wasm-bindgen does have a huge
amount of ad-hoc index management to carefully craft a final wasm
binary, but this is all entirely taken care for us with the `walrus`
crate.

Additionally, `wasm-bindgen` will ingest and rewrite the wasm file,
often changing the binary offsets of functions. Eventually with DWARF
debug information we'll need to be sure to preserve the debug
information throughout the transformations that `wasm-bindgen` does
today. This is practically impossible to do with the `parity-wasm`
architecture, but `walrus` was designed from the get-go to solve this
problem transparently in the `walrus` crate itself. (it doesn't today,
but this is planned work)

It is the intention that this does not end up regressing any
`wasm-bindgen` use cases, neither in functionality or in speed. As a
large change and refactoring, however, it's likely that at least
something will arise! We'll want to continue to remain vigilant to any
issues that come up with this commit.

Note that the `gc` crate has been deleted as part of this change, as the
`gc` crate is no longer necessary since `walrus` does it automatically.
Additionally the `gc` crate was one of the main problems with preserving
debug information as it often deletes wasm items!

Finally, this also starts moving crates to the 2018 edition where
necessary since `walrus` requires the 2018 edition, and in general it's
more pleasant to work within the 2018 edition!
2019-02-12 07:25:53 -08:00

250 lines
10 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.9
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
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/
INSTALL_AWS: &INSTALL_AWS
|
pip install --user awscli
export PATH=$HOME/.local/bin:$PATH
mkdir -p ~/$TRAVIS_BUILD_NUMBER
before_install:
- target=x86_64-unknown-linux-musl
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then target=x86_64-apple-darwin; fi
- curl -L https://github.com/mozilla/sccache/releases/download/0.2.7/sccache-0.2.7-$target.tar.gz | tar xzf -
- export PATH=$PATH:`pwd`/sccache-0.2.7-$target
- export RUSTC_WRAPPER=sccache
after_script:
- sccache -s
matrix:
include:
# Tests for wasm-bindgen itself pass
- name: "test wasm-bindgen crate"
install:
- *INSTALL_NODE_VIA_NVM
- *INSTALL_GECKODRIVER
- export GECKODRIVER=`pwd`/geckodriver
script:
# Run a test or two that makes sure `#[wasm_bindgen]` works "reasonably"
# on non-wasm platforms
- cargo test
# Run the main body of the test suite
- cargo test --target wasm32-unknown-unknown
# Rerun the test suite but disable `--debug` in generated JS
- WASM_BINDGEN_NO_DEBUG=1 cargo test --target wasm32-unknown-unknown
# Make sure our serde tests work
- cargo test --target wasm32-unknown-unknown --features serde-serialize
# Make sure the `std` feature works if disabled
- cargo test --target wasm32-unknown-unknown -p no-std
# Make sure the `wasm-bindgen-futures` tests pass.
- cargo test -p wasm-bindgen-futures
- cargo test -p wasm-bindgen-futures --target wasm32-unknown-unknown
addons:
firefox: latest
if: branch = master
# Tests the `nightly` feature of wasm-bindgen
- rust: nightly
name: "test: wasm-bindgen crate nightly feature"
install:
- *INSTALL_NODE_VIA_NVM
script:
- cargo test --target wasm32-unknown-unknown --features nightly --test wasm
if: branch = master
# All examples work
- name: "examples - almost all examples"
install:
- *INSTALL_NODE_VIA_NVM
- *INSTALL_AWS
- npm install
- curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -f
script:
- cargo build -p wasm-bindgen-cli
- ln -snf target/debug/wasm-bindgen $HOME/.cargo/wasm-bindgen
- |
for dir in `ls examples | grep -v README | grep -v asm.js | grep -v raytrace | grep -v no_modules`; do
(cd examples/$dir &&
ln -fs ../../node_modules . &&
npm run build -- --output-path $HOME/$TRAVIS_BUILD_NUMBER/exbuild/$dir) || exit 1;
done
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then aws s3 sync --quiet ~/$TRAVIS_BUILD_NUMBER s3://wasm-bindgen-ci/$TRAVIS_BUILD_NUMBER; fi
if: branch = master
- rust: nightly
name: "examples - raytracer"
install:
- *INSTALL_AWS
- rustup component add rust-src
- curl -L https://github.com/japaric/xargo/releases/download/v0.3.13/xargo-v0.3.13-x86_64-unknown-linux-musl.tar.gz | tar xzf -
- export PATH=$PATH:`pwd`
script:
- sed -i 's/python/#python/' examples/raytrace-parallel/build.sh
- (cd examples/raytrace-parallel && ./build.sh)
- dst=$HOME/$TRAVIS_BUILD_NUMBER/exbuild/raytrace-parallel
- mkdir -p $dst
- cp examples/raytrace-parallel/*.{js,html,wasm} $dst
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then aws s3 sync ~/$TRAVIS_BUILD_NUMBER s3://wasm-bindgen-ci/$TRAVIS_BUILD_NUMBER; fi
if: branch = master
# The `cli-support` crate's tests pass
- name: "test cli-support crate"
script: cargo test -p wasm-bindgen-cli-support
if: branch = master
# The `web-sys` crate's tests pass
- name: "test web-sys crate"
install:
- *INSTALL_NODE_VIA_NVM
- *INSTALL_GECKODRIVER
script:
- export RUST_LOG=wasm_bindgen_test_runner
# Test out builds with just a few features
- cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown
- cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features Node
- cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features Element
- cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features Window
# Now run all the tests with all the features
- GECKODRIVER=`pwd`/geckodriver cargo test --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --all-features
addons:
firefox: latest
chrome: stable
if: branch = master
# The `js-sys` crate's tests pass
- name: "test js-sys crate"
install:
- *INSTALL_NODE_VIA_NVM
- *INSTALL_GECKODRIVER
script:
- export RUST_LOG=wasm_bindgen_test_runner
- GECKODRIVER=`pwd`/geckodriver cargo test -p js-sys --target wasm32-unknown-unknown
addons:
firefox: latest
chrome: stable
if: branch = master
# WebIDL tests pass
- name: "test wasm-bindgen-webidl crate"
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
name: "test ui tests"
script: cargo test -p ui-tests
if: branch = master
# wasm-interpreter tests work alright
- name: "test wasm-bindgen-wasm-interpreter crate"
script: cargo test -p wasm-bindgen-wasm-interpreter
if: branch = master
# Dist linux binary
- name: "dist: Linux (x86_64-unknown-linux-musl)"
env: JOB=dist-linux TARGET=x86_64-unknown-linux-musl
before_script: rustup target add $TARGET
script:
- cargo build --manifest-path crates/cli/Cargo.toml --release --target $TARGET --features vendored-openssl
# no need to ship debuginfo to users
- strip -g target/$TARGET/release/wasm-bindgen
- strip -g target/$TARGET/release/wasm-bindgen-test-runner
- strip -g target/$TARGET/release/wasm2es6js
addons:
apt:
packages:
- musl-tools
<<: *DEPLOY_TO_GITHUB
# Dist OSX binary
- name: "dist: OSX (x86_64-apple-darwin)"
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
# Build mdbook documentation
- name: "doc: Guide documentation"
install:
- mkdir -p $HOME/mdbook
- curl -L https://github.com/rust-lang-nursery/mdBook/releases/download/v0.2.1/mdbook-v0.2.1-x86_64-unknown-linux-musl.tar.gz | tar xzf - -C $HOME/mdbook
- export PATH=$PATH:$HOME/mdbook
- *INSTALL_AWS
script:
- (cd guide && mdbook build)
- rm -rf ~/$TRAVIS_BUILD_NUMBER
- mv guide/book ~/$TRAVIS_BUILD_NUMBER
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then aws s3 sync --quiet ~/$TRAVIS_BUILD_NUMBER s3://wasm-bindgen-ci/$TRAVIS_BUILD_NUMBER; fi
if: branch = master
# Build API documentation
- rust: stable
name: "doc: API documentation"
install: *INSTALL_AWS
script:
- cargo doc --no-deps --features 'nightly serde-serialize'
- cargo doc --no-deps --manifest-path crates/js-sys/Cargo.toml
- cargo doc --no-deps --manifest-path crates/futures/Cargo.toml
- cargo doc --no-deps --manifest-path crates/web-sys/Cargo.toml --all-features
- mv target/doc ~/$TRAVIS_BUILD_NUMBER/api
- if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then aws s3 sync --quiet ~/$TRAVIS_BUILD_NUMBER s3://wasm-bindgen-ci/$TRAVIS_BUILD_NUMBER; fi
if: branch = master
# Take compiled examples and mdbook/API docs and deploy them to gh-pages
- stage: deploy-gh-pages
install: *INSTALL_AWS
script:
- aws s3 sync --quiet s3://wasm-bindgen-ci/$TRAVIS_BUILD_NUMBER ~/$TRAVIS_BUILD_NUMBER
- mv ~/$TRAVIS_BUILD_NUMBER doc
deploy:
provider: pages
skip-cleanup: true
github-token: $GITHUB_TOKEN # Set in travis-ci.org dashboard, marked secure
local-dir: doc
keep-history: false
after_deploy:
- aws s3 rm --recursive s3://rust-lang-ci-sccache2/$TRAVIS_BUILD_NUMBER
if: branch = master AND type != pull_request
notifications:
email:
on_success: never