#!/usr/bin/env bash # Build all WASM tools and channels from source. # # Verifies that every tool/channel in the registry compiles against the # current WIT definitions. Used by CI and can be run locally. # # Prerequisites: # rustup target add wasm32-wasip2 # cargo install cargo-component --locked # # Usage: # ./scripts/build-wasm-extensions.sh # build all # ./scripts/build-wasm-extensions.sh --tools # tools only # ./scripts/build-wasm-extensions.sh --channels # channels only set -euo pipefail cd "$(dirname "$0")/.." BUILD_TOOLS=true BUILD_CHANNELS=true FAILED=() if [[ "${1:-}" == "--tools" ]]; then BUILD_CHANNELS=false elif [[ "${1:-}" == "--channels" ]]; then BUILD_TOOLS=false fi build_extension() { local manifest_path="$1" local source_dir local crate_name source_dir=$(jq -r '.source.dir' "$manifest_path") crate_name=$(jq -r '.source.crate_name' "$manifest_path") local name name=$(basename "$manifest_path" .json) if [ ! -d "$source_dir" ]; then echo " SKIP $name (source dir $source_dir not found)" return 0 fi echo " BUILD $name ($crate_name) from $source_dir" if ! cargo component build --release --manifest-path "$source_dir/Cargo.toml" 2>&1; then echo " FAIL $name" FAILED+=("$name") return 1 fi echo " OK $name" } if $BUILD_TOOLS; then echo "Building WASM tools..." for manifest in registry/tools/*.json; do build_extension "$manifest" || true done fi if $BUILD_CHANNELS; then echo "Building WASM channels..." for manifest in registry/channels/*.json; do build_extension "$manifest" || true done fi echo "" if [ ${#FAILED[@]} -gt 0 ]; then echo "FAILED: ${FAILED[*]}" exit 1 else echo "All WASM extensions built successfully." fi