From b9e62454f49c1ee10623e4b14d54ef09d36e1b45 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 21 May 2026 11:17:23 -0700 Subject: [PATCH] Publish Pyodide wheels from nightly and release workflows (#9588) This updates the release and nightly pipelines so the Pyodide wheel is built alongside the existing Python wheels and carried through the normal publication flow. As a result, Pyodide wheels are included in nightly assets and in release-time Python package publishing without introducing a separate publishing path. - **Pyodide build in release/nightly** - Added a `pyodide-python` job to both `release.yml` and `nightly.yml` - Reused the existing Pyodide build flow: install `pyodide-build`/`pyodide-cli`, provision the matching Emscripten toolchain, build the wheel, and run `z3test.py` against the built artifact - **Artifact integration** - Upload the built wheel as a dedicated workflow artifact: `PyodidePythonBuild` - Extend the existing `python-package` aggregation job in both workflows to depend on and download that artifact - **Publication path** - No new publish logic was added - The existing downstream steps already publish everything collected in `src/api/python/dist`, so the Pyodide wheel now flows into: - nightly GitHub release assets - release GitHub assets - release-time PyPI publishing when enabled ```yaml pyodide-python: name: "Python bindings (Pyodide)" ... - name: Upload artifact uses: actions/upload-artifact@v7.0.1 with: name: PyodidePythonBuild path: src/api/python/dist/*.whl python-package: needs: [..., pyodide-python] ... - name: Download Pyodide Build uses: actions/download-artifact@v8.0.1 with: name: PyodidePythonBuild path: artifacts ``` --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --- .github/workflows/nightly.yml | 64 +++++++++++++++++++++++++++++++++-- .github/workflows/release.yml | 63 ++++++++++++++++++++++++++++++++-- 2 files changed, 122 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e7a294d4a..ecdaf0be4 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -435,6 +435,59 @@ jobs: path: src/api/python/wheelhouse/*.whl retention-days: 2 + pyodide-python: + name: "Python bindings (Pyodide)" + runs-on: ubuntu-24.04 + timeout-minutes: 90 + steps: + - name: Checkout code + uses: actions/checkout@v6.0.2 + + - 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 Emscripten + 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 wheel + run: | + source ~/emsdk/emsdk_env.sh + cd src/api/python + CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" CXXFLAGS="${CXXFLAGS}" ~/env/bin/pyodide build --exports whole_archive + env: + CFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0 -g2" + LDFLAGS: "-fexceptions -s WASM_BIGINT" + CXXFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0" + + - name: Setup env-pyodide + run: | + source ~/env/bin/activate + source ~/emsdk/emsdk_env.sh + pyodide venv ~/env-pyodide + + - name: Test wheel + run: | + ~/env-pyodide/bin/pip install src/api/python/dist/*.whl + ~/env-pyodide/bin/python src/api/python/z3test.py z3 + + - name: Upload artifact + uses: actions/upload-artifact@v7.0.1 + with: + name: PyodidePythonBuild + path: src/api/python/dist/*.whl + retention-days: 2 + windows-build-x64: name: "Windows x64 build" runs-on: windows-latest @@ -639,7 +692,7 @@ jobs: python-package: name: "Python packaging" - needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64] + needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64, pyodide-python] runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -697,7 +750,13 @@ jobs: with: name: ManyLinuxPythonBuildRiscv64 path: artifacts - + + - name: Download Pyodide Build + uses: actions/download-artifact@v8.0.1 + with: + name: PyodidePythonBuild + path: artifacts + - name: Extract builds run: | cd artifacts @@ -836,4 +895,3 @@ jobs: with: packages-dir: dist repository-url: https://test.pypi.org/legacy/ - diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a62bbba4..4f095e9e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -445,6 +445,59 @@ jobs: path: src/api/python/wheelhouse/*.whl retention-days: 7 + pyodide-python: + name: "Python bindings (Pyodide)" + runs-on: ubuntu-24.04 + timeout-minutes: 90 + steps: + - name: Checkout code + uses: actions/checkout@v6.0.2 + + - 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 Emscripten + 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 wheel + run: | + source ~/emsdk/emsdk_env.sh + cd src/api/python + CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" CXXFLAGS="${CXXFLAGS}" ~/env/bin/pyodide build --exports whole_archive + env: + CFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0 -g2" + LDFLAGS: "-fexceptions -s WASM_BIGINT" + CXXFLAGS: "-fexceptions -s DISABLE_EXCEPTION_CATCHING=0" + + - name: Setup env-pyodide + run: | + source ~/env/bin/activate + source ~/emsdk/emsdk_env.sh + pyodide venv ~/env-pyodide + + - name: Test wheel + run: | + ~/env-pyodide/bin/pip install src/api/python/dist/*.whl + ~/env-pyodide/bin/python src/api/python/z3test.py z3 + + - name: Upload artifact + uses: actions/upload-artifact@v7.0.1 + with: + name: PyodidePythonBuild + path: src/api/python/dist/*.whl + retention-days: 7 + windows-build-x64: name: "Windows x64 build" runs-on: windows-latest @@ -649,7 +702,7 @@ jobs: python-package: name: "Python packaging" - needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64] + needs: [mac-build-x64, mac-build-arm64, windows-build-x64, windows-build-x86, windows-build-arm64, manylinux-python-amd64, manylinux-python-arm64, manylinux-python-riscv64, pyodide-python] runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -707,7 +760,13 @@ jobs: with: name: ManyLinuxPythonBuildRiscv64 path: artifacts - + + - name: Download Pyodide Build + uses: actions/download-artifact@v8.0.1 + with: + name: PyodidePythonBuild + path: artifacts + - name: Extract builds run: | cd artifacts