Skip to content

Test against Pyodide / Emscripten in CI #3534

Test against Pyodide / Emscripten in CI

Test against Pyodide / Emscripten in CI #3534

Workflow file for this run

name: Hypothesis CI
env:
# Tell pytest and other tools to produce coloured terminal output.
# Make sure this is also in the "passenv" section of the tox config.
PY_COLORS: 1
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
# Cancel in-progress PR builds if another commit is pushed.
# On non-PR builds, fall back to the globally-unique run_id and don't cancel.
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
# Cribbing from https://github.com/numpy/numpy/blob/9a650391651c8486d8cb8b27b0e75aed5d36033e/.github/workflows/emscripten.yml
test-pyodide:
runs-on: ubuntu-22.04
env:
PYODIDE_VERSION: 0.23.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.11.2
EMSCRIPTEN_VERSION: 3.1.32
NODE_VERSION: 18
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: set up python
id: setup-python
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
with:
version: ${{ env.EMSCRIPTEN_VERSION }}
actions-cache-folder: emsdk-cache
- name: Install pyodide-build
# maybe we can take out the pydantic constraint?
run: pip install "pydantic<2" pyodide-build==$PYODIDE_VERSION
- name: Build
run: |
# Pyodide is still in the process of adding better/easier support for
# non-setup.py based builds.
## cp pyproject.toml.setuppy pyproject.toml
pwd
ls
cd hypothesis-python/
CFLAGS=-g2 LDFLAGS=-g2 pyodide build
- name: set up node
uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
with:
node-version: ${{ env.NODE_VERSION }}
- name: Set up Pyodide virtual environment and install dependencies
# might want coverage.txt, hypothesis-python/[all]
run: |
pip install --upgrade setuptools pip wheel
python hypothesis-python/setup.py bdist_wheel
pip download --dest=dist/ hypothesis-python/ pytest # fetch all the wheels
pyodide venv .venv-pyodide
source .venv-pyodide/bin/activate
python -c "import sys; print(sys.platform)"
pip install dist/*.whl
echo "def test(): pass\n" > test.py
python -m pytest test.py -v
# python -m pytest hypothesis-python/tests/cover
# run: python -m pytest --numprocesses auto hypothesis-python/tests/ --ignore=hypothesis-python/tests/quality/ --ignore=hypothesis-python/tests/ghostwriter/ --ignore=hypothesis-python/tests/patching/