name: Pyodide Build on: schedule: - cron: '0 0 */2 * *' workflow_dispatch: env: BUILD_TYPE: Release permissions: contents: read jobs: build: runs-on: ubuntu-24.04 strategy: fail-fast: false steps: - name: Checkout code uses: actions/checkout@v7 - name: Setup packages run: sudo apt-get update && sudo apt-get install -y python3-dev python3-pip python3-venv - name: Create venv run: python3 -m venv ~/env - name: Install pyodide run: ~/env/bin/pip install pyodide-build pyodide-cli - name: Configure CMake and build run: | git clone https://github.com/emscripten-core/emsdk.git ~/emsdk cd ~/emsdk && PYODIDE_EMSCRIPTEN_VERSION=$(~/env/bin/pyodide config get emscripten_version) ./emsdk install ${PYODIDE_EMSCRIPTEN_VERSION} ./emsdk activate ${PYODIDE_EMSCRIPTEN_VERSION} - name: Build Z3 run: | source ~/emsdk/emsdk_env.sh cd src/api/python # Exception/longjmp/bigint flags are declared in pyproject.toml and # combined with Pyodide's -fwasm-exceptions defaults. Passing the # legacy JS-EH -fexceptions flags here conflicts with the wasm-EH ABI. ~/env/bin/pyodide build --exports whole_archive - name: Setup env-pyodide run: | source ~/env/bin/activate source ~/emsdk/emsdk_env.sh pyodide venv ~/env-pyodide - name: Setup z3 wheel run: | ~/env-pyodide/bin/pip install src/api/python/dist/*.whl ~/env-pyodide/bin/python -