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