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
88 changes: 88 additions & 0 deletions .github/workflows/build-typedunits.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on the `build_wheels` job of
# https://github.com/quantumlib/TypedUnits/blob/v0.0.2/.github/workflows/stable-release-workflow.yml
name: Build typedunits wheels (riscv64)

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

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

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

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

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

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

steps:
- name: Checkout typedunits v${{ env.TYPEDUNITS_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: quantumlib/TypedUnits
ref: v${{ env.TYPEDUNITS_VERSION }}
persist-credentials: false

- name: Write package version
# setup.py reads version/version.txt, falling back to "<tag>.dev" otherwise;
# upstream's own release workflow writes this file in a separate host-side job
# before cibuildwheel so the built wheel's version matches the git tag exactly.
run: |
mkdir -p version
echo "${{ env.TYPEDUNITS_VERSION }}" > version/version.txt

- 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_ENVIRONMENT: >-
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
PIP_ONLY_BINARY=numpy,protobuf
CIBW_TEST_REQUIRES: pytest
CIBW_TEST_COMMAND: >-
python -c "import tunits_core; assert tunits_core.__file__.endswith('.so')"
&& python -m pytest -v {package}/test

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

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