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
100 changes: 100 additions & 0 deletions .github/workflows/build-blis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on: https://github.com/explosion/cython-blis/blob/release-v1.3.3/.github/workflows/cibuildwheel.yml
name: Build blis wheels (riscv64)

on:
workflow_dispatch:
inputs:
version:
description: 'blis version to build (e.g. 1.3.3)'
required: true
default: '1.3.3'
pull_request:
paths:
- '.github/workflows/build-blis.yml'

concurrency:
group: ${{ github.workflow }}-${{ inputs.version || '1.3.3' }}-${{ 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 1.3.3 there.
BLIS_VERSION: ${{ inputs.version || '1.3.3' }}
MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64

jobs:
build_wheels:
name: Build blis ${{ inputs.version || '1.3.3' }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 360
strategy:
fail-fast: false
matrix:
# Upstream's [tool.cibuildwheel] skips `cp3??t-*`, so no free-threaded build.
python:
- "cp312"
- "cp313"
- "cp314"

steps:
- name: Checkout cython-blis ${{ env.BLIS_VERSION }}
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: explosion/cython-blis
ref: release-v${{ env.BLIS_VERSION }}
persist-credentials: false

- name: Build wheels
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 }}
# setup.py's get_arch_name() already picks the portable `generic` BLIS
# config for any Linux machine that is not x86_64/aarch64/ppc64le.
CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
# Upstream tests in a separate workflow (tests.yml), which installs the
# wheel, deletes the source tree and runs the suite shipped inside it.
CIBW_TEST_REQUIRES: pytest hypothesis>=4.0.0,<7.0.0
CIBW_TEST_COMMAND: python -m pytest --pyargs blis -Werror

- name: Check the compiled extensions made it into the wheel
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile
for whl in sys.argv[1:]:
names = zipfile.ZipFile(whl).namelist()
got = {n for n in names if n.endswith(".so")}
assert len(got) == 2, f"expected blis.cy and blis.py extensions in {whl}, got {got}"
print(whl, sorted(got))
EOF

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

publish:
name: Publish blis ${{ inputs.version || '1.3.3' }} to GitLab
needs: [build_wheels]
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

steps:
- name: Publish wheels and open docs PR
uses: riseproject-dev/python-wheels/actions/publish-wheels@main
with:
artifact-pattern: blis-${{ env.BLIS_VERSION }}-*-manylinux_riscv64
gitlab-username: ${{ vars.GITLAB_DEPLOY_USER }}
gitlab-token: ${{ secrets.GITLAB_DEPLOY_TOKEN }}
gitlab-project-id: ${{ vars.GITLAB_PROJECT_ID }}
gh-token: ${{ secrets.GITHUB_TOKEN }}
Loading