ci: open the nightly PRs as the riseproject-dev github app #11
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 `linux` job of | |
| # https://github.com/benbrandt/text-splitter/blob/v0.32.0/.github/workflows/python.yml | |
| name: Build semantic-text-splitter wheels (riscv64) | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version glob to (re)build; empty builds every version of docs/packages/semantic-text-splitter.yaml not released yet' | |
| required: false | |
| default: '' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-semantic-text-splitter.yml' | |
| - 'docs/packages/semantic-text-splitter.yaml' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '.github/workflows/build-semantic-text-splitter.yml' | |
| - 'docs/packages/semantic-text-splitter.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: semantic-text-splitter | |
| version: ${{ inputs.version }} | |
| build_wheels: | |
| needs: [setup] | |
| if: needs.setup.outputs.versions != '[]' | |
| name: Build semantic-text-splitter ${{ matrix.version }} ${{ matrix.tag }}-manylinux_riscv64 | |
| runs-on: ubuntu-24.04-riscv | |
| timeout-minutes: 120 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: ${{ fromJSON(needs.setup.outputs.versions) }} | |
| include: | |
| # bindings/python/Cargo.toml's `abi3` feature (pyo3/abi3-py310) is on | |
| # by default, so one abi3 wheel serves every GIL-ful interpreter; | |
| # pyo3 disables abi3 under Py_GIL_DISABLED, giving the free-threaded | |
| # build its own wheel (upstream's own python.yml does the same, via | |
| # a separate `-i python3.14t` maturin-action step). The `abi3t` | |
| # feature (pyo3/abi3t-py315) targets an unreleased CPython and is | |
| # out of scope for this repo's floor. | |
| - tag: cp310-abi3 | |
| # Built on cp310 -- the oldest interpreter the abi3 tag claims -- | |
| # and re-tested on the newer ones via find_compatible_wheel. | |
| build: >- | |
| cp310-manylinux_riscv64 cp311-manylinux_riscv64 | |
| cp312-manylinux_riscv64 cp313-manylinux_riscv64 | |
| cp314-manylinux_riscv64 | |
| test-requires: pytest tokenizers tree-sitter-python | |
| test-command: cd bindings/python && python -m pytest -v tests | |
| - tag: cp314t | |
| build: cp314t-manylinux_riscv64 | |
| test-requires: pytest tokenizers | |
| # tree-sitter-python ships no cp314t wheel anywhere upstream (only | |
| # cp310-abi3), and its sdist is missing src/scanner.c (present in | |
| # its git tag, so this reproduces on any arch, not just riscv64) -- | |
| # building it here fails at import with "undefined symbol: | |
| # tree_sitter_python_external_scanner_create". test_integration.py | |
| # imports it at module scope, so the whole suite is uncollectable | |
| # on this interpreter (gotcha 149's shape); the compiled-extension | |
| # assertion below is the only check this leg gets. | |
| test-command: 'true' | |
| env: | |
| SEMANTIC_TEXT_SPLITTER_VERSION: ${{ matrix.version }} | |
| steps: | |
| - name: Checkout text-splitter ${{ env.SEMANTIC_TEXT_SPLITTER_VERSION }} | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| repository: benbrandt/text-splitter | |
| ref: v${{ env.SEMANTIC_TEXT_SPLITTER_VERSION }} | |
| persist-credentials: false | |
| - name: Stage the licence beside semantic-text-splitter's pyproject.toml | |
| # maturin globs LICEN[CS]E* relative to the pyproject directory, which | |
| # is bindings/python/ in this workspace -- the licence file lives at | |
| # the repo root instead (primp/moyopy hit the same gap). | |
| run: cp LICENSE.txt bindings/python/ | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 | |
| with: | |
| package-dir: bindings/python | |
| output-dir: wheelhouse/ | |
| env: | |
| # musllinux is dropped: rustup.rs ships no riscv64 musl toolchain. | |
| CIBW_BUILD: ${{ matrix.build }} | |
| CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} | |
| # semantic-text-splitter ships no [tool.cibuildwheel], so the Rust | |
| # toolchain its maturin backend needs is installed in-container here. | |
| CIBW_BEFORE_ALL_LINUX: >- | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| # tree-sitter-python's own sdist (no riscv64 wheel on public PyPI) | |
| # builds clean but is missing the external scanner's symbols; our | |
| # registry already carries a correctly-built riscv64 wheel for it | |
| # (cp310-abi3 leg only -- see matrix.test-requires for cp314t). | |
| CIBW_ENVIRONMENT_LINUX: >- | |
| PATH="$PATH:$HOME/.cargo/bin" | |
| PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ | |
| CIBW_TEST_REQUIRES: ${{ matrix.test-requires }} | |
| CIBW_TEST_SOURCES: bindings/python/tests | |
| CIBW_TEST_COMMAND: >- | |
| python -c "import semantic_text_splitter, importlib.metadata as md; | |
| files = md.files('semantic-text-splitter'); | |
| assert any(str(p).endswith('.so') for p in files), files; | |
| assert any(str(p).endswith('licenses/LICENSE.txt') for p in files)" && | |
| ${{ matrix.test-command }} | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: semantic-text-splitter-${{ env.SEMANTIC_TEXT_SPLITTER_VERSION }}-${{ matrix.tag }}-manylinux_riscv64 | |
| path: wheelhouse/*.whl | |
| if-no-files-found: error | |
| publish: | |
| name: Publish semantic-text-splitter ${{ 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: semantic-text-splitter-${{ matrix.version }}-*-manylinux_riscv64 |