diff options
| author | rawan10101 <rawan_khalid@aucegypt.edu> | 2026-08-08 22:28:43 +0300 |
|---|---|---|
| committer | rawan10101 <rawan_khalid@aucegypt.edu> | 2026-08-13 15:23:48 +0300 |
| commit | 0eddc16ed0badae1fecc4e005d4e1f317b6d4102 (patch) | |
| tree | 6a9948c039e04f7a6366d97b382c9a2355193a25 /.github/scripts | |
| parent | 014b00a6420d34b80ebf4f6ac9aebd88fe236e5d (diff) | |
| download | rneovim-0eddc16ed0badae1fecc4e005d4e1f317b6d4102.tar.gz rneovim-0eddc16ed0badae1fecc4e005d4e1f317b6d4102.tar.bz2 rneovim-0eddc16ed0badae1fecc4e005d4e1f317b6d4102.zip | |
ci: add nvim.wasm build and nightly release
Add a dedicated nvim.wasm build workflow and
include the resulting WASM artifact in nightly releases.
Diffstat (limited to '.github/scripts')
| -rwxr-xr-x | .github/scripts/build_wasm.sh | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/.github/scripts/build_wasm.sh b/.github/scripts/build_wasm.sh new file mode 100755 index 0000000000..0ca95da381 --- /dev/null +++ b/.github/scripts/build_wasm.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash + +# Build nvim.wasm + +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +OUTDIR="$ROOT/build-wasm" + +source "$ROOT/.emsdk/emsdk_env.sh" + +mkdir -p "$OUTDIR" + +if ! command -v emcc >/dev/null 2>&1; then + echo "ERROR: emcc not found" + exit 1 +fi + +if ! command -v zig >/dev/null 2>&1; then + echo "ERROR: zig not found" + exit 1 +fi + +emcc --version +zig version + +# Install Binaryen if it is not already available. +BINARYEN_VERSION=132 +BINARYEN_DIR="$ROOT/.binaryen" +BINARYEN_BIN="$BINARYEN_DIR/binaryen-version_${BINARYEN_VERSION}/bin" + +if [ ! -x "$BINARYEN_BIN/wasm-opt" ]; then + echo "Installing Binaryen ${BINARYEN_VERSION}..." + + mkdir -p "$BINARYEN_DIR" + + curl -L \ + "https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz" \ + -o /tmp/binaryen.tar.gz + + tar -xf /tmp/binaryen.tar.gz -C "$BINARYEN_DIR" +fi + +export PATH="$BINARYEN_BIN:$PATH" + +wasm-opt --version + +zig build nvim_bin \ + -Dtarget=wasm32-emscripten \ + -Dcpu=generic+atomics+bulk_memory+mutable_globals \ + -Demscripten-sysroot="$EMSDK/upstream/emscripten/cache/sysroot" \ + -Doptimize=ReleaseSmall + +ZIG_OUT="$ROOT/zig-out/bin" + +# Optimize the final WASM artifact with Binaryen. +wasm-opt -Oz -o "$ZIG_OUT/nvim.wasm" "$ZIG_OUT/nvim.wasm" + +required=( + nvim.wasm + nvim.js + nvim.data +) + +missing=() + +for name in "${required[@]}"; do + if [ -f "$ZIG_OUT/$name" ]; then + cp "$ZIG_OUT/$name" "$OUTDIR/$name" + else + missing+=("$name") + fi +done + +if [ "${#missing[@]}" -ne 0 ]; then + echo "ERROR: Missing required WASM artifacts: ${missing[*]}" + ls -la "$ZIG_OUT" || true + exit 2 +fi + +echo "build-wasm.sh finished successfully." |