From ffc80f88aa93b470c93fc060217ab009bf80054e Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Wed, 10 Dec 2025 19:52:56 -0500 Subject: [PATCH 1/5] Update wasi interfaces to 0.2.6 - pin rust to 1.91 - drop cargo component in favor of vanilla cargo Signed-off-by: Scott Andrews --- .github/workflows/ci.yaml | 8 -- Makefile | 7 +- rust-toolchain.toml | 3 + .../package.wit | 91 +++++++++++-------- .../package.wit | 18 +++- .../package.wit | 6 +- .../package.wit | 2 +- .../package.wit | 2 +- .../package.wit | 16 ++-- wit/worlds.wit | 8 +- wkg.lock | 6 +- 11 files changed, 97 insertions(+), 70 deletions(-) create mode 100644 rust-toolchain.toml rename wit/deps/{wasi-cli-0.2.3 => wasi-cli-0.2.6}/package.wit (71%) rename wit/deps/{wasi-clocks-0.2.3 => wasi-clocks-0.2.6}/package.wit (55%) rename wit/deps/{wasi-filesystem-0.2.3 => wasi-filesystem-0.2.6}/package.wit (96%) rename wit/deps/{wasi-io-0.2.3 => wasi-io-0.2.6}/package.wit (98%) rename wit/deps/{wasi-random-0.2.3 => wasi-random-0.2.6}/package.wit (91%) rename wit/deps/{wasi-sockets-0.2.3 => wasi-sockets-0.2.6}/package.wit (93%) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fa2e07f..bc16c6d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,10 +14,6 @@ jobs: steps: - uses: actions/checkout@v6 - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - toolchain: 1.84.1 - components: rustfmt - target: wasm32-unknown-unknown,wasm32-wasip2 - name: Install cargo binstall uses: cargo-bins/cargo-binstall@main - name: Install cargo component @@ -61,10 +57,6 @@ jobs: steps: - uses: actions/checkout@v6 - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - toolchain: 1.84.1 - components: rustfmt - target: wasm32-unknown-unknown - name: Install cargo binstall uses: cargo-bins/cargo-binstall@main - name: Install wkg diff --git a/Makefile b/Makefile index 78ccfe5..398d542 100644 --- a/Makefile +++ b/Makefile @@ -20,13 +20,12 @@ components: $(foreach component,$(COMPONENTS),lib/$(component).wasm $(foreach co define BUILD_COMPONENT lib/$1.wasm: Cargo.toml Cargo.lock wit/deps $(shell find components/$1 -type f) - @$(eval TARGET := $(if $(findstring $1,keyvalue-to-filesystem),wasm32-wasip2,wasm32-unknown-unknown)) - cargo component build -p $1 --target $(TARGET) --release - cp target/$(TARGET)/release/$(subst -,_,$1).wasm lib/$1.wasm + cargo build -p $1 --target wasm32-wasip2 --release + cp target/wasm32-wasip2/release/$(subst -,_,$1).wasm lib/$1.wasm cp components/$1/README.md lib/$1.wasm.md lib/$1.debug.wasm: Cargo.toml Cargo.lock wit/deps $(shell find components/$1 -type f) - cargo component build -p $1 --target wasm32-wasip2 + cargo build -p $1 --target wasm32-wasip2 cp target/wasm32-wasip2/debug/$(subst -,_,$1).wasm lib/$1.debug.wasm cp components/$1/README.md lib/$1.debug.wasm.md diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..798c4ad --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "1.91" +targets = [ "wasm32-unknown-unknown", "wasm32-wasip2" ] diff --git a/wit/deps/wasi-cli-0.2.3/package.wit b/wit/deps/wasi-cli-0.2.6/package.wit similarity index 71% rename from wit/deps/wasi-cli-0.2.3/package.wit rename to wit/deps/wasi-cli-0.2.6/package.wit index b86dfec..d7a3ca4 100644 --- a/wit/deps/wasi-cli-0.2.3/package.wit +++ b/wit/deps/wasi-cli-0.2.6/package.wit @@ -1,4 +1,4 @@ -package wasi:cli@0.2.3; +package wasi:cli@0.2.6; @since(version = 0.2.0) interface environment { @@ -28,6 +28,17 @@ interface exit { /// Exit the current instance and any linked instances. @since(version = 0.2.0) exit: func(status: result); + + /// Exit the current instance and any linked instances, reporting the + /// specified status code to the host. + /// + /// The meaning of the code depends on the context, with 0 usually meaning + /// "success", and other values indicating various types of failure. + /// + /// This function does not return; the effect is analogous to a trap, but + /// without the connotation that something bad has happened. + @unstable(feature = cli-exit-with-code) + exit-with-code: func(status-code: u8); } @since(version = 0.2.0) @@ -40,7 +51,7 @@ interface run { @since(version = 0.2.0) interface stdin { @since(version = 0.2.0) - use wasi:io/streams@0.2.3.{input-stream}; + use wasi:io/streams@0.2.6.{input-stream}; @since(version = 0.2.0) get-stdin: func() -> input-stream; @@ -49,7 +60,7 @@ interface stdin { @since(version = 0.2.0) interface stdout { @since(version = 0.2.0) - use wasi:io/streams@0.2.3.{output-stream}; + use wasi:io/streams@0.2.6.{output-stream}; @since(version = 0.2.0) get-stdout: func() -> output-stream; @@ -58,7 +69,7 @@ interface stdout { @since(version = 0.2.0) interface stderr { @since(version = 0.2.0) - use wasi:io/streams@0.2.3.{output-stream}; + use wasi:io/streams@0.2.6.{output-stream}; @since(version = 0.2.0) get-stderr: func() -> output-stream; @@ -134,11 +145,11 @@ world imports { @since(version = 0.2.0) import exit; @since(version = 0.2.0) - import wasi:io/error@0.2.3; + import wasi:io/error@0.2.6; @since(version = 0.2.0) - import wasi:io/poll@0.2.3; + import wasi:io/poll@0.2.6; @since(version = 0.2.0) - import wasi:io/streams@0.2.3; + import wasi:io/streams@0.2.6; @since(version = 0.2.0) import stdin; @since(version = 0.2.0) @@ -156,33 +167,35 @@ world imports { @since(version = 0.2.0) import terminal-stderr; @since(version = 0.2.0) - import wasi:clocks/monotonic-clock@0.2.3; + import wasi:clocks/monotonic-clock@0.2.6; @since(version = 0.2.0) - import wasi:clocks/wall-clock@0.2.3; + import wasi:clocks/wall-clock@0.2.6; + @unstable(feature = clocks-timezone) + import wasi:clocks/timezone@0.2.6; @since(version = 0.2.0) - import wasi:filesystem/types@0.2.3; + import wasi:filesystem/types@0.2.6; @since(version = 0.2.0) - import wasi:filesystem/preopens@0.2.3; + import wasi:filesystem/preopens@0.2.6; @since(version = 0.2.0) - import wasi:sockets/network@0.2.3; + import wasi:sockets/network@0.2.6; @since(version = 0.2.0) - import wasi:sockets/instance-network@0.2.3; + import wasi:sockets/instance-network@0.2.6; @since(version = 0.2.0) - import wasi:sockets/udp@0.2.3; + import wasi:sockets/udp@0.2.6; @since(version = 0.2.0) - import wasi:sockets/udp-create-socket@0.2.3; + import wasi:sockets/udp-create-socket@0.2.6; @since(version = 0.2.0) - import wasi:sockets/tcp@0.2.3; + import wasi:sockets/tcp@0.2.6; @since(version = 0.2.0) - import wasi:sockets/tcp-create-socket@0.2.3; + import wasi:sockets/tcp-create-socket@0.2.6; @since(version = 0.2.0) - import wasi:sockets/ip-name-lookup@0.2.3; + import wasi:sockets/ip-name-lookup@0.2.6; @since(version = 0.2.0) - import wasi:random/random@0.2.3; + import wasi:random/random@0.2.6; @since(version = 0.2.0) - import wasi:random/insecure@0.2.3; + import wasi:random/insecure@0.2.6; @since(version = 0.2.0) - import wasi:random/insecure-seed@0.2.3; + import wasi:random/insecure-seed@0.2.6; } @since(version = 0.2.0) world command { @@ -191,11 +204,11 @@ world command { @since(version = 0.2.0) import exit; @since(version = 0.2.0) - import wasi:io/error@0.2.3; + import wasi:io/error@0.2.6; @since(version = 0.2.0) - import wasi:io/poll@0.2.3; + import wasi:io/poll@0.2.6; @since(version = 0.2.0) - import wasi:io/streams@0.2.3; + import wasi:io/streams@0.2.6; @since(version = 0.2.0) import stdin; @since(version = 0.2.0) @@ -213,33 +226,35 @@ world command { @since(version = 0.2.0) import terminal-stderr; @since(version = 0.2.0) - import wasi:clocks/monotonic-clock@0.2.3; + import wasi:clocks/monotonic-clock@0.2.6; @since(version = 0.2.0) - import wasi:clocks/wall-clock@0.2.3; + import wasi:clocks/wall-clock@0.2.6; + @unstable(feature = clocks-timezone) + import wasi:clocks/timezone@0.2.6; @since(version = 0.2.0) - import wasi:filesystem/types@0.2.3; + import wasi:filesystem/types@0.2.6; @since(version = 0.2.0) - import wasi:filesystem/preopens@0.2.3; + import wasi:filesystem/preopens@0.2.6; @since(version = 0.2.0) - import wasi:sockets/network@0.2.3; + import wasi:sockets/network@0.2.6; @since(version = 0.2.0) - import wasi:sockets/instance-network@0.2.3; + import wasi:sockets/instance-network@0.2.6; @since(version = 0.2.0) - import wasi:sockets/udp@0.2.3; + import wasi:sockets/udp@0.2.6; @since(version = 0.2.0) - import wasi:sockets/udp-create-socket@0.2.3; + import wasi:sockets/udp-create-socket@0.2.6; @since(version = 0.2.0) - import wasi:sockets/tcp@0.2.3; + import wasi:sockets/tcp@0.2.6; @since(version = 0.2.0) - import wasi:sockets/tcp-create-socket@0.2.3; + import wasi:sockets/tcp-create-socket@0.2.6; @since(version = 0.2.0) - import wasi:sockets/ip-name-lookup@0.2.3; + import wasi:sockets/ip-name-lookup@0.2.6; @since(version = 0.2.0) - import wasi:random/random@0.2.3; + import wasi:random/random@0.2.6; @since(version = 0.2.0) - import wasi:random/insecure@0.2.3; + import wasi:random/insecure@0.2.6; @since(version = 0.2.0) - import wasi:random/insecure-seed@0.2.3; + import wasi:random/insecure-seed@0.2.6; @since(version = 0.2.0) export run; diff --git a/wit/deps/wasi-clocks-0.2.3/package.wit b/wit/deps/wasi-clocks-0.2.6/package.wit similarity index 55% rename from wit/deps/wasi-clocks-0.2.3/package.wit rename to wit/deps/wasi-clocks-0.2.6/package.wit index 92f2662..7004aa8 100644 --- a/wit/deps/wasi-clocks-0.2.3/package.wit +++ b/wit/deps/wasi-clocks-0.2.6/package.wit @@ -1,7 +1,7 @@ -package wasi:clocks@0.2.3; +package wasi:clocks@0.2.6; interface monotonic-clock { - use wasi:io/poll@0.2.3.{pollable}; + use wasi:io/poll@0.2.6.{pollable}; type instant = u64; @@ -27,3 +27,17 @@ interface wall-clock { resolution: func() -> datetime; } +interface timezone { + use wall-clock.{datetime}; + + record timezone-display { + utc-offset: s32, + name: string, + in-daylight-saving-time: bool, + } + + display: func(when: datetime) -> timezone-display; + + utc-offset: func(when: datetime) -> s32; +} + diff --git a/wit/deps/wasi-filesystem-0.2.3/package.wit b/wit/deps/wasi-filesystem-0.2.6/package.wit similarity index 96% rename from wit/deps/wasi-filesystem-0.2.3/package.wit rename to wit/deps/wasi-filesystem-0.2.6/package.wit index 1111df1..78bbb1e 100644 --- a/wit/deps/wasi-filesystem-0.2.3/package.wit +++ b/wit/deps/wasi-filesystem-0.2.6/package.wit @@ -1,8 +1,8 @@ -package wasi:filesystem@0.2.3; +package wasi:filesystem@0.2.6; interface types { - use wasi:io/streams@0.2.3.{input-stream, output-stream, error}; - use wasi:clocks/wall-clock@0.2.3.{datetime}; + use wasi:io/streams@0.2.6.{input-stream, output-stream, error}; + use wasi:clocks/wall-clock@0.2.6.{datetime}; type filesize = u64; diff --git a/wit/deps/wasi-io-0.2.3/package.wit b/wit/deps/wasi-io-0.2.6/package.wit similarity index 98% rename from wit/deps/wasi-io-0.2.3/package.wit rename to wit/deps/wasi-io-0.2.6/package.wit index e4d5ef7..72fefbe 100644 --- a/wit/deps/wasi-io-0.2.3/package.wit +++ b/wit/deps/wasi-io-0.2.6/package.wit @@ -1,4 +1,4 @@ -package wasi:io@0.2.3; +package wasi:io@0.2.6; interface error { resource error { diff --git a/wit/deps/wasi-random-0.2.3/package.wit b/wit/deps/wasi-random-0.2.6/package.wit similarity index 91% rename from wit/deps/wasi-random-0.2.3/package.wit rename to wit/deps/wasi-random-0.2.6/package.wit index bc1f891..7adcffa 100644 --- a/wit/deps/wasi-random-0.2.3/package.wit +++ b/wit/deps/wasi-random-0.2.6/package.wit @@ -1,4 +1,4 @@ -package wasi:random@0.2.3; +package wasi:random@0.2.6; interface random { get-random-bytes: func(len: u64) -> list; diff --git a/wit/deps/wasi-sockets-0.2.3/package.wit b/wit/deps/wasi-sockets-0.2.6/package.wit similarity index 93% rename from wit/deps/wasi-sockets-0.2.3/package.wit rename to wit/deps/wasi-sockets-0.2.6/package.wit index e7236e1..6bd7f21 100644 --- a/wit/deps/wasi-sockets-0.2.3/package.wit +++ b/wit/deps/wasi-sockets-0.2.6/package.wit @@ -1,6 +1,8 @@ -package wasi:sockets@0.2.3; +package wasi:sockets@0.2.6; interface network { + use wasi:io/error@0.2.6.{error}; + resource network; enum error-code { @@ -57,6 +59,8 @@ interface network { ipv4(ipv4-socket-address), ipv6(ipv6-socket-address), } + + network-error-code: func(err: borrow) -> option; } interface instance-network { @@ -66,7 +70,7 @@ interface instance-network { } interface udp { - use wasi:io/poll@0.2.3.{pollable}; + use wasi:io/poll@0.2.6.{pollable}; use network.{network, error-code, ip-socket-address, ip-address-family}; record incoming-datagram { @@ -115,9 +119,9 @@ interface udp-create-socket { } interface tcp { - use wasi:io/streams@0.2.3.{input-stream, output-stream}; - use wasi:io/poll@0.2.3.{pollable}; - use wasi:clocks/monotonic-clock@0.2.3.{duration}; + use wasi:io/streams@0.2.6.{input-stream, output-stream}; + use wasi:io/poll@0.2.6.{pollable}; + use wasi:clocks/monotonic-clock@0.2.6.{duration}; use network.{network, error-code, ip-socket-address, ip-address-family}; enum shutdown-type { @@ -166,7 +170,7 @@ interface tcp-create-socket { } interface ip-name-lookup { - use wasi:io/poll@0.2.3.{pollable}; + use wasi:io/poll@0.2.6.{pollable}; use network.{network, error-code, ip-address}; resource resolve-address-stream { diff --git a/wit/worlds.wit b/wit/worlds.wit index 68e26f6..949618e 100644 --- a/wit/worlds.wit +++ b/wit/worlds.wit @@ -1,11 +1,11 @@ package componentized:cli; world stderr-to-stdout { - import wasi:cli/stdout@0.2.3; - export wasi:cli/stderr@0.2.3; + import wasi:cli/stdout@0.2.6; + export wasi:cli/stderr@0.2.6; } world stdout-to-stderr { - import wasi:cli/stderr@0.2.3; - export wasi:cli/stdout@0.2.3; + import wasi:cli/stderr@0.2.6; + export wasi:cli/stdout@0.2.6; } diff --git a/wkg.lock b/wkg.lock index 33d20ed..c924860 100644 --- a/wkg.lock +++ b/wkg.lock @@ -7,6 +7,6 @@ name = "wasi:cli" registry = "wasi.dev" [[packages.versions]] -requirement = "=0.2.3" -version = "0.2.3" -digest = "sha256:8f97d837e1f856a225422869d5c34752204d1befb5a04d0cd80541aec17a20c1" +requirement = "=0.2.6" +version = "0.2.6" +digest = "sha256:fdbe84136b3dd46d94305ef37f24f3cf04a70cc2026dca2592ac2ec0c9de15c7" From e3d7b294275b17308009489f83ed1efdd9b78a7a Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Wed, 10 Dec 2025 19:59:03 -0500 Subject: [PATCH 2/5] remove references to cargo component Signed-off-by: Scott Andrews --- .github/workflows/ci.yaml | 2 -- README.md | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bc16c6d..048daee 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,8 +16,6 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Install cargo binstall uses: cargo-bins/cargo-binstall@main - - name: Install cargo component - run: cargo binstall --force cargo-component - name: Install wkg run: cargo binstall --force wkg - name: Install wasm-tools diff --git a/README.md b/README.md index 78d8e5c..f1a9887 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,7 @@ A collection of utility components that remix wasi:cli types and interfaces. ## Build Prereqs: -- a rust toolchain with a recent nightly (`rustup toolchain install nightly`) -- [`cargo component`](https://github.com/bytecodealliance/cargo-component) +- a rust toolchain - [`wkg`](https://github.com/bytecodealliance/wasm-pkg-tools) ```sh From 6558984ae20cb787c1cc20e11068b8e200b8bb86 Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Wed, 10 Dec 2025 20:04:25 -0500 Subject: [PATCH 3/5] drop wasm32-unknown-unknown Signed-off-by: Scott Andrews --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 798c4ad..01acba8 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] channel = "1.91" -targets = [ "wasm32-unknown-unknown", "wasm32-wasip2" ] +targets = [ "wasm32-wasip2" ] From aa9b1c188a702cb8fc1222b5bc80a1067c5dbdd3 Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Fri, 12 Dec 2025 12:08:37 -0500 Subject: [PATCH 4/5] restore cargo component Signed-off-by: Scott Andrews --- .github/workflows/ci.yaml | 2 ++ Makefile | 4 ++-- README.md | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 048daee..6c566ba 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,6 +18,8 @@ jobs: uses: cargo-bins/cargo-binstall@main - name: Install wkg run: cargo binstall --force wkg + - name: Install cargo-component + run: cargo binstall --force cargo-component - name: Install wasm-tools run: cargo binstall --force wasm-tools - name: Fetch wit diff --git a/Makefile b/Makefile index 398d542..9c86ee5 100644 --- a/Makefile +++ b/Makefile @@ -20,12 +20,12 @@ components: $(foreach component,$(COMPONENTS),lib/$(component).wasm $(foreach co define BUILD_COMPONENT lib/$1.wasm: Cargo.toml Cargo.lock wit/deps $(shell find components/$1 -type f) - cargo build -p $1 --target wasm32-wasip2 --release + cargo component build -p $1 --target wasm32-wasip2 --release cp target/wasm32-wasip2/release/$(subst -,_,$1).wasm lib/$1.wasm cp components/$1/README.md lib/$1.wasm.md lib/$1.debug.wasm: Cargo.toml Cargo.lock wit/deps $(shell find components/$1 -type f) - cargo build -p $1 --target wasm32-wasip2 + cargo component build -p $1 --target wasm32-wasip2 cp target/wasm32-wasip2/debug/$(subst -,_,$1).wasm lib/$1.debug.wasm cp components/$1/README.md lib/$1.debug.wasm.md diff --git a/README.md b/README.md index f1a9887..d593393 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ A collection of utility components that remix wasi:cli types and interfaces. Prereqs: - a rust toolchain +- [`cargo component`](https://github.com/bytecodealliance/cargo-component) - [`wkg`](https://github.com/bytecodealliance/wasm-pkg-tools) ```sh From f9219964009171ba1cbd8030f205d2ff1f2458b7 Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Fri, 12 Dec 2025 12:56:46 -0500 Subject: [PATCH 5/5] use wasm32-unknown-unknown Signed-off-by: Scott Andrews --- Makefile | 4 ++-- rust-toolchain.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 9c86ee5..51bf186 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,8 @@ components: $(foreach component,$(COMPONENTS),lib/$(component).wasm $(foreach co define BUILD_COMPONENT lib/$1.wasm: Cargo.toml Cargo.lock wit/deps $(shell find components/$1 -type f) - cargo component build -p $1 --target wasm32-wasip2 --release - cp target/wasm32-wasip2/release/$(subst -,_,$1).wasm lib/$1.wasm + cargo component build -p $1 --target wasm32-unknown-unknown --release + cp target/wasm32-unknown-unknown/release/$(subst -,_,$1).wasm lib/$1.wasm cp components/$1/README.md lib/$1.wasm.md lib/$1.debug.wasm: Cargo.toml Cargo.lock wit/deps $(shell find components/$1 -type f) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 01acba8..798c4ad 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] channel = "1.91" -targets = [ "wasm32-wasip2" ] +targets = [ "wasm32-unknown-unknown", "wasm32-wasip2" ]