feat: add module declaration support #1430
This file contains 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: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
build: | |
name: Jco Build | |
runs-on: 'ubuntu-latest' | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 'latest' | |
- name: Install Rust | |
run: rustup update stable --no-self-update && rustup default stable | |
- name: Install wasm32-unknown-unknown target | |
run: rustup target add wasm32-unknown-unknown | |
- name: Install wasm32-wasip1 target | |
run: rustup target add wasm32-wasip1 | |
- name: Install NPM packages | |
run: npm ci | |
- name: Build | |
run: npm run build | |
- name: Upload Jco Build | |
uses: actions/upload-artifact@v4 | |
with: | |
name: jco-build | |
path: obj | |
test-jco: | |
name: Jco Test Suite | |
strategy: | |
matrix: | |
os: [ | |
ubuntu-latest, | |
windows-latest, | |
macos-latest | |
] | |
node: [18.x, 20.x, latest] | |
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 | |
- os: macos-latest | |
node: 18.x | |
- os: windows-latest | |
node: latest | |
- os: windows-latest | |
node: 18.x | |
runs-on: ${{ matrix.os }} | |
needs: [build] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node }} | |
# Determine weval version | |
- name: Determine weval version | |
id: weval-meta | |
shell: bash | |
run: | | |
export WEVAL_LATEST_URL=`curl -Ls -o /dev/null -w %{url_effective} https://github.com/bytecodealliance/weval/releases/latest` | |
export WEVAL_VERSION=${WEVAL_LATEST_URL#https://github.com/bytecodealliance/weval/releases/tag/} | |
echo -e "version=$WEVAL_VERSION" >> $GITHUB_OUTPUT | |
# 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-${{ steps.weval-meta.outputs.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/${{ steps.weval-meta.outputs.version }}/weval-${{ steps.weval-meta.outputs.version }}-x86_64-linux.tar.xz | |
tar -xvJf weval-${{ steps.weval-meta.outputs.version }}-x86_64-linux.tar.xz | |
mv weval-${{ steps.weval-meta.outputs.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/${{ steps.weval-meta.outputs.version }}/weval-${{ steps.weval-meta.outputs.version }}-x86_64-windows.zip | |
unzip weval-${{ steps.weval-meta.outputs.version }}-x86_64-windows.zip | |
mv weval-${{ steps.weval-meta.outputs.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/${{ steps.weval-meta.outputs.version }}/weval-${{ steps.weval-meta.outputs.version }}-aarch64-macos.tar.xz | |
tar -xvJf weval-${{ steps.weval-meta.outputs.version }}-aarch64-macos.tar.xz | |
mkdir .weval-bin | |
mv weval-${{ steps.weval-meta.outputs.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 | |
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 | |
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 | |
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 |