From 13c36fdbfe55250c2692eb338a8565cdbcb2807b Mon Sep 17 00:00:00 2001 From: Anton Whalley Date: Tue, 30 Apr 2024 19:05:41 +0100 Subject: [PATCH] WASI support (#202) * fix: use different claim for wasi Signed-off-by: Anton Whalley * fix: remove main hyper Signed-off-by: Anton Whalley * fix: ignore runtimes docs in wasi test Signed-off-by: Anton Whalley * fix: reference attributed rust-claim Signed-off-by: Anton Whalley * fix: use supported claims Signed-off-by: Anthony Whalley * fix: update ticks Signed-off-by: Anton Whalley * test: wasi target_os and hyper conditional Signed-off-by: Anton Whalley * fix: revert toml format and param for target Signed-off-by: Anton Whalley * fix: remove formatting of cargo file Signed-off-by: Fabrizio Lazzaretti --------- Signed-off-by: Anton Whalley Signed-off-by: Anthony Whalley Signed-off-by: Fabrizio Lazzaretti Co-authored-by: Fabrizio Lazzaretti --- .github/workflows/rust_tests.yml | 21 +++++++++++++++++++-- Cargo.toml | 25 ++++++++++++++++++++++--- tests/version_number.rs | 2 ++ 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/.github/workflows/rust_tests.yml b/.github/workflows/rust_tests.yml index 67749ab..551419f 100644 --- a/.github/workflows/rust_tests.yml +++ b/.github/workflows/rust_tests.yml @@ -22,15 +22,17 @@ jobs: - x86_64-unknown-linux-gnu - x86_64-unknown-linux-musl - wasm32-unknown-unknown + - wasm32-wasi steps: - uses: actions/checkout@v2 + # setup wasmedge + - run: curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | sudo bash -s -- -p /usr/local # Setup musl if needed - run: sudo apt-get update if: matrix.target == 'x86_64-unknown-linux-musl' - run: sudo apt-get install -y musl musl-dev musl-tools cmake if: matrix.target == 'x86_64-unknown-linux-musl' - # # Caching stuff - uses: actions/cache@v2 with: @@ -96,7 +98,22 @@ jobs: command: build toolchain: ${{ matrix.toolchain }} args: --target wasm32-unknown-unknown --features reqwest - + - uses: actions-rs/cargo@v1 + name: "Build" + if: matrix.target == 'wasm32-wasi' + with: + command: build + toolchain: ${{ matrix.toolchain }} + args: --target ${{ matrix.target }} --features "http-binding hyper hyper_wasi" + - uses: actions-rs/cargo@v1 + name: "Test" + if: matrix.target == 'wasm32-wasi' + with: + command: test + toolchain: ${{ matrix.toolchain }} + args: --target ${{ matrix.target }} --features "http-binding hyper hyper_wasi" + env: + CARGO_TARGET_WASM32_WASI_RUNNER: wasmedge # Build examples - uses: actions-rs/cargo@v1 name: "Build reqwest-wasm-example" diff --git a/Cargo.toml b/Cargo.toml index 871c36e..bb72c95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,7 +52,6 @@ async-trait = { version = "^0.1.33", optional = true } bytes = { version = "^1.0", optional = true } futures = { version = "^0.3", optional = true } http = { version = "0.2", optional = true } -hyper = { version = "^0.14", optional = true } axum-lib = { version = "^0.6", optional = true, package="axum"} http-body = { version = "^0.4", optional = true } poem-lib = { version = "=1.2.34", optional = true, package = "poem" } @@ -64,6 +63,12 @@ hostname = "^0.3" [target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies] web-sys = { version = "^0.3", features = ["Window", "Location"] } +[target.'cfg(not(target_os = "wasi"))'.dependencies] +hyper = { version = "^0.14", optional = true } + +[target.'cfg(all(target_arch = "wasm32", target_os = "wasi"))'.dependencies] +hyper_wasi = { version = "0.15", features = ["full"], optional = true } + [dev-dependencies] rstest = "0.6" claims = "0.7.1" @@ -72,11 +77,25 @@ serde_yaml = "0.8" rmp-serde = "1" # runtime dev-deps -actix-rt = { version = "^2" } + url = { version = "^2.1", features = ["serde"] } serde_json = { version = "^1.0" } chrono = { version = "^0.4", features = ["serde"] } mockito = "0.25.1" -tokio = { version = "^1.0", features = ["full"] } mime = "0.3" + + +[target.'cfg(not(target_os = "wasi"))'.dev-dependencies] +actix-rt = { version = "^2" } +tokio = { version = "^1.0", features = ["full"] } tower = { version = "0.4", features = ["util"] } + +[target.'cfg(all(target_arch = "wasm32", target_os = "wasi"))'.dev-dependencies] +tokio_wasi = { version = "1", features = [ + "io-util", + "fs", + "net", + "time", + "rt", + "macros", +] } diff --git a/tests/version_number.rs b/tests/version_number.rs index 288592d..b65761a 100644 --- a/tests/version_number.rs +++ b/tests/version_number.rs @@ -1,9 +1,11 @@ #[test] +#[cfg_attr(target_os = "wasi", ignore)] fn test_readme_deps() { version_sync::assert_markdown_deps_updated!("README.md"); } #[test] +#[cfg_attr(target_os = "wasi", ignore)] fn test_html_root_url() { version_sync::assert_html_root_url_updated!("src/lib.rs"); }