From c6e54793117789efc23f49a55cf604f466194acd Mon Sep 17 00:00:00 2001 From: Donghao Ren Date: Wed, 27 Aug 2025 21:36:04 -0700 Subject: [PATCH 1/3] test: build wasm modules in CI --- .github/workflows/ci.yml | 8 ++++++++ packages/density-clustering/package.json | 2 +- .../third_party/download_dependencies.sh | 2 +- scripts/build.sh | 2 ++ scripts/build_wasm.sh | 19 +++++++++++++++++++ 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100755 scripts/build_wasm.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2a893fe..18887be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,6 +34,11 @@ jobs: with: python-version: "3.11" + - name: Setup emsdk + uses: mymindstorm/setup-emsdk@v14 + with: + version: 4.0.13 + - name: Set up uv package manager uses: astral-sh/setup-uv@v5 @@ -50,6 +55,9 @@ jobs: if: steps.cache-demo-data.outputs.cache-hit != 'true' run: cd packages/docs && uv run generate_demo_data.py + - name: Run custom build script + run: ./scripts/build_wasm.sh + - name: Run custom build script run: ./scripts/build.sh diff --git a/packages/density-clustering/package.json b/packages/density-clustering/package.json index 42049fb..fe1db41 100644 --- a/packages/density-clustering/package.json +++ b/packages/density-clustering/package.json @@ -7,7 +7,7 @@ "module": "density_clustering_wasm/js/index.js", "type": "module", "scripts": { - "build": "npx wasm-pack build --release --target web density_clustering_wasm && rm density_clustering_wasm/pkg/.gitignore density_clustering_wasm/pkg/package.json" + "build": "npx -y wasm-pack build --release --target web density_clustering_wasm && rm density_clustering_wasm/pkg/.gitignore density_clustering_wasm/pkg/package.json" }, "files": [ "density_clustering_wasm/js/index.js", diff --git a/packages/umap-wasm/third_party/download_dependencies.sh b/packages/umap-wasm/third_party/download_dependencies.sh index 6c3c636..21bfadf 100755 --- a/packages/umap-wasm/third_party/download_dependencies.sh +++ b/packages/umap-wasm/third_party/download_dependencies.sh @@ -69,5 +69,5 @@ download https://github.com/nmslib/hnswlib.git v0.8.0 hnswlib # BSD-2-Clause License download https://github.com/brj0/nndescent.git 514275f263be010712530a95e56ffc9b81b9110b nndescent pushd nndescent -git apply ../nndescent.patch +git apply ../nndescent.patch || true popd diff --git a/scripts/build.sh b/scripts/build.sh index fb9e08e..f53cd22 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,7 @@ #!/bin/bash +# Build all JavaScript and Python packages + set -euxo pipefail pushd packages/component diff --git a/scripts/build_wasm.sh b/scripts/build_wasm.sh new file mode 100755 index 0000000..dfc6881 --- /dev/null +++ b/scripts/build_wasm.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Build WASM modules + +set -euxo pipefail + +pushd packages/density-clustering +npm run build +popd + +pushd packages/umap-wasm + +pushd third_party +./download_dependencies.sh +popd + +make + +popd \ No newline at end of file From 1109c688a5e6ce847368486b9f2e1fb328cd2f45 Mon Sep 17 00:00:00 2001 From: Donghao Ren Date: Wed, 27 Aug 2025 21:44:52 -0700 Subject: [PATCH 2/3] fix: missing EXPORTED_RUNTIME_METHODS --- packages/umap-wasm/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/umap-wasm/Makefile b/packages/umap-wasm/Makefile index 5b4500c..7eb5fb0 100644 --- a/packages/umap-wasm/Makefile +++ b/packages/umap-wasm/Makefile @@ -23,6 +23,7 @@ runtime.js: $(SOURCES) $(HEADERS) -DUMAPPP_NO_PARALLEL_OPTIMIZATION \ -sENVIRONMENT=web \ -sMODULARIZE -sSINGLE_FILE -sALLOW_MEMORY_GROWTH \ + -sEXPORTED_RUNTIME_METHODS='["HEAP32", "HEAPF32", "HEAPU8"]' \ -sWASM_BIGINT=1 \ -msimd128 \ -o runtime.mjs From 8f5a33d58b5c3246cf8df4d42e7544bdf177ccc1 Mon Sep 17 00:00:00 2001 From: Donghao Ren Date: Wed, 27 Aug 2025 22:14:18 -0700 Subject: [PATCH 3/3] Improve names --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18887be..b67dad1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,10 +55,10 @@ jobs: if: steps.cache-demo-data.outputs.cache-hit != 'true' run: cd packages/docs && uv run generate_demo_data.py - - name: Run custom build script + - name: Build WASM modules run: ./scripts/build_wasm.sh - - name: Run custom build script + - name: Build JavaScript and Python packages run: ./scripts/build.sh - name: Upload node package artifact