Parallelism & Portability #108
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test JavaScript | |
| on: | |
| pull_request: | |
| branches: ["main", "main-*"] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| test_nodejs: | |
| name: Test Node.js | |
| runs-on: ubuntu-24.04 | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Update Compilers | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 10 | |
| timeout_minutes: 180 | |
| command: | | |
| sudo apt update | |
| sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Build and Test | |
| run: | | |
| npm install --ignore-scripts | |
| node probes/probe.js | |
| npx node-gyp rebuild | |
| npm run build-js | |
| npm test | |
| test_wasm_emscripten: | |
| name: Test WASM via Emscripten | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Install Emscripten | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: | | |
| rm -rf ~/emsdk | |
| git clone --depth 1 https://github.com/emscripten-core/emsdk.git ~/emsdk | |
| (cd ~/emsdk && ./emsdk install latest && ./emsdk activate latest) | |
| - name: Build WASM | |
| run: | | |
| source ~/emsdk/emsdk_env.sh | |
| cmake -B build-wasm -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasm.cmake -DNK_BUILD_SHARED=ON | |
| cmake --build build-wasm | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Build JavaScript Bindings | |
| run: | | |
| npm install --ignore-scripts | |
| npm run build-js | |
| - name: Test Emscripten Runtime | |
| run: NK_RUNTIME=emscripten node --test test/test-wasm.mjs | |
| test_wasm_emscripten64: | |
| name: Test WASM64 via Emscripten (memory64) | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Install Emscripten | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: | | |
| rm -rf ~/emsdk | |
| git clone --depth 1 https://github.com/emscripten-core/emsdk.git ~/emsdk | |
| (cd ~/emsdk && ./emsdk install latest && ./emsdk activate latest) | |
| - name: Build WASM64 | |
| run: | | |
| source ~/emsdk/emsdk_env.sh | |
| cmake -B build-wasm64 -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasm64.cmake -DNK_BUILD_SHARED=ON | |
| cmake --build build-wasm64 | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 24 | |
| - name: Build JavaScript Bindings | |
| run: | | |
| npm install --ignore-scripts | |
| npm run build-js | |
| - name: Test Emscripten64 Runtime | |
| run: NK_RUNTIME=emscripten64 node --test test/test-wasm.mjs | |
| test_wasm_wasi: | |
| name: Test WASM via WASI Node.js | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Install WASI-SDK | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: | | |
| wget -q https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-24/wasi-sdk-24.0-x86_64-linux.tar.gz | |
| tar xzf wasi-sdk-24.0-x86_64-linux.tar.gz -C ~ | |
| mv ~/wasi-sdk-* ~/wasi-sdk | |
| - name: Build WASI | |
| run: | | |
| export WASI_SDK_PATH=~/wasi-sdk | |
| cmake -B build-wasi -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasi.cmake -DNK_BUILD_TEST=ON -DNK_WASI_HOSTED=ON | |
| cmake --build build-wasi | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Test WASI Runtime | |
| run: NK_RUNTIME=wasi-node node --test test/test-wasm.mjs | |
| test_wasm_browser: | |
| name: Test WASM via Browser | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Install Emscripten | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: | | |
| rm -rf ~/emsdk | |
| git clone --depth 1 https://github.com/emscripten-core/emsdk.git ~/emsdk | |
| (cd ~/emsdk && ./emsdk install latest && ./emsdk activate latest) | |
| - name: Build WASM | |
| run: | | |
| source ~/emsdk/emsdk_env.sh | |
| cmake -B build-wasm -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasm.cmake -DNK_BUILD_SHARED=ON | |
| cmake --build build-wasm | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Build JavaScript Bindings | |
| run: | | |
| npm install --ignore-scripts | |
| npm run build-js | |
| - name: Build Browser Bundle | |
| run: | | |
| cp build-wasm/numkong.js build-wasm/numkong-emscripten.js | |
| npx esbuild javascript/dist/esm/numkong-browser.js \ | |
| --bundle --format=esm --platform=browser --target=es2022 \ | |
| --outfile=build-wasm/numkong-bundle.js | |
| - name: Install Playwright | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: npx playwright install --with-deps chromium | |
| - name: Test Browser runtime | |
| run: npx playwright test --config test/playwright.config.ts | |
| - name: Upload Test Report | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: playwright-report | |
| path: playwright-report/ | |
| retention-days: 7 | |
| test_wasm_wasmer: | |
| name: Test WASM via Wasmer | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Install Rust Toolchain | |
| uses: moonrepo/setup-rust@v1 | |
| - name: Install WASI-SDK | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: | | |
| wget -q https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-24/wasi-sdk-24.0-x86_64-linux.tar.gz | |
| tar xzf wasi-sdk-24.0-x86_64-linux.tar.gz -C ~ | |
| mv ~/wasi-sdk-* ~/wasi-sdk | |
| - name: Build WASI | |
| run: | | |
| export WASI_SDK_PATH=~/wasi-sdk | |
| cmake -B build-wasi -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasi.cmake -DNK_BUILD_TEST=ON | |
| cmake --build build-wasi | |
| - name: Install Wasmer (HEAD for relaxed-SIMD support, not yet in stable) | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 2 | |
| retry_wait_seconds: 30 | |
| timeout_minutes: 180 | |
| command: cargo install wasmer-cli --git https://github.com/wasmerio/wasmer.git --branch main --features cranelift | |
| - name: Test Wasmer runtime | |
| run: wasmer run --enable-simd --enable-relaxed-simd --forward-host-env ./build-wasi/nk_test.wasm | |
| env: | |
| NK_BUDGET_SECS: 0.1 | |
| test_wasm_wasmtime: | |
| name: Test WASM via Wasmtime | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Install Rust Toolchain | |
| uses: moonrepo/setup-rust@v1 | |
| - name: Install WASI-SDK | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 15 | |
| timeout_minutes: 180 | |
| command: | | |
| wget -q https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-24/wasi-sdk-24.0-x86_64-linux.tar.gz | |
| tar xzf wasi-sdk-24.0-x86_64-linux.tar.gz -C ~ | |
| mv ~/wasi-sdk-* ~/wasi-sdk | |
| - name: Build WASI | |
| run: | | |
| export WASI_SDK_PATH=~/wasi-sdk | |
| cmake -B build-wasi -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasi.cmake -DNK_BUILD_TEST=ON | |
| cmake --build build-wasi | |
| - name: Test Wasmtime Runtime | |
| run: cargo test --features wasm-runtime -- wasm_runtime | |
| env: | |
| NK_BUDGET_SECS: 0.1 | |
| test_deno: | |
| name: Test Deno | |
| runs-on: ubuntu-24.04 | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || sysctl -a machdep.cpu 2>/dev/null | head -30 || wmic cpu get Name,NumberOfCores,MaxClockSpeed 2>/dev/null || true | |
| free -h 2>/dev/null || vm_stat 2>/dev/null || systeminfo 2>/dev/null | head -20 || true | |
| echo "::endgroup::" | |
| - name: Update Compilers | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 10 | |
| timeout_minutes: 180 | |
| command: | | |
| sudo apt update | |
| sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Build and Test with Node | |
| run: | | |
| npm install --ignore-scripts | |
| node probes/probe.js | |
| npx node-gyp rebuild | |
| npm run build-js | |
| npm test | |
| - name: Set Up Deno | |
| uses: denoland/setup-deno@v2 | |
| with: | |
| deno-version: v2.x | |
| - name: Test with Deno | |
| run: deno test -A --no-check | |
| test_bun: | |
| name: Test Bun | |
| runs-on: ubuntu-24.04 | |
| env: | |
| CC: gcc-14 | |
| CXX: g++-14 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Print Machine Specs | |
| shell: bash | |
| run: | | |
| echo "::group::Machine Information" | |
| uname -a || true | |
| cat /proc/cpuinfo 2>/dev/null | head -30 || true | |
| free -h 2>/dev/null || true | |
| echo "::endgroup::" | |
| - name: Update Compilers | |
| uses: nick-fields/retry@v4 | |
| with: | |
| max_attempts: 3 | |
| retry_wait_seconds: 10 | |
| timeout_minutes: 180 | |
| command: | | |
| sudo apt update | |
| sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev | |
| - name: Set Up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 22 | |
| - name: Build Prebuilds and JS | |
| run: | | |
| npm install --ignore-scripts | |
| node probes/probe.js | |
| npx node-gyp rebuild | |
| npm run build-js | |
| - name: Test with Node | |
| run: npm test | |
| - name: Set Up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| - name: Test with Bun | |
| run: bun test ./test/test.mjs |