Add macOS into the CI build #33
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: Build | |
on: | |
workflow_call: | |
pull_request: | |
push: | |
branches: | |
- main | |
jobs: | |
build-and-test: | |
strategy: | |
fail-fast: false | |
matrix: | |
metadata: [ | |
{ | |
name: "Ubuntu (x86 native)", | |
os: ubuntu-latest, | |
bin-path: target/release-compact/winterjs, | |
artifact-name: winterjs-linux-x86, | |
target: native, | |
}, | |
{ | |
name: "macOS (arm native)", | |
os: macos-latest, | |
homebrew-prefix: /opt/homebrew, | |
bin-path: target/release-compact/winterjs, | |
artifact-name: winterjs-macos-arm, | |
target: native, | |
}, | |
{ | |
name: "macOS (x86 native)", | |
os: macos-13, | |
homebrew-prefix: /usr/local, | |
bin-path: target/release-compact/winterjs, | |
artifact-name: winterjs-macos-x86, | |
target: native, | |
}, | |
{ | |
name: "Ubuntu (wasix)", | |
os: ubuntu-latest, | |
bin-path: target/wasm32-wasmer-wasi/release/winterjs.wasm, | |
artifact-name: winterjs-wasix, | |
target: wasix, | |
wasix-toolchain-release-asset: rust-toolchain-x86_64-unknown-linux-gnu.tar.gz | |
}, | |
{ | |
name: "macOS (wasix)", | |
os: macos-latest, | |
homebrew-prefix: /opt/homebrew, | |
bin-path: target/release-compact/winterjs, | |
artifact-name: winterjs-macos-wasix, | |
target: wasix, | |
wasix-toolchain-release-asset: rust-toolchain-aarch64-apple-darwin.tar.gz | |
} | |
] | |
name: Build and Test - ${{ matrix.metadata.name }} | |
runs-on: ${{ matrix.metadata.os }} | |
steps: | |
- name: Check out | |
uses: actions/checkout@v3 | |
with: | |
submodules: "recursive" | |
- name: OS Setup (Ubuntu) | |
if: ${{ matrix.metadata.os == 'ubuntu-latest' }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential python3.11 python3-distutils llvm-15 libclang-dev clang-15 wabt | |
npm i -g wasm-opt pnpm concurrently | |
sudo rm /usr/bin/clang | |
sudo rm /usr/bin/clang++ | |
sudo ln -s /usr/bin/clang-15 /usr/bin/clang | |
sudo ln -s /usr/bin/clang++-15 /usr/bin/clang++ | |
sudo ln -s /usr/bin/llvm-ar-15 /usr/bin/llvm-ar | |
sudo ln -s /usr/bin/llvm-nm-15 /usr/bin/llvm-nm | |
sudo ln -s /usr/bin/llvm-ranlib-15 /usr/bin/llvm-ranlib | |
sudo ln -s /usr/bin/llvm-objdump-15 /usr/bin/llvm-objdump | |
- name: OS Setup (macOS) | |
if: ${{ startsWith(matrix.metadata.os, 'macos-') }} | |
run: | | |
brew install wabt llvm@15 | |
echo PATH="${{ matrix.metadata.homebrew-prefx }}/opt/llvm@15/bin:$PATH" >> $GITHUB_ENV | |
npm i -g wasm-opt pnpm concurrently | |
- name: Tool Versions | |
run: | | |
echo clang | |
clang -v | |
echo '####################' | |
echo llvm-ar | |
llvm-ar -V | |
echo '####################' | |
echo llvm-nm | |
llvm-nm -V | |
echo '####################' | |
echo llvm-ranlib | |
llvm-ranlib -v | |
echo '####################' | |
echo wasm-opt | |
wasm-opt --version | |
echo '####################' | |
echo wasm-strip | |
wasm-strip --version | |
echo '####################' | |
echo python | |
python3.11 -V | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: "1.76" | |
components: "clippy,rustfmt" | |
- name: Setup Wasmer | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
uses: wasmerio/setup-wasmer@v3.1 | |
- name: Download wasix-libc | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
uses: dsaltares/fetch-gh-release-asset@1.1.2 | |
with: | |
repo: wasix-org/rust | |
file: wasix-libc.tar.gz | |
target: sysroot/wasix-libc.tar.gz | |
- name: Unpack wasix-libc | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
run: | | |
cd sysroot | |
tar xzf wasix-libc.tar.gz | |
- name: Download wasix toolchain | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
uses: dsaltares/fetch-gh-release-asset@1.1.2 | |
with: | |
repo: wasix-org/rust | |
file: ${{ matrix.metadata.wasix-toolchain-release-asset }} | |
target: wasix-rust-toolchain/toolchain.tar.gz | |
- name: Install wasix toolchain | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
run: | | |
cd wasix-rust-toolchain | |
tar xzf toolchain.tar.gz | |
chmod +x bin/* | |
chmod +x lib/rustlib/*/bin/* | |
chmod +x lib/rustlib/*/bin/gcc-ld/* | |
rustup toolchain link wasix . | |
- name: Build native | |
if: ${{ matrix.metadata.target == 'native' }} | |
run: cargo build --profile release-compact | |
- name: Build wasix | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
run: | | |
export WASI_SYSROOT=$(pwd)/sysroot/wasix-libc/sysroot32 | |
bash build.sh | |
- name: Archive build | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.metadata.artifact-name }} | |
path: ${{ matrix.metadata.bin-path }} | |
- name: build test suite JS app | |
run: | | |
cd test-suite/js-test-app | |
pnpm i | |
pnpm run build | |
- name: Run API test suite (wasix) | |
# note: we're counting on wasmer compiling and running WinterJS faster | |
# that cargo builds the test-suite app. This may not be the case forever. | |
if: ${{ matrix.metadata.target == 'wasix' }} | |
run: | | |
conc --kill-others --success "command-1" \ | |
"wasmer run . --net --mapdir /app:./test-suite/js-test-app/dist -- serve /app/bundle.js" \ | |
"sleep 10 && cd test-suite && cargo run" | |
echo All tests are passing! 🎉 | |
- name: Run API test suite (native) | |
# note: we're counting on wasmer compiling and running WinterJS faster | |
# that cargo builds the test-suite app. This may not be the case forever. | |
if: ${{ matrix.metadata.target == 'native' }} | |
run: | | |
conc --kill-others --success "command-1" \ | |
"./target/release-compact/winterjs serve ./test-suite/js-test-app/dist/bundle.js" \ | |
"sleep 10 && cd test-suite && cargo run" | |
echo All tests are passing! 🎉 |