wasm-bindgen/azure-pipelines.yml
Alex Crichton 3c887c40b7
Default all async support to std::future (#1741)
This commit defaults all crates in-tree to use `std::future` by default
and none of them support the crates.io `futures` 0.1 crate any more.
This is a breaking change for `wasm-bindgen-futures` and
`wasm-bindgen-test` so they've both received a major version bump to
reflect the new defaults. Historical versions of these crates should
continue to work if necessary, but they won't receive any more
maintenance after this is merged.

The movement here liberally uses `async`/`await` to remove the need for
using any combinators on the `Future` trait. As a result many of the
crates now rely on a much more recent version of the compiler,
especially to run tests.

The `wasm-bindgen-futures` crate was updated to remove all of its
futures-related dependencies and purely use `std::future`, hopefully
improving its compatibility by not having any version compat
considerations over time. The implementations of the executors here are
relatively simple and only delve slightly into the `RawWaker` business
since there are no other stable APIs in `std::task` for wrapping these.

This commit also adds support for:

    #[wasm_bindgen_test]
    async fn foo() {
        // ...
    }

where previously you needed to pass `(async)` now that's inferred
because it's an `async fn`.

Closes #1558
Closes #1695
2019-09-05 11:18:36 -05:00

424 lines
17 KiB
YAML

trigger:
branches:
include:
- refs/heads/master
- refs/tags/*
jobs:
- job: test_wasm_bindgen
displayName: "Run wasm-bindgen crate tests (unix)"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
- template: ci/azure-install-geckodriver.yml
- template: ci/azure-install-sccache.yml
- script: cargo test
displayName: "Builds on native"
- script: cargo test --target wasm32-unknown-unknown
displayName: "Crate test suite"
- script: WASM_BINDGEN_NO_DEBUG=1 cargo test --target wasm32-unknown-unknown
displayName: "Crate test suite (no debug)"
- script: cargo test --target wasm32-unknown-unknown --features serde-serialize
displayName: "Crate test suite (with serde)"
- script: cargo test --target wasm32-unknown-unknown --features enable-interning
displayName: "Crate test suite (with enable-interning)"
- script: cargo test --target wasm32-unknown-unknown -p no-std
displayName: "Crate test suite (no_std)"
- script: cargo test -p wasm-bindgen-futures
displayName: "Futures test suite on native"
- script: cargo test -p wasm-bindgen-futures --target wasm32-unknown-unknown
displayName: "Futures test suite on wasm"
- script: |
set -e
curl https://nodejs.org/download/nightly/v13.0.0-nightly2019081215b2d13310/node-v13.0.0-nightly2019081215b2d13310-linux-x64.tar.xz | tar xJf -
echo "##vso[task.prependpath]$PWD/node-v13.0.0-nightly2019081215b2d13310-linux-x64/bin"
echo "##vso[task.setvariable variable=NODE_ARGS]--experimental-wasm-anyref,--experimental-wasm-bulk_memory"
echo "##vso[task.setvariable variable=WASM_BINDGEN_ANYREF]1"
displayName: "Install a custom node.js and configure anyref"
- script: cargo test --target wasm32-unknown-unknown --test wasm
displayName: "(anyref) Crate test suite"
- script: WASM_BINDGEN_NO_DEBUG=1 cargo test --target wasm32-unknown-unknown --test wasm
displayName: "(anyref) Crate test suite (no debug)"
- script: cargo test --target wasm32-unknown-unknown --features serde-serialize --test wasm
displayName: "(anyref) Crate test suite (with serde)"
- job: test_wasm_bindgen_windows
displayName: "Run wasm-bindgen crate tests (Windows)"
pool:
vmImage: vs2017-win2016
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
- template: ci/azure-install-geckodriver.yml
- template: ci/azure-install-sccache.yml
- script: cargo test --target wasm32-unknown-unknown
displayName: "wasm-bindgen test suite"
env:
RUST_LOG: wasm_bindgen_test_runner
GECKODRIVER_ARGS: --log trace
- script: cargo test --target wasm32-unknown-unknown -p js-sys
displayName: "js-sys test suite"
- script: cargo test --target wasm32-unknown-unknown -p webidl-tests
displayName: "webidl-tests test suite"
env:
WBINDGEN_I_PROMISE_JS_SYNTAX_WORKS_IN_NODE: 1
- script: cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features "Node Window Document"
displayName: "web-sys build"
- job: test_wasm_bindgen_nightly
displayName: "Run wasm-bindgen crate tests (nightly)"
steps:
- template: ci/azure-install-rust.yml
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
- template: ci/azure-install-sccache.yml
- script: cargo test --target wasm32-unknown-unknown --features nightly --test wasm
- job: test_cli
displayName: "Run wasm-bindgen-cli crate tests"
steps:
- template: ci/azure-install-rust.yml
- template: ci/azure-install-sccache.yml
- script: rustup target add wasm32-unknown-unknown
displayName: "install wasm target"
- script: cargo test -p wasm-bindgen-cli-support
displayName: "wasm-bindgen-cli-support tests"
- script: cargo test -p wasm-bindgen-cli
displayName: "wasm-bindgen-cli tests"
- job: test_web_sys
displayName: "Run web-sys crate tests"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
- template: ci/azure-install-geckodriver.yml
- template: ci/azure-install-sccache.yml
- script: cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown
- script: cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features Node
- script: cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features Element
- script: cargo build --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --features Window
- script: cargo test --manifest-path crates/web-sys/Cargo.toml --target wasm32-unknown-unknown --all-features
- job: test_js_sys
displayName: "Run js-sys crate tests"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
- template: ci/azure-install-geckodriver.yml
- template: ci/azure-install-sccache.yml
- script: cargo test -p js-sys --target wasm32-unknown-unknown
- job: test_webidl
displayName: "Run wasm-bindgen-webidl crate tests"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
#- template: ci/azure-install-sccache.yml
- script: cargo test -p wasm-bindgen-webidl
- script: cargo test -p webidl-tests --target wasm32-unknown-unknown
env:
WBINDGEN_I_PROMISE_JS_SYNTAX_WORKS_IN_NODE: 1
- job: test_ui
displayName: "Run UI tests"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-node.yml
- template: ci/azure-install-sccache.yml
- script: cargo test -p wasm-bindgen-macro
- job: test_wasm_interpreter
displayName: "Run wasm-bindgen-wasm-interpreter tests"
steps:
- template: ci/azure-install-rust.yml
- template: ci/azure-install-sccache.yml
- script: |
git clone https://github.com/WebAssembly/wabt
mkdir -p wabt/build
cd wabt/build
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=off -DCMAKE_CXX_COMPILER_LAUNCHER=$RUSTC_WRAPPER
cmake --build . -- -j$(nproc)
echo "##vso[task.prependpath]$PWD"
- script: cargo test -p wasm-bindgen-wasm-interpreter
- job: test_typescript_output
displayName: "Test TypeScript output of wasm-bindgen"
steps:
- template: ci/azure-install-rust.yml
- template: ci/azure-install-sccache.yml
- template: ci/azure-install-node.yml
- script: cd crates/typescript-tests && ./run.sh
- job: build_examples
displayName: "Build almost all examples"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-sccache.yml
- template: ci/azure-install-wasm-pack.yml
- script: mv _package.json package.json && npm install && rm package.json
displayName: "run npm install"
- script: |
for dir in `ls examples | grep -v README | grep -v asm.js | grep -v raytrace | grep -v without-a-bundler | grep -v websockets`; do
(cd examples/$dir &&
ln -fs ../../node_modules . &&
npm run build -- --output-path $BUILD_ARTIFACTSTAGINGDIRECTORY/exbuild/$dir) || exit 1;
done
displayName: "build examples"
- task: PublishPipelineArtifact@0
inputs:
artifactName: examples1
targetPath: '$(Build.ArtifactStagingDirectory)'
- job: build_raytrace
displayName: "Build raytrace examples"
steps:
- template: ci/azure-install-rust.yml
parameters:
toolchain: nightly-2019-08-27
- template: ci/azure-install-sccache.yml
- script: rustup component add rust-src
displayName: "install rust-src"
- script: cargo install xargo
displayName: "install xargo"
- script: |
set -e
sed -i 's/python/#python/' examples/raytrace-parallel/build.sh
(cd examples/raytrace-parallel && ./build.sh)
cp examples/raytrace-parallel/*.{js,html,wasm} $BUILD_ARTIFACTSTAGINGDIRECTORY
displayName: "build example"
- task: PublishPipelineArtifact@0
inputs:
artifactName: examples2
targetPath: '$(Build.ArtifactStagingDirectory)'
- job: build_benchmarks
displayName: "Build benchmarks"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
- template: ci/azure-install-sccache.yml
- template: ci/azure-install-wasm-pack.yml
- script: wasm-pack build --target web benchmarks
displayName: "build benchmarks"
- script: rm -f benchmarks/pkg/.gitignore
displayName: "remove stray gitignore"
- task: PublishPipelineArtifact@0
inputs:
artifactName: benchmarks
targetPath: benchmarks
- job: dist_linux
displayName: "Dist Linux binary"
steps:
- template: ci/azure-install-rust.yml
- template: ci/azure-install-sccache.yml
- script: rustup target add x86_64-unknown-linux-musl
- script: |
sudo apt update -y
sudo apt install musl-tools -y
displayName: "Install musl-tools"
- script: |
set -ex
cargo build --manifest-path crates/cli/Cargo.toml --target x86_64-unknown-linux-musl --features vendored-openssl --release
strip -g target/x86_64-unknown-linux-musl/release/wasm-bindgen
strip -g target/x86_64-unknown-linux-musl/release/wasm-bindgen-test-runner
strip -g target/x86_64-unknown-linux-musl/release/wasm2es6js
- template: ci/azure-create-tarball.yml
parameters:
artifacts: target/x86_64-unknown-linux-musl/release
name: dist_linux
- job: dist_darwin
displayName: "Dist Darwin binary"
pool:
vmImage: macOS-10.13
steps:
- template: ci/azure-install-rust.yml
- template: ci/azure-install-sccache.yml
- script: cargo build --manifest-path crates/cli/Cargo.toml --release
env:
MACOSX_DEPLOYMENT_TARGET: 10.7
- template: ci/azure-create-tarball.yml
parameters:
name: dist_darwin
- job: dist_windows
displayName: "Dist Windows binary"
pool:
vmImage: vs2017-win2016
steps:
- template: ci/azure-install-rust.yml
- template: ci/azure-install-sccache.yml
- script: cargo build --manifest-path crates/cli/Cargo.toml --release
env:
RUSTFLAGS: -Ctarget-feature=+crt-static
- template: ci/azure-create-tarball.yml
parameters:
name: dist_windows
- script: "%RUSTC_WRAPPER% -s"
- script: cat sccache.log
- job: doc_book
displayName: "Doc - build the book"
steps:
- script: |
set -e
curl -L https://github.com/rust-lang-nursery/mdBook/releases/download/v0.3.0/mdbook-v0.3.0-x86_64-unknown-linux-gnu.tar.gz | tar xzf -
echo "##vso[task.prependpath]$PWD"
displayName: "Install mdbook"
- script: (cd guide && mv _theme theme && mdbook build)
- task: PublishPipelineArtifact@0
inputs:
artifactName: doc_book
targetPath: guide/book/html
- job: doc_api
displayName: "Doc - build the API documentation"
steps:
- template: ci/azure-install-rust.yml
# TODO: switch this back to `stable` when async/await is stable
parameters:
toolchain: nightly
# Install rustfmt so we can format the web-sys bindings
- script: rustup component add rustfmt
displayName: "Install rustfmt"
- template: ci/azure-install-sccache.yml
- script: cargo doc --no-deps --features 'nightly serde-serialize'
displayName: "Document wasm-bindgen"
- script: cargo doc --no-deps --manifest-path crates/js-sys/Cargo.toml
displayName: "Document js-sys"
- script: cargo doc --no-deps --manifest-path crates/web-sys/Cargo.toml --all-features
displayName: "Document web-sys"
env:
WEBIDL_RUSTFMT_BINDINGS: 0
- script: cargo doc --no-deps --manifest-path crates/futures/Cargo.toml
displayName: "Document wasm-bindgen-futures"
# Make a tarball even though a zip is uploaded, it looks like the tarball
# makes the uploading step much speedier.
- script: tar czvf $BUILD_ARTIFACTSTAGINGDIRECTORY/docs.tar.gz target/doc
- task: PublishPipelineArtifact@0
inputs:
artifactName: doc_api
targetPath: target/doc
- job: deploy
dependsOn:
- doc_api
- doc_book
- dist_linux
- dist_darwin
- dist_windows
- build_examples
- build_raytrace
- build_benchmarks
displayName: "Deploy everything"
steps:
- template: ci/azure-install-rust.yml
- task: DownloadPipelineArtifact@0
displayName: "Download docs - api"
inputs:
artifactName: doc_api
targetPath: gh-pages/api
- task: DownloadPipelineArtifact@0
displayName: "Download docs - book"
inputs:
artifactName: doc_book
targetPath: gh-pages
- task: DownloadPipelineArtifact@0
displayName: "Download examples"
inputs:
artifactName: examples1
targetPath: gh-pages
- task: DownloadPipelineArtifact@0
displayName: "Download examples - raytracer"
inputs:
artifactName: examples2
targetPath: gh-pages/exbuild/raytrace-parallel
- task: DownloadPipelineArtifact@0
displayName: "Download benchmarks"
inputs:
artifactName: benchmarks
targetPath: gh-pages/benchmarks
- task: DownloadPipelineArtifact@0
displayName: "Download dist - windows"
inputs:
artifactName: dist_windows
targetPath: tmp/windows
- task: DownloadPipelineArtifact@0
displayName: "Download dist - linux"
inputs:
artifactName: dist_linux
targetPath: tmp/linux
- task: DownloadPipelineArtifact@0
displayName: "Download dist - darwin"
inputs:
artifactName: dist_darwin
targetPath: tmp/darwin
- script: |
set -ex
mkdir -p gh-release
find .
tag=`git describe --tags`
mk() {
target=$1
src=$2
name=wasm-bindgen-$tag-$target
mkdir -p tmp/$name
cp README.md \
LICENSE-MIT \
LICENSE-APACHE \
tmp/$src/wasm* \
tmp/$name/
chmod +x tmp/$name/wasm*
tar czvf gh-release/$name.tar.gz -C tmp $name
}
mk x86_64-unknown-linux-musl linux
mk x86_64-apple-darwin darwin
mk x86_64-pc-windows-msvc windows
displayName: "prepare the github releases tarball artifacts"
- task: PublishPipelineArtifact@0
displayName: "publish gh_release artifact"
inputs:
artifactName: gh_release
targetPath: gh-release
- task: PublishPipelineArtifact@0
displayName: "publish gh_pages artifact"
inputs:
artifactName: gh_pages
targetPath: gh-pages
- script: curl -LsSf https://git.io/fhJ8n | rustc - && (cd gh-pages && ../rust_out)
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
env:
GITHUB_DEPLOY_KEY: $(GITHUB_DEPLOY_KEY)
- task: GithubRelease@0
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
displayName: 'Create GitHub Release'
inputs:
gitHubConnection: alexcrichton-token
repositoryName: rustwasm/wasm-bindgen
assets: gh-release/*.tar.gz