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
98 changes: 98 additions & 0 deletions .github/workflows/build-aiokafka.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on the `package-wheel` job of:
# https://github.com/aio-libs/aiokafka/blob/v0.14.0/.github/workflows/publish.yml
name: Build aiokafka wheels (riscv64)

on:
workflow_dispatch:
inputs:
version:
description: 'aiokafka version to build (git tag without leading v, e.g. 0.14.0)'
required: true
default: '0.14.0'
pull_request:
paths:
- '.github/workflows/build-aiokafka.yml'

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

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

build_wheels:
needs: [setup]
name: Build aiokafka ${{ inputs.version || '0.14.0' }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
# Per-interpreter (not abi3): the Cython extensions link the version-specific ABI.
python:
- "cp312"
- "cp313"
- "cp314"
- "cp314t"

steps:
- name: Checkout aiokafka v${{ env.AIOKAFKA_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: aio-libs/aiokafka
ref: v${{ env.AIOKAFKA_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 }}
CIBW_BEFORE_BUILD_LINUX: pip install -r requirements-cython.txt && yum install -y zlib-devel
CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
# The repo-root aiokafka/ would otherwise shadow the installed wheel's
# compiled extension; stage only the suite and its pytest config.
CIBW_TEST_SOURCES: tests pyproject.toml
# Pin to upstream's own requirements-ci.txt versions: newer pytest turns
# test_requests.py's generator-based parametrize into a hard failure under
# this project's `filterwarnings = ["error"]`. gssapi is skipped - it needs
# krb5 headers and is only exercised by the docker-backed SASL tests below.
CIBW_TEST_REQUIRES: >-
pytest==9.0.2 pytest-asyncio==1.3.0 pytest-cov==7.0.0 pytest-mock==3.15.1
docker cramjam
# cp314t: the Cython extensions use single-phase init, so 3.14t re-enables
# the GIL on import and warns; fatal under filterwarnings=["error"] (gotcha 127).
CIBW_TEST_ENVIRONMENT: PIP_ONLY_BINARY=cramjam PYTHON_GIL=1
# No --docker-image: upstream's own wheel-test jobs run this same way, since
# none of them have a Kafka broker either. Tests needing one skip themselves.
CIBW_TEST_COMMAND: python -m pytest tests

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

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