xref: /wasmtime-44.0.1/ci/vendor-wit.sh (revision 694e553b)
1#!/usr/bin/env bash
2
3# Script to re-vendor the WIT files that Wasmtime uses using wkg to fetch
4# packages from the OCI registry.
5#
6# This script is executed on CI to ensure that everything is up-to-date.
7set -ex
8
9# Temporary directory for downloads
10cache_dir=$(mktemp -d)
11trap "rm -rf $cache_dir" EXIT
12
13# Helper to download content from `WebAssembly/$repo` at the `$tag` (or rev)
14# specified. By default `wit/*` is copied into `$path`, or a different
15# subdirectory can be specified with the optional fourth argument.
16get_github() {
17  local repo=$1
18  local tag=$2
19  local path=$3
20  local prefix=${4:-wit}
21
22  rm -rf "$path"
23  mkdir -p "$path"
24
25  cached_extracted_dir="$cache_dir/$prefix/$repo-$tag"
26
27  if [[ ! -d $cached_extracted_dir ]]; then
28    mkdir -p $cached_extracted_dir
29    curl --retry 5 --retry-all-errors -sLO https://github.com/WebAssembly/$repo/archive/$tag.tar.gz
30    tar xzf $tag.tar.gz --strip-components=1 -C $cached_extracted_dir
31    rm $tag.tar.gz
32    rm -rf $cached_extracted_dir/${prefix}/deps*
33  fi
34
35  cp -r $cached_extracted_dir/${prefix}/* $path
36}
37
38p2=0.2.6
39p3=0.3.0-rc-2026-03-15
40
41rm -rf crates/wasi-io/wit/deps
42mkdir -p crates/wasi-io/wit/deps
43wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi-io/wit/deps/io.wit"
44
45rm -rf crates/wasi/src/p2/wit/deps
46mkdir -p crates/wasi/src/p2/wit/deps
47wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi/src/p2/wit/deps/io.wit"
48wkg get --format wit --overwrite "wasi:clocks@$p2" -o "crates/wasi/src/p2/wit/deps/clocks.wit"
49wkg get --format wit --overwrite "wasi:cli@$p2" -o "crates/wasi/src/p2/wit/deps/cli.wit"
50wkg get --format wit --overwrite "wasi:filesystem@$p2" -o "crates/wasi/src/p2/wit/deps/filesystem.wit"
51wkg get --format wit --overwrite "wasi:random@$p2" -o "crates/wasi/src/p2/wit/deps/random.wit"
52wkg get --format wit --overwrite "wasi:sockets@$p2" -o "crates/wasi/src/p2/wit/deps/sockets.wit"
53
54rm -rf crates/wasi-http/wit/deps
55mkdir -p crates/wasi-http/wit/deps
56wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi-http/wit/deps/io.wit"
57wkg get --format wit --overwrite "wasi:clocks@$p2" -o "crates/wasi-http/wit/deps/clocks.wit"
58wkg get --format wit --overwrite "wasi:cli@$p2" -o "crates/wasi-http/wit/deps/cli.wit"
59wkg get --format wit --overwrite "wasi:filesystem@$p2" -o "crates/wasi-http/wit/deps/filesystem.wit"
60wkg get --format wit --overwrite "wasi:random@$p2" -o "crates/wasi-http/wit/deps/random.wit"
61wkg get --format wit --overwrite "wasi:sockets@$p2" -o "crates/wasi-http/wit/deps/sockets.wit"
62wkg get --format wit --overwrite "wasi:http@$p2" -o "crates/wasi-http/wit/deps/http.wit"
63
64
65rm -rf crates/wasi-tls/wit/deps
66mkdir -p crates/wasi-tls/wit/deps
67wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/wasi-tls/wit/deps/io.wit"
68get_github wasi-tls v0.2.0-draft+505fc98 crates/wasi-tls/wit/deps/tls
69
70rm -rf crates/wasi-tls/src/p3/wit/deps
71mkdir -p crates/wasi-tls/src/p3/wit/deps
72get_github wasi-tls 6781ae2 crates/wasi-tls/src/p3/wit/deps/tls wit-0.3.0-draft
73
74rm -rf crates/wasi-config/wit/deps
75mkdir -p crates/wasi-config/wit/deps
76get_github wasi-config v0.2.0-rc.1 crates/wasi-config/wit/deps/config
77
78rm -rf crates/wasi-keyvalue/wit/deps
79mkdir -p crates/wasi-keyvalue/wit/deps
80get_github wasi-keyvalue 219ea36 crates/wasi-keyvalue/wit/deps/keyvalue
81
82rm -rf crates/wasi/src/p3/wit/deps
83mkdir -p crates/wasi/src/p3/wit/deps
84wkg get --format wit --overwrite "wasi:clocks@$p3" -o "crates/wasi/src/p3/wit/deps/clocks.wit"
85wkg get --format wit --overwrite "wasi:cli@$p3" -o "crates/wasi/src/p3/wit/deps/cli.wit"
86wkg get --format wit --overwrite "wasi:filesystem@$p3" -o "crates/wasi/src/p3/wit/deps/filesystem.wit"
87wkg get --format wit --overwrite "wasi:random@$p3" -o "crates/wasi/src/p3/wit/deps/random.wit"
88wkg get --format wit --overwrite "wasi:sockets@$p3" -o "crates/wasi/src/p3/wit/deps/sockets.wit"
89
90rm -rf crates/wasi-http/src/p3/wit/deps
91mkdir -p crates/wasi-http/src/p3/wit/deps
92wkg get --format wit --overwrite "wasi:clocks@$p3" -o "crates/wasi-http/src/p3/wit/deps/clocks.wit"
93wkg get --format wit --overwrite "wasi:cli@$p3" -o "crates/wasi-http/src/p3/wit/deps/cli.wit"
94wkg get --format wit --overwrite "wasi:filesystem@$p3" -o "crates/wasi-http/src/p3/wit/deps/filesystem.wit"
95wkg get --format wit --overwrite "wasi:random@$p3" -o "crates/wasi-http/src/p3/wit/deps/random.wit"
96wkg get --format wit --overwrite "wasi:sockets@$p3" -o "crates/wasi-http/src/p3/wit/deps/sockets.wit"
97wkg get --format wit --overwrite "wasi:http@$p3" -o "crates/wasi-http/src/p3/wit/deps/http.wit"
98
99rm -rf crates/debugger/wit/deps
100mkdir -p crates/debugger/wit/deps
101wkg get --format wit --overwrite "wasi:io@$p2" -o "crates/debugger/wit/deps/io.wit"
102wkg get --format wit --overwrite "wasi:clocks@$p2" -o "crates/debugger/wit/deps/clocks.wit"
103wkg get --format wit --overwrite "wasi:cli@$p2" -o "crates/debugger/wit/deps/cli.wit"
104wkg get --format wit --overwrite "wasi:filesystem@$p2" -o "crates/debugger/wit/deps/filesystem.wit"
105wkg get --format wit --overwrite "wasi:random@$p2" -o "crates/debugger/wit/deps/random.wit"
106wkg get --format wit --overwrite "wasi:sockets@$p2" -o "crates/debugger/wit/deps/sockets.wit"
107
108# wasi-nn is fetched separately since it's not in the standard WASI registry
109repo=https://raw.githubusercontent.com/WebAssembly/wasi-nn
110revision=0.2.0-rc-2024-10-28
111curl --retry 5 --retry-all-errors -L "$repo/$revision/wasi-nn.witx" -o crates/wasi-nn/witx/wasi-nn.witx
112curl --retry 5 --retry-all-errors -L "$repo/$revision/wit/wasi-nn.wit" -o crates/wasi-nn/wit/wasi-nn.wit
113