packages: Update versions and status #23
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 | |
| --- | |
| # Based on upstream's own wheel builder: | |
| # https://github.com/rapidfuzz/Levenshtein/blob/v0.27.4/.github/workflows/pythonbuild.yml | |
| name: Build levenshtein wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/levenshtein.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-levenshtein.yml' | |
| - 'docs/packages/levenshtein.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-levenshtein.yml' | |
| - 'docs/packages/levenshtein.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: levenshtein | |
| version: ${{ inputs.version }} | |
| build_sdist: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| name: Build levenshtein ${{ matrix.version }} sdist | |
| runs-on: ubuntu-latest | |
| env: | |
| LEVENSHTEIN_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout Levenshtein v${{ env.LEVENSHTEIN_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: rapidfuzz/Levenshtein | |
| ref: v${{ env.LEVENSHTEIN_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: Install Python | |
| uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 | |
| with: | |
| python-version: '3.12' | |
| activate-environment: true | |
| enable-cache: false | |
| # The extension compiles in the bundled rapidfuzz-cpp headers, whose MIT | |
| # terms want the notice to travel with the binary; upstream's wheel carries | |
| # only Levenshtein's own LICENSE. | |
| - name: Patch Levenshtein source | |
| run: | | |
| git apply python-wheels/patches/levenshtein/${{ env.LEVENSHTEIN_VERSION }}/00*.patch | |
| - name: Build sdist | |
| id: sdist | |
| run: | | |
| uv pip install "Cython>=3.1.6,<3.3.0" build twine | |
| chmod +x ./src/Levenshtein/generate.sh | |
| ./src/Levenshtein/generate.sh | |
| git apply ./tools/sdist.patch | |
| python -m build --sdist | |
| twine check dist/* | |
| - name: Upload sdist artifact | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: levenshtein-${{ env.LEVENSHTEIN_VERSION }}-sdist | |
| path: dist/*.tar.gz | |
| if-no-files-found: error | |
| build_wheels: | |
| needs: [setup, build_sdist] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build levenshtein ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 90 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| python: ["cp312", "cp313", "cp314", "cp314t"] | |
| env: | |
| LEVENSHTEIN_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Download sdist | |
| uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| name: levenshtein-${{ env.LEVENSHTEIN_VERSION }}-sdist | |
| path: dist/ | |
| - id: sdist_path | |
| run: echo "path=$(echo dist/*.tar.gz)" >> "$GITHUB_OUTPUT" | |
| - uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| # Upstream feeds cibuildwheel the sdist tarball too: it bundles the | |
| # cythonised .cxx, so the wheel build needs no Cython, and it carries | |
| # the tests the inherited test-command runs. | |
| package-dir: ${{ steps.sdist_path.outputs.path }} | |
| env: | |
| CIBW_ARCHS: riscv64 | |
| CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64 | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| # Upstream's test-requires/test-command come from the sdist's | |
| # pyproject.toml; only the licence assertion is ours. | |
| CIBW_TEST_COMMAND: >- | |
| python -c "import importlib.metadata as m; l = sorted(str(p).rsplit('/', 1)[-1] for p in m.files('levenshtein') if '.dist-info/licenses/' in str(p)); assert l == ['LICENSE', 'LICENSE.rapidfuzz-cpp'], l" | |
| && pytest {package}/tests | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: levenshtein-${{ matrix.version }}-${{ matrix.python }}-manylinux_riscv64 | |
| path: ./wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish levenshtein ${{ matrix.version }} | |
| needs: [setup, build_sdist, 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 | |
| with: | |
| artifact-pattern: levenshtein-${{ matrix.version }}-*-manylinux_riscv64 |