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

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

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

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

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

steps:
- name: Checkout gnureadline v${{ env.GNUREADLINE_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ludwigschwardt/python-gnureadline
ref: v${{ env.GNUREADLINE_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 }}
# Matches upstream's own wheels.yaml test override (its pyproject.toml
# default of a full pytest run is for local/tox use).
CIBW_TEST_REQUIRES: ""
CIBW_TEST_COMMAND: python -c "import gnureadline"

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

gpl_sources:
needs: [setup]
name: Collect GPL sources (readline) for gnureadline ${{ inputs.version || '8.3.3' }}
runs-on: ubuntu-latest
steps:
- name: Checkout gnureadline v${{ env.GNUREADLINE_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ludwigschwardt/python-gnureadline
ref: v${{ env.GNUREADLINE_VERSION }}
persist-credentials: false

# gnureadline statically links a real GNU readline it builds itself from
# source (that's the whole point of the package - see rl/build.sh) rather
# than a system/manylinux-image readline, so unlike gotcha 66's gcc/libgomp
# case the GPL source lives in the checkout, not the build image: archive
# rl/ verbatim (the readline tarball, its official patches, and the build
# script that applies and configures them - all "Corresponding Source"
# under GPLv3 6.).
- name: Archive readline source
run: tar -cf gpl-sources.tar rl

- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: gnureadline-${{ env.GNUREADLINE_VERSION }}-gpl-sources
path: gpl-sources.tar
if-no-files-found: error

publish:
name: Publish gnureadline ${{ inputs.version || '8.3.3' }}
needs: [setup, build_wheels, gpl_sources]
permissions:
contents: write
pull-requests: write
uses: $/.github/workflows/_publish-wheel.yml
with:
artifact-pattern: gnureadline-${{ inputs.version || '8.3.3' }}-*-manylinux_riscv64
gpl-sources-artifact: gnureadline-${{ inputs.version || '8.3.3' }}-gpl-sources
gpl-sources-description: GNU readline (statically linked; see rl/build.sh)