From 0c6ebc1a1430b8c20fba7ad07aad54e7328d0a7b Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 2 Oct 2026 18:19:41 +0000 Subject: [PATCH 1/2] phonopy: Add version 4.4.0 --- .github/workflows/build-phonopy.yml | 120 ++++++++++++++++++++++++++++ docs/packages/phonopy.yaml | 5 ++ 2 files changed, 125 insertions(+) create mode 100644 .github/workflows/build-phonopy.yml create mode 100644 docs/packages/phonopy.yaml diff --git a/.github/workflows/build-phonopy.yml b/.github/workflows/build-phonopy.yml new file mode 100644 index 00000000000..68c9c98b2c3 --- /dev/null +++ b/.github/workflows/build-phonopy.yml @@ -0,0 +1,120 @@ +# SPDX-FileCopyrightText: 2026 The RISE Project +# SPDX-License-Identifier: MIT +--- +# This workflow is based on the `build_wheels` job of +# https://github.com/phonopy/phonopy/blob/v4.4.0/.github/workflows/release.yml +# and the test steps of +# https://github.com/phonopy/phonopy/blob/v4.4.0/.github/workflows/phonopy-pytest-conda.yml +name: Build phonopy wheels (riscv64) + +on: + workflow_dispatch: + inputs: + version: + description: 'Version glob to (re)build; empty builds every version of docs/packages/phonopy.yaml not released yet' + required: false + default: '' + pull_request: + branches: [main] + paths: + - '.github/workflows/build-phonopy.yml' + - 'docs/packages/phonopy.yaml' + push: + branches: [main] + paths: + - '.github/workflows/build-phonopy.yml' + - 'docs/packages/phonopy.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: phonopy + version: ${{ inputs.version }} + + build_wheels: + needs: [setup] + if: needs.setup.outputs.versions != '[]' + name: Build phonopy ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 + runs-on: ubuntu-24.04-riscv + timeout-minutes: 180 + strategy: + fail-fast: false + matrix: + version: ${{ fromJSON(needs.setup.outputs.versions) }} + python: ["cp312", "cp313", "cp314", "cp314t"] + + env: + PHONOPY_VERSION: ${{ matrix.version }} + + steps: + - name: Checkout phonopy v${{ env.PHONOPY_VERSION }} + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: phonopy/phonopy + ref: v${{ env.PHONOPY_VERSION }} + fetch-depth: 0 + persist-credentials: false + + - name: Build wheels + uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 + with: + output-dir: wheelhouse/ + only: ${{ matrix.python }}-manylinux_riscv64 + env: + CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} + # phonors (a runtime dependency) has no riscv64 wheel; its sdist needs cargo, + # as upstream's test job also builds it from source. + CIBW_BEFORE_ALL_LINUX: >- + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal + CIBW_ENVIRONMENT_LINUX: >- + PATH=$HOME/.cargo/bin:$PATH + PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ + PIP_ONLY_BINARY=numpy,scipy,h5py,matplotlib,contourpy,kiwisolver,pillow,spglib,pyyaml + CIBW_TEST_REQUIRES: pytest ase + CIBW_TEST_SOURCES: test + CIBW_TEST_COMMAND: python -m pytest test + + - name: Check wheel contents + run: | + python3 - wheelhouse/*.whl <<'EOF' + import sys, zipfile + for path in sys.argv[1:]: + names = zipfile.ZipFile(path).namelist() + for ext in ("phonopy/_phonopy", "phonopy/_recgrid"): + assert any(n.startswith(ext) and n.endswith(".so") for n in names), (path, ext) + print(path, "ok") + EOF + + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: phonopy-${{ env.PHONOPY_VERSION }}-${{ matrix.python }}-manylinux_riscv64 + path: wheelhouse/*.whl + if-no-files-found: error + + publish: + name: Publish phonopy ${{ 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: phonopy-${{ matrix.version }}-*-manylinux_riscv64 diff --git a/docs/packages/phonopy.yaml b/docs/packages/phonopy.yaml new file mode 100644 index 00000000000..22678ba2e47 --- /dev/null +++ b/docs/packages/phonopy.yaml @@ -0,0 +1,5 @@ +package-name: phonopy +source-code: https://github.com/phonopy/phonopy +license: BSD-3-Clause +versions: +- version: 4.4.0 From 22c50ffa1fbaaff9674e516a289816eb34c99cde Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 2 Oct 2026 21:49:56 +0000 Subject: [PATCH 2/2] phonopy: Pin phonors below 0.5 for tests phonopy 4.4.0 requires phonors>=0.3.0 with no upper bound but calls phonors.grid_index_from_address, which phonors 0.5.0 replaced with grid_indices_from_addresses. The test environment resolved phonors 0.6.0, so every test reaching the Rust grid backend failed with an AttributeError. Install phonors<0.5 before the wheel. --- .github/workflows/build-phonopy.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build-phonopy.yml b/.github/workflows/build-phonopy.yml index 68c9c98b2c3..e06672b8a9e 100644 --- a/.github/workflows/build-phonopy.yml +++ b/.github/workflows/build-phonopy.yml @@ -81,6 +81,12 @@ jobs: PATH=$HOME/.cargo/bin:$PATH PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ PIP_ONLY_BINARY=numpy,scipy,h5py,matplotlib,contourpy,kiwisolver,pillow,spglib,pyyaml + # phonopy 4.4.0 declares an unbounded `phonors>=0.3.0` but calls + # `phonors.grid_index_from_address`, which phonors 0.5.0 replaced with + # `grid_indices_from_addresses` (phonopy 4.7.0 moved to the new API and + # raised its floor to `phonors>=0.5.0`). Install the last compatible phonors + # before the wheel so its unbounded requirement is already satisfied. + CIBW_BEFORE_TEST: pip install "phonors>=0.3.0,<0.5" CIBW_TEST_REQUIRES: pytest ase CIBW_TEST_SOURCES: test CIBW_TEST_COMMAND: python -m pytest test