From f18eddb95c7b4e9d9708e8307d1edf9f7abe5eb9 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Thu, 10 Sep 2026 08:10:06 +0200 Subject: [PATCH] pytrec-eval-terrier: add build-pytrec-eval-terrier.yml for riscv64 wheels setup.py compiles the trec_eval submodule's C sources (pinned to v9.0.8) together with src/pytrec_eval.cpp into a per-interpreter pytrec_eval_ext extension. Checks out the upstream tag with submodules, then cibuildwheel builds and tests it directly - no separate sdist step needed since the submodule already carries the sources setup.py otherwise fetches over the network from a GitHub release tarball. A patch adds LICENSE.trec_eval: v9.0.8's individual .c files still carry the original author's 2008 per-file header restricting use to "research, non-commercial purposes", but usnistgov/trec_eval's current repository-wide LICENSE.md (added 2024) explicitly relicenses "the original trec_eval, up to version 9" as permissively-redistributable NIST public-service software. Shipping that current, authoritative text alongside the wrapper's own MIT LICENSE closes a real gap - the released sdist's PKG-INFO shows only the wrapper's LICENSE today, same as every other platform wheel upstream's own CI publishes. Tests mirror upstream's own push.yml (pytest tests/*.py) against the submodule's fixtures; numpy/scipy (install_requires) come from our registry via CIBW_ENVIRONMENT. musllinux is skipped - upstream publishes none either. --- .../workflows/build-pytrec-eval-terrier.yml | 94 +++++++++++++++++++ ...al-for-the-vendored-trec_eval-source.patch | 56 +++++++++++ 2 files changed, 150 insertions(+) create mode 100644 .github/workflows/build-pytrec-eval-terrier.yml create mode 100644 patches/pytrec-eval-terrier/0.5.10/0001-Add-LICENSE.trec_eval-for-the-vendored-trec_eval-source.patch diff --git a/.github/workflows/build-pytrec-eval-terrier.yml b/.github/workflows/build-pytrec-eval-terrier.yml new file mode 100644 index 000000000..72b3b7b6a --- /dev/null +++ b/.github/workflows/build-pytrec-eval-terrier.yml @@ -0,0 +1,94 @@ +# SPDX-FileCopyrightText: 2026 The RISE Project +# SPDX-License-Identifier: MIT +--- +# This workflow is based on: https://github.com/terrierteam/pytrec_eval/blob/v0.5.10/.github/workflows/publish-to-pypi.yml +name: Build pytrec-eval-terrier wheels (riscv64) + +on: + workflow_dispatch: + inputs: + version: + description: 'pytrec-eval-terrier version to build (git tag without leading v, e.g. 0.5.10)' + required: true + default: '0.5.10' + pull_request: + paths: + - '.github/workflows/build-pytrec-eval-terrier.yml' + - 'patches/pytrec-eval-terrier/**' + +concurrency: + group: ${{ github.workflow }}-${{ inputs.version || '0.5.10' }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +env: + # `inputs.version` is empty on pull_request events; default to 0.5.10 there. + PYTREC_EVAL_TERRIER_VERSION: ${{ inputs.version || '0.5.10' }} + MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 + +jobs: + setup: + uses: $/.github/workflows/_setup.yml + + build_wheels: + needs: [setup] + name: Build pytrec-eval-terrier ${{ inputs.version || '0.5.10' }} ${{ matrix.python }}-manylinux_riscv64 + runs-on: ubuntu-24.04-riscv + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + # Extension is a plain setuptools Extension (no limited-API build), so + # per-interpreter wheels like upstream's own (cp310..cp314, cp314t). + python: ["cp312", "cp313", "cp314", "cp314t"] + + steps: + - name: Checkout pytrec_eval v${{ env.PYTREC_EVAL_TERRIER_VERSION }} + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: terrierteam/pytrec_eval + ref: v${{ env.PYTREC_EVAL_TERRIER_VERSION }} + submodules: true + persist-credentials: false + + - name: Checkout python-wheels + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + path: python-wheels + persist-credentials: false + + - name: Patch pytrec_eval source + run: git apply python-wheels/patches/pytrec-eval-terrier/${{ env.PYTREC_EVAL_TERRIER_VERSION }}/*.patch + + - uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 + env: + CIBW_ARCHS: riscv64 + CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64 + CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} + # numpy/scipy (install_requires) have no riscv64 wheels on public + # PyPI but are published on our own registry, needed both to build + # the test venv and to satisfy the wheel's own install_requires. + CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ + # Same suite upstream's push.yml runs (pytest tests/*.py); named + # explicitly since pytrec_eval_tests.py doesn't match pytest's + # default collection glob for a bare directory. + CIBW_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: pytest {package}/tests/pytrec_eval_tests.py + + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: pytrec-eval-terrier-${{ env.PYTREC_EVAL_TERRIER_VERSION }}-${{ matrix.python }}-manylinux_riscv64 + path: ./wheelhouse/*.whl + if-no-files-found: error + + publish: + name: Publish pytrec-eval-terrier ${{ inputs.version || '0.5.10' }} + needs: [setup, build_wheels] + permissions: + contents: write + pull-requests: write + uses: $/.github/workflows/_publish-wheel.yml + with: + artifact-pattern: pytrec-eval-terrier-${{ inputs.version || '0.5.10' }}-*-manylinux_riscv64 diff --git a/patches/pytrec-eval-terrier/0.5.10/0001-Add-LICENSE.trec_eval-for-the-vendored-trec_eval-source.patch b/patches/pytrec-eval-terrier/0.5.10/0001-Add-LICENSE.trec_eval-for-the-vendored-trec_eval-source.patch new file mode 100644 index 000000000..63881e0e5 --- /dev/null +++ b/patches/pytrec-eval-terrier/0.5.10/0001-Add-LICENSE.trec_eval-for-the-vendored-trec_eval-source.patch @@ -0,0 +1,56 @@ +From 0ecf629011edc089211fe49a815619fb8c84aa1b Mon Sep 17 00:00:00 2001 +From: Ludovic Henry +Date: Thu, 10 Sep 2026 08:06:34 +0200 +Subject: [PATCH] Add LICENSE.trec_eval for the vendored trec_eval C sources + +setup.py compiles trec_eval's C sources straight into the pytrec_eval_ext +extension (sources=['src/pytrec_eval.cpp'] + TREC_EVAL_SRC, where +TREC_EVAL_SRC lists every *.c in the trec_eval submodule/tarball) -- it is +the functional core, not an optional or system-linked dependency. Upstream +pins this to trec_eval v9.0.8 (REMOTE_TREC_EVAL_URI in setup.py, and the +trec_eval submodule here is pinned to the same tag), and the built wheel +carries only pytrec_eval-terrier's own MIT LICENSE (confirmed via the +released sdist's PKG-INFO: `License-File: LICENSE`, nothing else) -- the +same as every other platform wheel upstream's own CI publishes. + +v9.0.8's individual .c files still carry Chris Buckley's original 2008 +per-file header ("Permission is granted for use and modification of this +file for research, non-commercial purposes"). But usnistgov/trec_eval +added a repository-wide LICENSE.md in 2024 (first shipped in v10.0) whose +text explicitly states it covers "the code for the original trec_eval, up +to version 9" and relicenses the whole project, Buckley's code included, +as NIST public-service software: "You may use, copy, and distribute copies +of the software in any medium... You may improve, modify, and create +derivative works." That statement, from the project's current copyright +holders (Buckley's original copyright plus Ian Soboroff's NIST-employee +modifications), is the authoritative, current statement of terms -- more +so than a per-file comment two major versions stale. This patch ships that +text (verbatim from github.com/usnistgov/trec_eval's current LICENSE.md) +as LICENSE.trec_eval at the project root, where setuptools' default +license_files glob (LICEN[CS]E*) picks it up automatically alongside the +project's own LICENSE, same mechanism as the python-mecab-ko port's +LICENSE.mecab-ko. + +Upstream-Status: To upstream [blocked: this port may only touch riseproject-dev/python-wheels] +--- + LICENSE.trec_eval | 7 +++++++ + 1 file changed, 7 insertions(+) + create mode 100644 LICENSE.trec_eval + +diff --git a/LICENSE.trec_eval b/LICENSE.trec_eval +new file mode 100644 +index 0000000..145e551 +--- /dev/null ++++ b/LICENSE.trec_eval +@@ -0,0 +1,7 @@ ++The code for the original trec_eval, up to version 9, are Copyright (C) 2008 Chris Buckley. Significant modifications have been done by Ian Soboroff as an employee of NIST. Other modifications and ongoing support are by Ian Soboroff and other contributors on https://github.com/usnistgov/trec_eval. trec_eval is now made available under the following license. ++ ++NIST-developed software is provided by NIST as a public service. You may use, copy, and distribute copies of the software in any medium, provided that you keep intact this entire notice. You may improve, modify, and create derivative works of the software or any portion of the software, and you may copy and distribute such modifications or works. Modified works should carry a notice stating that you changed the software and should note the date and nature of any such change. Please explicitly acknowledge the National Institute of Standards and Technology as the source of the software. ++ ++NIST-developed software is expressly provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT, OR ARISING BY OPERATION OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND DATA ACCURACY. NIST NEITHER REPRESENTS NOR WARRANTS THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT ANY DEFECTS WILL BE CORRECTED. NIST DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF THE SOFTWARE OR THE RESULTS THEREOF, INCLUDING BUT NOT LIMITED TO THE CORRECTNESS, ACCURACY, RELIABILITY, OR USEFULNESS OF THE SOFTWARE. ++ ++You are solely responsible for determining the appropriateness of using and distributing the software and you assume all risks associated with its use, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and the unavailability or interruption of operation. This software is not intended to be used in any situation where a failure could cause risk of injury or damage to property. The software developed by NIST employees is not subject to copyright protection within the United States. +\ No newline at end of file +-- +2.50.1 (Apple Git-155) +