From dc681a92941570ebc640dc11e807f62275506cef Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 25 Sep 2026 10:43:39 +0000 Subject: [PATCH 1/2] chia-rs: Add version 0.48.0 Build chia_rs (PyO3 bindings for Chia's Rust consensus/BLS crates) from the upstream 0.48.0 tag with cibuildwheel, mirroring upstream's own riscv64 maturin build (no openssl feature). The crate graph has portable paths for riscv64: blst compiles with __BLST_NO_ASM__, ring and zstd-sys are plain C, and chia-pos2 uses its soft-AES fallback. --- .github/workflows/build-chia-rs.yml | 113 ++++++++++++++++++++++++++++ docs/packages/chia-rs.yaml | 5 ++ 2 files changed, 118 insertions(+) create mode 100644 .github/workflows/build-chia-rs.yml create mode 100644 docs/packages/chia-rs.yaml diff --git a/.github/workflows/build-chia-rs.yml b/.github/workflows/build-chia-rs.yml new file mode 100644 index 00000000000..f8eddb8bc9b --- /dev/null +++ b/.github/workflows/build-chia-rs.yml @@ -0,0 +1,113 @@ +# SPDX-FileCopyrightText: 2026 The RISE Project +# SPDX-License-Identifier: MIT +--- +# Based on: https://github.com/Chia-Network/chia_rs/blob/0.48.0/.github/workflows/build-riscv64.yml +name: Build chia-rs wheels (riscv64) + +on: + workflow_dispatch: + inputs: + version: + description: 'Version glob to (re)build; empty builds every version of docs/packages/chia-rs.yaml not released yet' + required: false + default: '' + pull_request: + branches: [main] + paths: + - '.github/workflows/build-chia-rs.yml' + - 'docs/packages/chia-rs.yaml' + push: + branches: [main] + paths: + - '.github/workflows/build-chia-rs.yml' + - 'docs/packages/chia-rs.yaml' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +env: + MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 + +jobs: + setup: + uses: $/.github/workflows/_setup.yml + with: + package: chia-rs + version: ${{ inputs.version }} + + build_wheels: + needs: [setup] + if: needs.setup.outputs.versions != '[]' + name: Build chia-rs ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 + runs-on: ubuntu-24.04-riscv + timeout-minutes: 360 + strategy: + fail-fast: false + matrix: + version: ${{ fromJSON(needs.setup.outputs.versions) }} + python: ["cp312", "cp313", "cp314", "cp314t"] + + env: + CHIA_RS_VERSION: ${{ matrix.version }} + + steps: + - name: Checkout chia_rs ${{ env.CHIA_RS_VERSION }} + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: Chia-Network/chia_rs + ref: ${{ env.CHIA_RS_VERSION }} + persist-credentials: false + + # maturin only picks up licence files beside wheel/pyproject.toml, so upstream's wheels carry none. + - run: cp LICENSE wheel/LICENSE + + - uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 + with: + package-dir: wheel + output-dir: wheelhouse/ + only: ${{ matrix.python }}-manylinux_riscv64 + env: + CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} + CIBW_BEFORE_ALL_LINUX: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + CIBW_ENVIRONMENT_LINUX: PATH="$PATH:$HOME/.cargo/bin" + CIBW_TEST_REQUIRES: colorama pytest pytest-xdist clvm + CIBW_TEST_COMMAND: pytest {project}/tests + + - name: Check wheel contents + run: | + python3 - wheelhouse/*.whl <<'EOF' + import sys, zipfile + names = zipfile.ZipFile(sys.argv[1]).namelist() + exts = {n.split("/")[-1].split(".")[0] for n in names if n.endswith(".so")} + assert exts == {"chia_rs"}, exts + licences = {n.rsplit("/", 1)[-1] for n in names if ".dist-info/licenses/" in n} - {""} + assert licences == {"LICENSE"}, licences + EOF + + - name: Store wheels + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: chia-rs-${{ env.CHIA_RS_VERSION }}-${{ matrix.python }}-manylinux_riscv64 + path: ./wheelhouse/*.whl + if-no-files-found: error + + publish: + name: Publish chia-rs ${{ matrix.version }} + needs: [setup, build_wheels] + if: needs.setup.outputs.versions != '[]' + strategy: + fail-fast: false + matrix: + version: ${{ fromJSON(needs.setup.outputs.versions) }} + permissions: + contents: write + pull-requests: write + uses: $/.github/workflows/_publish-wheel.yml + secrets: + app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }} + with: + artifact-pattern: chia-rs-${{ matrix.version }}-*-manylinux_riscv64 diff --git a/docs/packages/chia-rs.yaml b/docs/packages/chia-rs.yaml new file mode 100644 index 00000000000..6eecc0b2555 --- /dev/null +++ b/docs/packages/chia-rs.yaml @@ -0,0 +1,5 @@ +package-name: chia-rs +source-code: https://github.com/Chia-Network/chia_rs +license: Apache-2.0 +versions: +- version: 0.48.0 From a1adcf64b2215b513494b2d1ef729ef1e7ee1372 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 25 Sep 2026 18:37:21 +0000 Subject: [PATCH 2/2] chia-rs: Stage test fixture directories for the wheel tests The suite opens test-bundles/, ff-tests/ and generator-tests/ relative to the working directory, as upstream runs pytest from the repository root. cibuildwheel runs the test command from an empty temporary directory, so stage those directories (and pytest.ini) with CIBW_TEST_SOURCES. --- .github/workflows/build-chia-rs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-chia-rs.yml b/.github/workflows/build-chia-rs.yml index f8eddb8bc9b..269d614d1b3 100644 --- a/.github/workflows/build-chia-rs.yml +++ b/.github/workflows/build-chia-rs.yml @@ -75,7 +75,8 @@ jobs: CIBW_BEFORE_ALL_LINUX: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y CIBW_ENVIRONMENT_LINUX: PATH="$PATH:$HOME/.cargo/bin" CIBW_TEST_REQUIRES: colorama pytest pytest-xdist clvm - CIBW_TEST_COMMAND: pytest {project}/tests + CIBW_TEST_SOURCES: pytest.ini tests test-bundles ff-tests generator-tests + CIBW_TEST_COMMAND: pytest tests - name: Check wheel contents run: |