Skip to content

Commit 8f02366

Browse files
Switch to using wkg for most WIT vendoring (bytecodealliance#12327)
* feat(p3)!: vendor 0.3.0-rc-2026-01-06 Update wasmtime's WASI implementation from version 0.3.0-rc-2025-09-16 to 0.3.0-rc-2026-01-06, using wkg for WIT vendoring. This involves API changes in clocks and HTTP. * ci: install wkg in monolith_checks * Revert back to original WIT versions Also refactor the script a bit to avoid too bash-isms and hopefully make it a bit more straightforward what's happening. --------- Co-authored-by: Bailey Hayes <bailey@cosmonic.com>
1 parent 4a67a85 commit 8f02366

File tree

144 files changed

+9376
-10053
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+9376
-10053
lines changed

.github/workflows/main.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,10 @@ jobs:
507507

508508
# Re-vendor all WIT files and ensure that they're all up-to-date by ensuring
509509
# that there's no git changes.
510+
- name: Install wkg
511+
run: |
512+
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
513+
cargo binstall --no-confirm wkg
510514
- name: Re-vendor WIT
511515
run: ./ci/vendor-wit.sh
512516
- run: git diff --exit-code

ci/vendor-wit.sh

Lines changed: 87 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,97 @@
11
#!/usr/bin/env bash
22

3-
# Script to re-vendor the WIT files that Wasmtime uses as defined by a
4-
# particular tag in upstream repositories.
3+
# Script to re-vendor the WIT files that Wasmtime uses using wkg to fetch
4+
# packages from the OCI registry.
55
#
66
# This script is executed on CI to ensure that everything is up-to-date.
77
set -ex
88

9-
# The make_vendor function takes a base path (e.g., "wasi") and a list
10-
# of packages in the format "name@tag". It constructs the full destination
11-
# path, downloads the tarballs from GitHub, extracts the relevant files, and
12-
# removes any unwanted directories.
13-
make_vendor() {
14-
local name=$1
15-
local packages=$2
16-
local path="crates/$name/wit/deps"
17-
18-
rm -rf $path
19-
mkdir -p $path
20-
21-
for package in $packages; do
22-
IFS='@' read -r repo tag subdir <<< "$package"
23-
mkdir -p "$path/$repo"
24-
cached_extracted_dir="$cache_dir/$repo-$tag"
25-
26-
if [[ ! -d $cached_extracted_dir ]]; then
27-
mkdir -p $cached_extracted_dir
28-
curl --retry 5 --retry-all-errors -sLO https://github.com/WebAssembly/wasi-$repo/archive/$tag.tar.gz
29-
tar xzf $tag.tar.gz --strip-components=1 -C $cached_extracted_dir
30-
rm $tag.tar.gz
31-
rm -rf $cached_extracted_dir/${subdir:-"wit"}/deps*
32-
fi
33-
34-
cp -r $cached_extracted_dir/${subdir:-"wit"}/* $path/$repo
35-
done
36-
}
37-
9+
# Temporary directory for downloads
3810
cache_dir=$(mktemp -d)
11+
trap "rm -rf $cache_dir" EXIT
12+
13+
# Helper to download the `WebAssembly/$repo` dir at the `$tag` (or rev)
14+
# specified. The `wit/*.wit` files are placed in `$path`.
15+
get_github() {
16+
local repo=$1
17+
local tag=$2
18+
local path=$3
19+
20+
rm -rf "$path"
21+
mkdir -p "$path"
22+
23+
cached_extracted_dir="$cache_dir/$repo-$tag"
24+
25+
if [[ ! -d $cached_extracted_dir ]]; then
26+
mkdir -p $cached_extracted_dir
27+
curl --retry 5 --retry-all-errors -sLO https://github.com/WebAssembly/$repo/archive/$tag.tar.gz
28+
tar xzf $tag.tar.gz --strip-components=1 -C $cached_extracted_dir
29+
rm $tag.tar.gz
30+
rm -rf $cached_extracted_dir/wit/deps*
31+
fi
32+
33+
cp -r $cached_extracted_dir/wit/* $path
34+
}
3935

40-
make_vendor "wasi-io" "
41-
io@v0.2.6
42-
"
43-
44-
make_vendor "wasi/src/p2" "
45-
cli@v0.2.6
46-
clocks@v0.2.6
47-
filesystem@v0.2.6
48-
io@v0.2.6
49-
random@v0.2.6
50-
sockets@v0.2.6
51-
"
52-
53-
make_vendor "wasi-http" "
54-
cli@v0.2.6
55-
clocks@v0.2.6
56-
filesystem@v0.2.6
57-
io@v0.2.6
58-
random@v0.2.6
59-
sockets@v0.2.6
60-
http@v0.2.6
61-
"
62-
63-
make_vendor "wasi-tls" "
64-
io@v0.2.6
65-
tls@v0.2.0-draft+505fc98
66-
"
67-
68-
make_vendor "wasi-config" "config@v0.2.0-rc.1"
69-
70-
make_vendor "wasi-keyvalue" "keyvalue@219ea36"
71-
72-
make_vendor "wasi/src/p3" "
73-
cli@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
74-
clocks@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
75-
filesystem@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
76-
random@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
77-
sockets@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
78-
"
79-
80-
make_vendor "wasi-http/src/p3" "
81-
cli@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
82-
clocks@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
83-
filesystem@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
84-
http@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
85-
random@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
86-
sockets@v0.3.0-rc-2025-09-16@wit-0.3.0-draft
87-
"
88-
89-
rm -rf $cache_dir
90-
91-
# Separately (for now), vendor the `wasi-nn` WIT files since their retrieval is
92-
# slightly different than above.
36+
p2=0.2.6
37+
p3=0.3.0-rc-2025-09-16
38+
39+
rm -rf crates/wasi-io/wit/deps
40+
mkdir -p crates/wasi-io/wit/deps
41+
wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi-io/wit/deps/io.wit"
42+
43+
rm -rf crates/wasi/src/p2/wit/deps
44+
mkdir -p crates/wasi/src/p2/wit/deps
45+
wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi/src/p2/wit/deps/io.wit"
46+
wkg get --format wit --overwrite "wasi:clocks@$p2" -o "crates/wasi/src/p2/wit/deps/clocks.wit"
47+
wkg get --format wit --overwrite "wasi:cli@$p2" -o "crates/wasi/src/p2/wit/deps/cli.wit"
48+
wkg get --format wit --overwrite "wasi:filesystem@$p2" -o "crates/wasi/src/p2/wit/deps/filesystem.wit"
49+
wkg get --format wit --overwrite "wasi:random@$p2" -o "crates/wasi/src/p2/wit/deps/random.wit"
50+
wkg get --format wit --overwrite "wasi:sockets@$p2" -o "crates/wasi/src/p2/wit/deps/sockets.wit"
51+
52+
rm -rf crates/wasi-http/wit/deps
53+
mkdir -p crates/wasi-http/wit/deps
54+
wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi-http/wit/deps/io.wit"
55+
wkg get --format wit --overwrite "wasi:clocks@$p2" -o "crates/wasi-http/wit/deps/clocks.wit"
56+
wkg get --format wit --overwrite "wasi:cli@$p2" -o "crates/wasi-http/wit/deps/cli.wit"
57+
wkg get --format wit --overwrite "wasi:filesystem@$p2" -o "crates/wasi-http/wit/deps/filesystem.wit"
58+
wkg get --format wit --overwrite "wasi:random@$p2" -o "crates/wasi-http/wit/deps/random.wit"
59+
wkg get --format wit --overwrite "wasi:sockets@$p2" -o "crates/wasi-http/wit/deps/sockets.wit"
60+
wkg get --format wit --overwrite "wasi:http@$p2" -o "crates/wasi-http/wit/deps/http.wit"
61+
62+
63+
rm -rf crates/wasi-tls/wit/deps
64+
mkdir -p crates/wasi-tls/wit/deps
65+
wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi-tls/wit/deps/io.wit"
66+
get_github wasi-tls v0.2.0-draft+505fc98 crates/wasi-tls/wit/deps/tls
67+
68+
rm -rf crates/wasi-config/wit/deps
69+
mkdir -p crates/wasi-config/wit/deps
70+
get_github wasi-config v0.2.0-rc.1 crates/wasi-config/wit/deps/config
71+
72+
rm -rf crates/wasi-keyvalue/wit/deps
73+
mkdir -p crates/wasi-keyvalue/wit/deps
74+
get_github wasi-keyvalue 219ea36 crates/wasi-keyvalue/wit/deps/keyvalue
75+
76+
rm -rf crates/wasi/src/p3/wit/deps
77+
mkdir -p crates/wasi/src/p3/wit/deps
78+
wkg get --format wit --overwrite "wasi:clocks@$p3" -o "crates/wasi/src/p3/wit/deps/clocks.wit"
79+
wkg get --format wit --overwrite "wasi:cli@$p3" -o "crates/wasi/src/p3/wit/deps/cli.wit"
80+
wkg get --format wit --overwrite "wasi:filesystem@$p3" -o "crates/wasi/src/p3/wit/deps/filesystem.wit"
81+
wkg get --format wit --overwrite "wasi:random@$p3" -o "crates/wasi/src/p3/wit/deps/random.wit"
82+
wkg get --format wit --overwrite "wasi:sockets@$p3" -o "crates/wasi/src/p3/wit/deps/sockets.wit"
83+
84+
rm -rf crates/wasi-http/src/p3/wit/deps
85+
mkdir -p crates/wasi-http/src/p3/wit/deps
86+
wkg get --format wit --overwrite "wasi:clocks@$p3" -o "crates/wasi-http/src/p3/wit/deps/clocks.wit"
87+
wkg get --format wit --overwrite "wasi:cli@$p3" -o "crates/wasi-http/src/p3/wit/deps/cli.wit"
88+
wkg get --format wit --overwrite "wasi:filesystem@$p3" -o "crates/wasi-http/src/p3/wit/deps/filesystem.wit"
89+
wkg get --format wit --overwrite "wasi:random@$p3" -o "crates/wasi-http/src/p3/wit/deps/random.wit"
90+
wkg get --format wit --overwrite "wasi:sockets@$p3" -o "crates/wasi-http/src/p3/wit/deps/sockets.wit"
91+
wkg get --format wit --overwrite "wasi:http@$p3" -o "crates/wasi-http/src/p3/wit/deps/http.wit"
92+
93+
# wasi-nn is fetched separately since it's not in the standard WASI registry
9394
repo=https://raw.githubusercontent.com/WebAssembly/wasi-nn
9495
revision=0.2.0-rc-2024-10-28
95-
curl --retry 5 --retry-all-errors -L $repo/$revision/wasi-nn.witx -o crates/wasi-nn/witx/wasi-nn.witx
96-
curl --retry 5 --retry-all-errors -L $repo/$revision/wit/wasi-nn.wit -o crates/wasi-nn/wit/wasi-nn.wit
96+
curl --retry 5 --retry-all-errors -L "$repo/$revision/wasi-nn.witx" -o crates/wasi-nn/witx/wasi-nn.witx
97+
curl --retry 5 --retry-all-errors -L "$repo/$revision/wit/wasi-nn.wit" -o crates/wasi-nn/wit/wasi-nn.wit

0 commit comments

Comments
 (0)