From 39b47db2de9c4baadbe627636d38206fa9b22ae3 Mon Sep 17 00:00:00 2001 From: "riseproject-dev[bot]" <330740410+riseproject-dev[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 12:07:31 +0000 Subject: [PATCH 1/2] photutils: Add versions 3.1.0, 3.1.1 Signed-off-by: riseproject-dev[bot] <330740410+riseproject-dev[bot]@users.noreply.github.com> --- docs/packages/photutils.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/packages/photutils.yaml b/docs/packages/photutils.yaml index 591b9b7dd3d..24350dd1bd9 100644 --- a/docs/packages/photutils.yaml +++ b/docs/packages/photutils.yaml @@ -8,3 +8,5 @@ versions: - filename: photutils-3.0.0-cp311-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl sha256: 7686534bf05d9270880368feefe0d77b7d9f08783e775aef40e78a8fac94bd26 requires-python: '>=3.11' +- version: 3.1.0 +- version: 3.1.1 From 14abf0790354b61b08b6d8f1fe1c4f53ad681728 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 23 Oct 2026 09:22:29 +0800 Subject: [PATCH 2/2] photutils: build one wheel per interpreter from 3.1.0 3.1.0 raised requires-python to >=3.12 and dropped py-limited-api, so the cp311-abi3 build assumption no longer holds: the wheel check failed on a cp312-cp312 wheel. Build cp312/cp313/cp314 separately and check the compiled extensions against the checkout's Cython sources instead of a fixed list. --- .github/workflows/build-photutils.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-photutils.yml b/.github/workflows/build-photutils.yml index ea5f35af744..a345175cdfb 100644 --- a/.github/workflows/build-photutils.yml +++ b/.github/workflows/build-photutils.yml @@ -48,7 +48,10 @@ jobs: fail-fast: false matrix: version: ${{ fromJSON(needs.setup.outputs.versions) }} - name: Build photutils ${{ matrix.version }} cp311-abi3-manylinux_riscv64 + # 3.1.0 raised requires-python to >=3.12 and dropped py-limited-api, so every + # interpreter gets its own wheel; pyproject.toml skips the free-threaded builds. + python: ["cp312", "cp313", "cp314"] + name: Build photutils ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 runs-on: ubuntu-24.04-riscv timeout-minutes: 240 @@ -67,13 +70,9 @@ jobs: 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 }} - # pyproject.toml pins py-limited-api = "cp311": built once on cp311, the - # oldest interpreter the tag claims, and re-tested on the newer ones. - CIBW_BUILD: >- - cp311-manylinux_riscv64 cp312-manylinux_riscv64 - cp313-manylinux_riscv64 cp314-manylinux_riscv64 CIBW_ENVIRONMENT: >- PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ PIP_ONLY_BINARY=numpy @@ -87,13 +86,13 @@ jobs: run: | python3 - wheelhouse/*.whl <<'EOF' import sys, zipfile + import pathlib path = sys.argv[1] - assert "-cp311-abi3-" in path, path names = zipfile.ZipFile(path).namelist() - exts = {n.rsplit("/", 1)[1] for n in names if n.endswith(".so")} - assert exts == {"compiler_version.abi3.so", "core.abi3.so", - "circular_overlap.abi3.so", "elliptical_overlap.abi3.so", - "rectangular_overlap.abi3.so", "ellipse_model.abi3.so"}, exts + # Every Cython source in the checkout must have been compiled into the wheel. + exts = {n.rsplit("/", 1)[1].split(".")[0] for n in names if n.endswith(".so")} + pyx = {p.stem for p in pathlib.Path("photutils").rglob("*.pyx")} + assert pyx and pyx <= exts, sorted(pyx - exts) licences = {n.split(".dist-info/licenses/", 1)[1] for n in names if ".dist-info/licenses/" in n and not n.endswith("/")} assert licences == {"LICENSE.rst"}, licences @@ -102,7 +101,7 @@ jobs: - name: Store wheels uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: photutils-${{ env.PHOTUTILS_VERSION }}-cp311-abi3-manylinux_riscv64 + name: photutils-${{ env.PHOTUTILS_VERSION }}-${{ matrix.python }}-manylinux_riscv64 path: ./wheelhouse/*.whl if-no-files-found: error