Skip to content

Commit

Permalink
Add emscripten gha workflow
Browse files Browse the repository at this point in the history
Resolves issue #767
  • Loading branch information
hoodmane committed Feb 8, 2023
1 parent 44cb326 commit 094bc11
Show file tree
Hide file tree
Showing 4 changed files with 194 additions and 2 deletions.
177 changes: 177 additions & 0 deletions .github/workflows/emscripten.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
name: CI emscripten

# Controls when the action will run.
on:
# Triggers the workflow on push or pull request events but only for the master branch
push:
branches: [ master ]
pull_request:
branches: [ master ]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:


env:
PYODIDE_VERSION: 0.22.1
# PYTHON_VERSION and EMSCRIPTEN_VERSION are determined by PYODIDE_VERSION.
# The appropriate versions can be found in the Pyodide repodata.json
# "info" field, or in Makefile.envs:
# https://github.com/pyodide/pyodide/blob/main/Makefile.envs#L2
PYTHON_VERSION: 3.10.7
EMSCRIPTEN_VERSION: 3.1.27
EM_CACHE_FOLDER: emsdk-cache

jobs:
setup-emsdk-cache:
runs-on: ubuntu-22.04
steps:
- name: Setup cache
id: cache-system-libraries
uses: actions/cache@v3
with:
path: ${{env.EM_CACHE_FOLDER}}
key: ${{env.EMSCRIPTEN_VERSION}}

- uses: mymindstorm/setup-emsdk@v12
with:
version: ${{ env.EMSCRIPTEN_VERSION }}
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}

test-dejagnu:
strategy:
matrix:
bigint: ["--wasm-bigint", ""]
runs-on: ubuntu-22.04
needs: [setup-emsdk-cache]
steps:
- name: Checkout
uses: actions/checkout@v3

- name: set up python
id: setup-python
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Setup cache
id: cache-system-libraries
uses: actions/cache@v3
with:
path: ${{env.EM_CACHE_FOLDER}}
key: ${{env.EMSCRIPTEN_VERSION}}

- uses: mymindstorm/setup-emsdk@v12
with:
version: ${{ env.EMSCRIPTEN_VERSION }}
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}

- name: Install dejagnu
shell: bash -l {0}
run: |
sudo apt install -y dejagnu
- name: run tests
run: |
testsuite/emscripten/node-tests.sh ${{ matrix.bigint }}
- name: Install rlgl and run
run: |
wget -qO - https://rl.gl/cli/rlgl-linux-amd64.tgz | \
tar --strip-components=2 -xvzf - ./rlgl/rlgl;
./rlgl l --key=0LIBFFI-0LIBFFI-0LIBFFI-0LIBFFI https://rl.gl
./rlgl e -l project=libffi -l sha=${GITHUB_SHA:0:7} -l CC='emcc' -l host=wasm32-emscripten --policy=https://github.com/libffi/rlgl-policy.git testsuite/libffi.log
exit $?
build:
strategy:
matrix:
bigint: ["--wasm-bigint", ""]
env:
WASM_BIGINT: ${{ matrix.bigint }}
runs-on: ubuntu-22.04
needs: [setup-emsdk-cache]
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup cache
id: cache-system-libraries
uses: actions/cache@v3
with:
path: ${{env.EM_CACHE_FOLDER}}
key: ${{env.EMSCRIPTEN_VERSION}}

- uses: mymindstorm/setup-emsdk@v12
with:
version: ${{ env.EMSCRIPTEN_VERSION }}
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}

- name: build
run: |
./testsuite/emscripten/build.sh ${{ matrix.bigint }}
- name: build tests
run: |
cp -r testsuite/libffi.call testsuite/libffi.call.test
cp -r testsuite/libffi.closures testsuite/libffi.closures.test
./testsuite/emscripten/build-tests.sh testsuite/libffi.call.test ${{ matrix.bigint }}
./testsuite/emscripten/build-tests.sh testsuite/libffi.closures.test ${{ matrix.bigint }}
- name: Store artifacts
uses: actions/upload-artifact@v3
with:
name: built-tests
path: |
./testsuite/libffi.c*/
test:
strategy:
matrix:
bigint: ["--wasm-bigint", ""]
browser: ["firefox", "chrome"]
runs-on: ubuntu-22.04
needs: [build]
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Download build artifact
uses: actions/download-artifact@v3
with:
name: built-tests
path: ./testsuite/

- uses: conda-incubator/setup-miniconda@v2
with:
activate-environment: pyodide-env
python-version: "3.11"
channels: conda-forge
- name: Install test dependencies
run: |
pip install pytest-pyodide==0.23.2
- name:
run: |
cd testsuite/emscripten/
mkdir test-results
pytest \
--junitxml=test-results/junit.xml \
test_libffi.py \
-k ${{ matrix.browser }} \
-s
- name: Test Report
uses: dorny/test-reporter@v1
if: success() || failure()
with:
name: pytest results ${{ matrix.bigint }} ${{ matrix.browser }}
path: testsuite/emscripten/test-results/junit.xml
reporter: java-junit

- name: Store test results
uses: actions/upload-artifact@v3
if: success() || failure()
with:
name: test-results
path: testsuite/emscripten/test-results
15 changes: 15 additions & 0 deletions testsuite/emscripten/build-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,21 @@ fi
set -e

cd "$1"
shift

# Parse arguments
while [ $# -gt 0 ]; do
case $1 in
--wasm-bigint) WASM_BIGINT=true ;;
*)
echo "ERROR: Unknown parameter: $1" >&2
exit 1
;;
esac
shift
done


export CFLAGS="-fPIC -O2 -I../../target/include $EXTRA_CFLAGS"
export CXXFLAGS="$CFLAGS -sNO_DISABLE_EXCEPTION_CATCHING $EXTRA_CXXFLAGS"
export LDFLAGS=" \
Expand Down
2 changes: 1 addition & 1 deletion testsuite/emscripten/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ fi
# Parse arguments
while [ $# -gt 0 ]; do
case $1 in
--enable-wasm-bigint) WASM_BIGINT=true ;;
--wasm-bigint) WASM_BIGINT=true ;;
--debug) DEBUG=true ;;
*)
echo "ERROR: Unknown parameter: $1" >&2
Expand Down
2 changes: 1 addition & 1 deletion testsuite/emscripten/node-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ fi
# Parse arguments
while [ $# -gt 0 ]; do
case $1 in
--enable-wasm-bigint) WASM_BIGINT=true ;;
--wasm-bigint) WASM_BIGINT=true ;;
*)
echo "ERROR: Unknown parameter: $1" >&2
exit 1
Expand Down

0 comments on commit 094bc11

Please sign in to comment.