Skip to content

geventhttpclient: Add versions 2.4.0, 2.5.0, 2.5.1 #21

geventhttpclient: Add versions 2.4.0, 2.5.0, 2.5.1

geventhttpclient: Add versions 2.4.0, 2.5.0, 2.5.1 #21

# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on the `build-wheels` job of
# https://github.com/geventhttpclient/geventhttpclient/blob/2.3.9/.github/workflows/publish.yml
# and the tox `testenv` upstream runs in .github/workflows/test.yml.
name: Build geventhttpclient wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/geventhttpclient.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-geventhttpclient.yml'
- 'docs/packages/geventhttpclient.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-geventhttpclient.yml'
- 'docs/packages/geventhttpclient.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: geventhttpclient
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build geventhttpclient ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
python: ["cp312", "cp313", "cp314", "cp314t"]
include:
# gevent, a hard runtime dependency, publishes no free-threaded wheel on
# any platform, so the cp314t wheel cannot be installed to be tested.
- python: "cp314t"
test_skip: "*"
env:
GEVENTHTTPCLIENT_VERSION: ${{ matrix.version }}
steps:
# The llhttp parser is a submodule; setup.py compiles its sources directly.
- name: Checkout geventhttpclient ${{ env.GEVENTHTTPCLIENT_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: geventhttpclient/geventhttpclient
ref: ${{ env.GEVENTHTTPCLIENT_VERSION }}
submodules: recursive
persist-credentials: false
- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
persist-credentials: false
# llhttp is compiled into the extension under its own MIT notice, which
# upstream's wheels do not ship.
- name: Patch geventhttpclient source
run: |
git apply python-wheels/patches/geventhttpclient/${{ env.GEVENTHTTPCLIENT_VERSION }}/00*.patch
# musllinux is skipped: our registry carries gevent and brotli for
# manylinux riscv64 only, so a musl wheel could be neither installed nor tested.
- uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
env:
CIBW_ARCHS: riscv64
CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# gevent and brotli have no riscv64 wheel on public PyPI.
CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
CIBW_TEST_SKIP: ${{ matrix.test_skip }}
# pyproject.toml registers the `network` marker.
CIBW_TEST_SOURCES: tests pyproject.toml
CIBW_TEST_EXTRAS: dev
CIBW_TEST_COMMAND: >-
python -c "import importlib.metadata as m;
l = {str(p).split('.dist-info/licenses/')[1] for p in m.files('geventhttpclient') if '.dist-info/licenses/' in str(p)};
assert l == {'LICENSE-MIT', 'llhttp/LICENSE-MIT'}, l" &&
python -m pytest tests
# The only proof the untested cp314t wheel really carries the extension.
- name: Check the wheel ships the parser extension
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile
names = zipfile.ZipFile(sys.argv[1]).namelist()
sos = [n for n in names if n.endswith(".so")]
assert len(sos) == 1 and sos[0].startswith("geventhttpclient/_parser."), sos
EOF
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: geventhttpclient-${{ env.GEVENTHTTPCLIENT_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: ./wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish geventhttpclient ${{ 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: geventhttpclient-${{ matrix.version }}-*-manylinux_riscv64