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 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