Repository navigation
phonopy: Add versions 4.8.2, 4.8.3 (#2848) #86
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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 | |
| # 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 | |
| # 4.8.3's C-vs-Rust thermal-properties test compares at rtol=1e-10, but the C | |
| # path's zero-point energy counts every mode with f > 0 while the Rust path | |
| # counts only f > cutoff (1e-5 THz). The Gamma acoustic modes are eigenvalue | |
| # noise (~1e-7 THz) that lands between the two, so the gap depends on that | |
| # noise: 5.6e-11 with upstream's x86_64 wheel, 1.2e-10 on riscv64. | |
| CIBW_TEST_COMMAND: >- | |
| python -m pytest test | |
| --deselect test/phonon/test_thermal_properties.py::test_thermal_properties_at_low_temperature_c_matches_python | |
| - 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 |