Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions .github/workflows/build-tantivy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on the `linux` job of
# https://github.com/quickwit-oss/tantivy-py/blob/0.26.0/.github/workflows/publish.yaml
name: Build tantivy wheels (riscv64)

on:
workflow_dispatch:
inputs:
version:
description: 'tantivy version to build (git tag, e.g. 0.26.0)'
required: true
default: '0.26.0'
pull_request:
paths:
- '.github/workflows/build-tantivy.yml'

concurrency:
group: ${{ github.workflow }}-${{ inputs.version || '0.26.0' }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

permissions:
contents: read # to fetch code (actions/checkout)

env:
TANTIVY_VERSION: ${{ inputs.version || '0.26.0' }}
MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64

jobs:
setup:
uses: $/.github/workflows/_setup.yml

build_wheels:
needs: [setup]
name: Build tantivy ${{ inputs.version || '0.26.0' }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
python: ["cp312", "cp313", "cp314", "cp314t"]

steps:
- name: Checkout tantivy-py ${{ env.TANTIVY_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: quickwit-oss/tantivy-py
ref: ${{ env.TANTIVY_VERSION }}
persist-credentials: false

- name: Build and test wheel
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
env:
# musllinux is dropped: rustup.rs ships no riscv64 musl toolchain.
CIBW_ARCHS: riscv64
CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# tantivy-py 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
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin"'
# The repo-root tantivy/ package (from .tantivy import *) shadows the
# wheel's compiled submodule when tested in place (no .so there outside
# a maturin-develop editable install), so stage only what the suite
# needs and test the installed wheel via --pyargs (gotcha 25).
# docs/contributing.md is a symlink to ../CONTRIBUTING.md, so that file
# needs staging too or the doctest suite hits a dangling link.
CIBW_TEST_SOURCES: tests docs CONTRIBUTING.md
CIBW_TEST_REQUIRES: pytest mktestdocs==0.2.1
CIBW_TEST_COMMAND: >-
python -c "import tantivy.tantivy as m; assert m.__file__.endswith('.so'), m.__file__" &&
python -m pytest tests &&
python -m pytest --pyargs tantivy --doctest-modules

- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: tantivy-${{ env.TANTIVY_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: ./wheelhouse/*.whl
if-no-files-found: error

publish:
name: Publish tantivy ${{ inputs.version || '0.26.0' }}
needs: [setup, build_wheels]
permissions:
contents: write
pull-requests: write
uses: $/.github/workflows/_publish-wheel.yml
with:
artifact-pattern: tantivy-${{ inputs.version || '0.26.0' }}-*-manylinux_riscv64
Loading