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
121 changes: 121 additions & 0 deletions .github/workflows/build-rcssmin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
name: Build rcssmin wheels (riscv64)

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

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

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

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

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

build_sdist:
needs: [setup]
# The sdist is architecture-independent, so build it once on x86 instead of
# a scarce riscv runner. It also excludes debug.unix.cflags, a
# coverage/-Werror dev-build flag file that MANIFEST.in doesn't ship in the
# sdist; checking out the git tag directly for cibuildwheel (as the first
# version of this workflow did) picks that file up and fails cp314t with
# "ISO C90 forbids mixed declarations and code" from CPython's own
# free-threaded refcount.h.
name: Build rcssmin ${{ inputs.version || '1.2.2' }} sdist
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
sdist_name: ${{ steps.sdist.outputs.sdist_name }}
steps:
- name: Checkout rcssmin ${{ env.RCSSMIN_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ndparker/rcssmin
ref: ${{ env.RCSSMIN_VERSION }}
persist-credentials: false

- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
python-version: '3.12'
activate-environment: true
enable-cache: false

- name: Build sdist
id: sdist
run: |
uv pip install build
python -m build --sdist
sdists=(dist/*.tar.gz)
echo "sdist_name=$(basename "${sdists[0]}")" >> "$GITHUB_OUTPUT"

- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: rcssmin-${{ env.RCSSMIN_VERSION }}-sdist
path: dist/*.tar.gz
if-no-files-found: error

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

steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: rcssmin-${{ env.RCSSMIN_VERSION }}-sdist
path: dist/

- uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
package-dir: dist/${{ needs.build_sdist.outputs.sdist_name }}
env:
CIBW_ARCHS: riscv64
CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# setup.py silently falls back to a pure-Python build if the C
# extension fails to compile (gotcha 20); this makes it hard-fail.
CIBW_ENVIRONMENT: SETUP_CEXT_REQUIRED=1
CIBW_TEST_REQUIRES: pytest
CIBW_TEST_SOURCES: tests
CIBW_TEST_COMMAND: >-
python -c "import _rcssmin as m; assert m.__file__.endswith('.so'), m.__file__" &&
python -m pytest tests

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

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