mirror of
https://github.com/encounter/jco.git
synced 2026-03-30 11:18:26 -07:00
263 lines
8.0 KiB
YAML
263 lines
8.0 KiB
YAML
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-22.04, # https://github.com/puppeteer/puppeteer/issues/12818#issuecomment-2593659514
|
|
windows-latest,
|
|
macos-latest
|
|
]
|
|
node: [18.x, 20.x, latest]
|
|
include:
|
|
- os: windows-latest
|
|
weval-bin-path: .weval-bin/weval.exe
|
|
- os: ubuntu-22.04
|
|
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
|