CI #51
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: | |
create: | |
tags: | |
push: | |
branches: | |
- main | |
pull_request: | |
jobs: | |
lint: | |
name: lint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/setup-python@v1 | |
with: | |
python-version: '3.x' | |
- uses: actions/checkout@v1 | |
- name: install tools | |
run: | | |
pip3 install flake8==3.7.8 | |
sudo apt-get install clang-format | |
- run: flake8 | |
- run: ./scripts/clang-format-diff.sh | |
env: | |
GITHUB_EVENT_BEFORE: ${{ github.event.before }} | |
build: | |
name: build | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-12, windows-latest] | |
steps: | |
- uses: actions/setup-python@v1 | |
with: | |
python-version: '3.x' | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- name: install ninja (linux) | |
run: sudo apt-get install ninja-build | |
if: matrix.os == 'ubuntu-latest' | |
- name: install ninja (osx) | |
run: brew install ninja | |
if: matrix.os == 'macos-12' | |
- name: install ninja (win) | |
run: choco install ninja | |
if: matrix.os == 'windows-latest' | |
- name: mkdir | |
run: mkdir -p out | |
- name: cmake | |
run: cmake .. -G Ninja -DWITH_WASI=ON -DWERROR=ON -Werror=dev -Wno-deprecated | |
working-directory: out | |
if: matrix.os != 'windows-latest' | |
- name: cmake (windows) | |
run: cmake .. -DWERROR=ON -Werror=dev | |
working-directory: out | |
if: matrix.os == 'windows-latest' | |
- name: build | |
run: cmake --build out | |
- name: check if generated files are up-to-date | |
run: python ./scripts/check_clean.py | |
- name: unittests | |
run: cmake --build out --target run-unittests | |
- name: c-api-tests | |
run: cmake --build out --target run-c-api-tests | |
- name: tests | |
run: cmake --build out --target run-tests | |
emscripten: | |
name: emscripten | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- name: build | |
run: | | |
docker run -di --name emscripten -v $(pwd):/src emscripten/emsdk:latest bash | |
docker exec emscripten emcc -v | |
docker exec emscripten emcmake cmake . | |
docker exec emscripten make -j 2 VERBOSE=1 | |
wasi: | |
name: wasi | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: build-tools | |
run: | | |
docker run -di --name wasi-sdk -v $(pwd):/src --workdir /src ghcr.io/webassembly/wasi-sdk:wasi-sdk-20 bash | |
docker exec wasi-sdk cmake -S . -B out -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_TESTS=0 -DBUILD_LIBWASM=0 | |
docker exec wasi-sdk cmake --build out --config Release --target install | |
- uses: ./.github/actions/release-archive | |
with: | |
os: wasi | |
sanitize: | |
name: sanitize | |
runs-on: ubuntu-latest | |
env: | |
USE_NINJA: "1" | |
CC: "clang" | |
WASM2C_CFLAGS: "-march=x86-64-v2" # currently required for SIMDe to pass some tests on x86-64 | |
strategy: | |
matrix: | |
sanitizer: [asan, ubsan, fuzz] | |
type: [debug, release] | |
steps: | |
- uses: actions/setup-python@v1 | |
with: | |
python-version: '3.x' | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- run: sudo apt-get install ninja-build | |
- run: make clang-${{ matrix.type }}-${{ matrix.sanitizer }} | |
- if: ${{ matrix.sanitizer }} != fuzz | |
run: make test-clang-${{ matrix.type }}-${{ matrix.sanitizer }} | |
build-wasm2c-memchecked: | |
name: wasm2c-memchecked | |
runs-on: ubuntu-latest | |
env: | |
USE_NINJA: "1" | |
CC: "clang" # used by the wasm2c tests | |
WASM2C_CFLAGS: "-march=x86-64-v2 -fsanitize=address -DWASM_RT_USE_MMAP=0" | |
steps: | |
- uses: actions/setup-python@v1 | |
with: | |
python-version: '3.x' | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- run: sudo apt-get install ninja-build | |
- run: make clang-debug-asan | |
- run: make test-clang-debug-asan | |
build-min-cmake: | |
name: min-cmake | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- uses: actions/setup-python@v1 | |
with: | |
python-version: '3.x' | |
- name: Install Ninja | |
run: sudo apt-get install ninja-build | |
- name: Detect minimum CMake version | |
run: > | |
awk 'match($0, /cmake_minimum_required\(VERSION *([0-9]+\.[0-9]+)\)/, a) | |
{ print "WABT_CMAKE_VER=" a[1]; exit; }' CMakeLists.txt | tee $GITHUB_ENV | |
- name: Install minimum CMake | |
run: | | |
python -m pip install -U setuptools wheel pip | |
python -m pip install "cmake==${WABT_CMAKE_VER}.*" | |
cmake --version | |
- name: Configure WABT | |
run: cmake -G Ninja -S . -B out -DCMAKE_BUILD_TYPE=Release | |
- name: build | |
run: cmake --build out | |
- name: unittests | |
run: cmake --build out --target run-unittests | |
- name: c-api-tests | |
run: cmake --build out --target run-c-api-tests | |
- name: tests | |
run: cmake --build out --target run-tests | |
build-arch: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: [s390x, i386] | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
with: | |
platforms: ${{matrix.arch}} | |
- name: Install distcc | |
run: sudo apt-get install distcc | |
- name: Install cross-compiler (s390x) | |
run: sudo apt-get install g++-s390x-linux-gnu | |
if: ${{ matrix.arch == 's390x' }} | |
- name: Install cross-compiler (i686) | |
run: sudo apt-get install g++-i686-linux-gnu | |
if: ${{ matrix.arch == 'i386' }} | |
- name: Start distcc | |
run: distccd --daemon | |
- name: Build image (s390x) | |
run: docker build --platform linux/${{matrix.arch}} -t --net=host --build-arg COMPILER_ARCH=s390x-linux-gnu wabt -f scripts/Dockerfile . | |
if: ${{ matrix.arch == 's390x' }} | |
- name: Build image (i386) | |
run: docker build --platform linux/${{matrix.arch}} -t --net=host --build-arg COMPILER_ARCH=i686-linux-gnu wabt -f scripts/Dockerfile . | |
if: ${{ matrix.arch == 'i386' }} | |
- name: Unit tests | |
run: docker run --rm -t --net=host wabt cmake --build build --target run-unittests | |
- name: C API tests | |
if: ${{ matrix.arch != 's390x' }} | |
run: docker run --rm -t --net=host wabt cmake --build build --target run-c-api-tests | |
- name: Tests | |
run: docker run --rm -t --net=host wabt cmake --build build --target run-tests |