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
99 changes: 99 additions & 0 deletions .github/workflows/build-rustpy-xlsxwriter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on the `linux` job of
# https://github.com/rahmadafandi/rustpy-xlsxwriter/blob/0.6.1/.github/workflows/CI.yml
name: Build rustpy-xlsxwriter wheels (riscv64)

on:
workflow_dispatch:
inputs:
version:
description: 'rustpy-xlsxwriter version to build (git tag, e.g. 0.6.1)'
required: true
default: '0.6.1'
pull_request:
paths:
- '.github/workflows/build-rustpy-xlsxwriter.yml'

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

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

build_wheels:
needs: [setup]
name: Build rustpy-xlsxwriter ${{ inputs.version || '0.6.1' }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
# rustpy-xlsxwriter's [tool.maturin] features only lists
# "pyo3/extension-module" (no abi3), so every interpreter needs its own
# build.
python: ["cp312", "cp313", "cp314", "cp314t"]

steps:
- name: Checkout rustpy-xlsxwriter ${{ env.RUSTPY_XLSXWRITER_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: rahmadafandi/rustpy-xlsxwriter
ref: ${{ env.RUSTPY_XLSXWRITER_VERSION }}
persist-credentials: false

- name: Build and test wheel
uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
env:
CIBW_BUILD: ${{ matrix.python }}-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# rustpy-xlsxwriter ships no [tool.cibuildwheel], so the Rust
# toolchain its maturin backend needs is installed in-container here.
CIBW_BEFORE_ALL_LINUX: >-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
CIBW_ENVIRONMENT_LINUX: >-
PATH="$PATH:$HOME/.cargo/bin"
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
CIBW_TEST_ENVIRONMENT: >-
PIP_ONLY_BINARY=numpy,pandas,pyarrow,polars-runtime-32,polars-runtime-64
# pandas has no cp314t wheel on our registry yet, and it's needed
# transitively by several test modules; skip testing that leg
# (the wheel itself still builds).
CIBW_TEST_SKIP: cp314t-*
CIBW_TEST_SOURCES: tests
# pyarrow is not in upstream's [project.optional-dependencies] tests
# extra but is in their frozen dev requirements.txt: pandas 3's
# __arrow_c_stream__ needs it, and without it pandas falls back to a
# slower path that mishandles NaT (test_csv.py::TestCSVArrowPath).
CIBW_TEST_REQUIRES: pytest faker openpyxl pandas pyarrow polars
CIBW_TEST_COMMAND: >-
python -m pytest tests/ -v -ra --durations=0 -m "not benchmark"

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

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