Skip to content
Merged
Show file tree
Hide file tree
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
122 changes: 122 additions & 0 deletions .github/workflows/build-cmsis-pack-manager.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# Based on upstream's own wheel build at this tag:
# https://github.com/pyocd/cmsis-pack-manager/blob/v0.6.0/.github/workflows/ci-build-wheel.yml
name: Build cmsis-pack-manager wheels (riscv64)

on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/cmsis-pack-manager.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-cmsis-pack-manager.yml'
- 'docs/packages/cmsis-pack-manager.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-cmsis-pack-manager.yml'
- 'docs/packages/cmsis-pack-manager.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: cmsis-pack-manager
version: ${{ inputs.version }}

build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build cmsis-pack-manager ${{ matrix.version }} py3-none-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 180
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}

env:
CMSIS_PACK_MANAGER_VERSION: ${{ matrix.version }}

steps:
- name: Checkout cmsis-pack-manager ${{ env.CMSIS_PACK_MANAGER_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: pyocd/cmsis-pack-manager
ref: v${{ env.CMSIS_PACK_MANAGER_VERSION }}
persist-credentials: false

- uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0
with:
output-dir: wheelhouse/
env:
# maturin's cffi bindings reach the Rust cdylib through cffi's ABI mode, so
# the wheel is py3-none: one build serves every interpreter, and the further
# identifiers only re-run the test command against it.
CIBW_BUILD: cp312-manylinux_riscv64 cp313-manylinux_riscv64 cp314-manylinux_riscv64 cp314t-manylinux_riscv64
CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }}
# Upstream also installs libffi-devel, libatomic and openssl-devel here; the
# first two the image already ships, and the crate graph uses rustls.
CIBW_BEFORE_ALL_LINUX: >
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain 1.71.1 --profile=minimal -y
CIBW_ENVIRONMENT: >-
PATH="$PATH:$HOME/.cargo/bin"
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
CIBW_TEST_SOURCES: tests pyproject.toml
CIBW_TEST_EXTRAS: test
# hypothesis' newest release has no free-threaded riscv64 wheel, and pip
# resolves by version, not by what has one; ours is a release older.
CIBW_TEST_ENVIRONMENT: PIP_ONLY_BINARY=hypothesis
CIBW_TEST_COMMAND: pytest --cache-clear

- name: Check the wheel carries the Rust cdylib
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile

for whl in sys.argv[1:]:
names = zipfile.ZipFile(whl).namelist()
assert any(
n.endswith("cmsis_pack_manager/libcmsis_pack_manager.so") for n in names
), names
print(whl, "ok")
EOF

- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: cmsis-pack-manager-${{ env.CMSIS_PACK_MANAGER_VERSION }}-py3-none-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error

publish:
name: Publish cmsis-pack-manager ${{ 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: cmsis-pack-manager-${{ matrix.version }}-py3-none-manylinux_riscv64
5 changes: 5 additions & 0 deletions docs/packages/cmsis-pack-manager.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package-name: cmsis-pack-manager
source-code: https://github.com/pyocd/cmsis-pack-manager
license: Apache-2.0
versions:
- version: 0.6.0
Loading