diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f00022a70..55bc21fa0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -45,6 +45,15 @@ jobs: macos-latest ] node: [18.x, 20.x, latest] + weval-version: + - 'v0.3.2' + include: + - os: windows-latest + weval-bin-path: .weval-bin/weval.exe + - os: ubuntu-latest + weval-bin-path: .weval-bin/weval + - os: macos-latest + weval-bin-path: .weval-bin/weval exclude: - os: macos-latest node: 20.x @@ -61,153 +70,186 @@ jobs: - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} + + # Use cached weval bin if present + - name: Cache weval bin + id: cache-weval-bin + uses: actions/cache@v4 + with: + path: .weval-bin + key: weval-bin-${{ matrix.weval-version }}-${{ matrix.os }} + + # (no cached weval bin) download weval release + - if: ${{ steps.cache-weval-bin.outputs.cache-hit != 'true' && matrix.os == 'ubuntu-latest' }} + run: | + curl -LO https://github.com/bytecodealliance/weval/releases/download/${{ matrix.weval-version }}/weval-${{ matrix.weval-version }}-x86_64-linux.tar.xz + tar -xvJf weval-${{ matrix.weval-version }}-x86_64-linux.tar.xz + mv weval-${{ matrix.weval-version }}-x86_64-linux/weval .weval-bin + - if: ${{ steps.cache-weval-bin.outputs.cache-hit != 'true' && matrix.os == 'windows-latest' }} + run: | + curl -LO https://github.com/bytecodealliance/weval/releases/download/${{ matrix.weval-version }}/weval-${{ matrix.weval-version }}-x86_64-windows.zip + unzip weval-${{ matrix.weval-version }}-x86_64-windows.zip + mv weval-${{ matrix.weval-version }}-x86_64-windows .weval-bin + - if: ${{ steps.cache-weval-bin.outputs.cache-hit != 'true' && matrix.os == 'macos-latest' }} + run: | + curl -LO https://github.com/bytecodealliance/weval/releases/download/${{ matrix.weval-version }}/weval-${{ matrix.weval-version }}-aarch64-macos.tar.xz + tar -xvJf weval-${{ matrix.weval-version }}-aarch64-macos.tar.xz + mkdir .weval-bin + mv weval-${{ matrix.weval-version }}-aarch64-macos/weval .weval-bin/ + + # Perform NPM install - name: Install NPM packages run: npm ci + - name: Download Build uses: actions/download-artifact@v4 with: name: jco-build path: obj + - name: Test LTS Node.js run: npm run test:lts if: matrix.node == '18.x' || matrix.node == '20.x' + - name: Test Latest Node.js - run: npm run test if: matrix.node == 'latest' + env: + WEVAL_BIN_PATH: ${{ matrix.weval-bin-path }} + run: npm run test - build-wasi-tests: - name: WASI Test Generation - runs-on: ubuntu-latest - outputs: - cache-key: ${{ steps.cache-wasi-tests.outputs.cache-primary-key }} - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - name: Cache WASI Tests - id: cache-wasi-tests - uses: actions/cache@v4 - with: - path: tests/gen - key: wasi-${{ hashFiles('xtask/src/generate/preview2_tests.rs', 'submodules/wasmtime/Cargo.lock') }} - - name: Install Rust - if: steps.cache-wasi-tests.outputs.cache-hit != 'true' - run: rustup update stable --no-self-update && rustup default stable - - name: Install wasm32-unknown-unknown target - if: steps.cache-wasi-tests.outputs.cache-hit != 'true' - run: rustup target add wasm32-unknown-unknown - - name: Install wasm32-wasip1 target - if: steps.cache-wasi-tests.outputs.cache-hit != 'true' - run: rustup target add wasm32-wasip1 - - name: Install wasm-tools - if: steps.cache-wasi-tests.outputs.cache-hit != 'true' - run: cargo install wasm-tools - - name: Generate WASI Tests - if: steps.cache-wasi-tests.outputs.cache-hit != 'true' - run: cargo xtask generate preview2-tests - - name: Upload Generated WASI Tests - uses: actions/upload-artifact@v4 - with: - name: wasi-tests - path: tests/gen + # build-wasi-tests: + # name: WASI Test Generation + # runs-on: ubuntu-latest + # outputs: + # cache-key: ${{ steps.cache-wasi-tests.outputs.cache-primary-key }} + # steps: + # - uses: actions/checkout@v4 + # with: + # submodules: recursive + # - name: Cache WASI Tests + # id: cache-wasi-tests + # uses: actions/cache@v4 + # with: + # path: tests/gen + # key: wasi-${{ hashFiles('xtask/src/generate/preview2_tests.rs', 'submodules/wasmtime/Cargo.lock') }} + # - name: Install Rust + # if: steps.cache-wasi-tests.outputs.cache-hit != 'true' + # run: rustup update stable --no-self-update && rustup default stable + # - name: Install wasm32-unknown-unknown target + # if: steps.cache-wasi-tests.outputs.cache-hit != 'true' + # run: rustup target add wasm32-unknown-unknown + # - name: Install wasm32-wasip1 target + # if: steps.cache-wasi-tests.outputs.cache-hit != 'true' + # run: rustup target add wasm32-wasip1 + # - name: Install wasm-tools + # if: steps.cache-wasi-tests.outputs.cache-hit != 'true' + # run: cargo install wasm-tools + # - name: Generate WASI Tests + # if: steps.cache-wasi-tests.outputs.cache-hit != 'true' + # run: cargo xtask generate preview2-tests + # - name: Upload Generated WASI Tests + # uses: actions/upload-artifact@v4 + # with: + # name: wasi-tests + # path: tests/gen - test-wasi-deno: - name: Jco Deno WASI Conformance Tests - runs-on: 'ubuntu-latest' - needs: [build, build-wasi-tests] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version: 'latest' - - uses: denoland/setup-deno@v1 - with: - deno-version: v1.x - - name: Install NPM packages - run: npm ci - - name: Download Build - uses: actions/download-artifact@v4 - with: - name: jco-build - path: obj - - name: Download WASI Tests - uses: actions/download-artifact@v4 - with: - name: wasi-tests - path: tests/gen - - name: WASI Preview 2 Conformance - run: cargo test deno_ + # test-wasi-deno: + # name: Jco Deno WASI Conformance Tests + # runs-on: 'ubuntu-latest' + # needs: [build, build-wasi-tests] + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-node@v3 + # with: + # node-version: 'latest' + # - uses: denoland/setup-deno@v1 + # with: + # deno-version: v1.x + # - name: Install NPM packages + # run: npm ci + # - name: Download Build + # uses: actions/download-artifact@v4 + # with: + # name: jco-build + # path: obj + # - name: Download WASI Tests + # uses: actions/download-artifact@v4 + # with: + # name: wasi-tests + # path: tests/gen + # - name: WASI Preview 2 Conformance + # run: cargo test deno_ - test-wasi: - name: Jco Node.js WASI Conformance Tests - strategy: - matrix: - os: [ - ubuntu-latest, - windows-latest, - macos-latest - ] - node: [18.x, 20.x, latest] - exclude: - - os: macos-latest - node: 20.x - - os: macos-latest - node: 18.x - - os: windows-latest - node: 20.x - - os: windows-latest - node: 18.x - fail-fast: false - runs-on: ${{ matrix.os }} - needs: [build, build-wasi-tests] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - - name: Install NPM packages - run: npm ci - - name: Download Build - uses: actions/download-artifact@v4 - with: - name: jco-build - path: obj - - name: Download WASI Tests - uses: actions/download-artifact@v4 - with: - name: wasi-tests - path: tests/gen - - name: WASI Preview 2 Conformance - run: cargo test node_ - - test-workspaces: - name: Test Workspaces - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Install NPM packages - run: npm ci - - name: Test Workspaces - run: npm run test --workspaces + # test-wasi: + # name: Jco Node.js WASI Conformance Tests + # strategy: + # matrix: + # os: [ + # ubuntu-latest, + # windows-latest, + # macos-latest + # ] + # node: [18.x, 20.x, latest] + # exclude: + # - os: macos-latest + # node: 20.x + # - os: macos-latest + # node: 18.x + # - os: windows-latest + # node: 20.x + # - os: windows-latest + # node: 18.x + # fail-fast: false + # runs-on: ${{ matrix.os }} + # needs: [build, build-wasi-tests] + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-node@v3 + # with: + # node-version: ${{ matrix.node }} + # - name: Install NPM packages + # run: npm ci + # - name: Download Build + # uses: actions/download-artifact@v4 + # with: + # name: jco-build + # path: obj + # - name: Download WASI Tests + # uses: actions/download-artifact@v4 + # with: + # name: wasi-tests + # path: tests/gen + # - name: WASI Preview 2 Conformance + # run: cargo test node_ - eslint: - name: ESLint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Install NPM packages - run: npm ci - - name: Lint - run: npm run lint + # test-workspaces: + # name: Test Workspaces + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # - name: Install NPM packages + # run: npm ci + # - name: Test Workspaces + # run: npm run test --workspaces - rustfmt: - name: Rustfmt - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Install Rust - run: rustup update stable && rustup default stable && rustup component add rustfmt - - name: Remove tests mod - run: rm -r tests/mod.rs - - name: Format source code - run: cargo fmt -- --check + # eslint: + # name: ESLint + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # - name: Install NPM packages + # run: npm ci + # - name: Lint + # run: npm run lint + + # rustfmt: + # name: Rustfmt + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # - name: Install Rust + # run: rustup update stable && rustup default stable && rustup component add rustfmt + # - name: Remove tests mod + # run: rm -r tests/mod.rs + # - name: Format source code + # run: cargo fmt -- --check diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 67e145bf0..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v20.18.0 diff --git a/test/cli.js b/test/cli.js index 806aed85b..07277d97e 100644 --- a/test/cli.js +++ b/test/cli.js @@ -1,5 +1,5 @@ import { resolve } from "node:path"; -import { execArgv } from "node:process"; +import { execArgv, env } from "node:process"; import { deepStrictEqual, ok, strictEqual } from "node:assert"; import { mkdir, @@ -504,7 +504,7 @@ export async function cliTest(_fixtures) { }); test("Componentize", async () => { - const { stdout, stderr } = await exec( + const args = [ jcoPath, "componentize", "test/fixtures/componentize/source.js", @@ -515,7 +515,12 @@ export async function cliTest(_fixtures) { "test/fixtures/componentize/source.wit", "-o", outFile - ); + ]; + if (env.WEVAL_BIN_PATH) { + args.push("--weval-bin", env.WEVAL_BIN_PATH); + } + + const { stdout, stderr } = await exec(...args); strictEqual(stderr, ""); { const { stderr } = await exec(