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
136 changes: 136 additions & 0 deletions .github/workflows/build-dearpygui.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow mirrors the build-linux-*-wheels jobs of upstream's own
# .github/workflows/Deployment.yml (setup.py driving CMake over the vendored
# imgui/implot/glfw submodules), narrowed to riscv64 and run through cibuildwheel.
name: Build dearpygui wheels (riscv64)

on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/dearpygui.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-dearpygui.yml'
- 'docs/packages/dearpygui.yaml'
- 'patches/dearpygui/**'
push:
branches: [main]
paths:
- '.github/workflows/build-dearpygui.yml'
- 'docs/packages/dearpygui.yaml'
- 'patches/dearpygui/**'

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: dearpygui
version: ${{ inputs.version }}

build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build dearpygui ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 240
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
python: ["cp312", "cp313", "cp314"]

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

steps:
- name: Checkout DearPyGui v${{ env.DEARPYGUI_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: hoffstadt/DearPyGui
ref: v${{ env.DEARPYGUI_VERSION }}
persist-credentials: false

- name: Retrieve submodules
run: |
git submodule update --init --recursive ./thirdparty/imgui
git submodule update --init --recursive ./thirdparty/implot
git submodule update --init --recursive ./thirdparty/glfw

- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
persist-credentials: false

- name: Patch DearPyGui source
run: git apply python-wheels/patches/dearpygui/${{ env.DEARPYGUI_VERSION }}/*.patch

- name: Mark Versions
run: echo "${DEARPYGUI_VERSION}" > version_number.txt

# The extension statically compiles these vendored trees but the wheel ships only
# DearPyGui's own LICENSE; setuptools' default LICEN[CS]E* glob picks these up.
- name: Stage vendored licences
run: |
cp thirdparty/imgui/LICENSE.txt LICENSE.imgui
cp thirdparty/implot/LICENSE LICENSE.implot
cp thirdparty/glfw/LICENSE.md LICENSE.glfw
cp thirdparty/imnodes/LICENSE.md LICENSE.imnodes
cp thirdparty/ImGuiFileDialog/LICENSE LICENSE.ImGuiFileDialog

- 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_BEFORE_ALL: dnf install -y libXrandr-devel libXinerama-devel libXcursor-devel libXi-devel mesa-libGL-devel libxcrypt-devel
# Rocky's linker does not default to --as-needed like upstream's Ubuntu builder, so
# without it the unused -lcrypt/-lGL in distribution.cmake become NEEDED entries.
CIBW_ENVIRONMENT: >-
LDFLAGS="-Wl,--as-needed"
CMAKE_BUILD_PARALLEL_LEVEL="$(nproc)"
CIBW_TEST_SOURCES: testing
CIBW_TEST_COMMAND: >-
python -m unittest -v testing/simple_tests.py &&
python -c "import importlib.metadata as m; got = {p.name for p in m.files('dearpygui') if '.dist-info/licenses/' in str(p)}; exp = {'LICENSE', 'LICENSE.imgui', 'LICENSE.implot', 'LICENSE.glfw', 'LICENSE.imnodes', 'LICENSE.ImGuiFileDialog'}; assert got == exp, sorted(got)"

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

publish:
name: Publish dearpygui ${{ 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: dearpygui-${{ matrix.version }}-*-manylinux_riscv64
6 changes: 6 additions & 0 deletions docs/packages/dearpygui.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package-name: dearpygui
source-code: https://github.com/hoffstadt/DearPyGui
license: MIT
versions:
- version: 2.3.1
patched: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
From: Ludovic Henry <git@ludovic.dev>
Date: Sun, 4 Oct 2026 13:10:00 +0200
Subject: [PATCH] cmake: request only Development.Module from FindPython

distribution.cmake asks FindPython for the full Development component,
which requires both Development.Module and Development.Embed (a libpython
usable for embedding). manylinux wheel-building images build CPython with
Py_ENABLE_SHARED=0 and ship no libpython at all (PEP 513), so
Development.Embed's Python_LIBRARIES lookup fails and configure aborts
with the "python3 development library ... need to be installed first"
error, even though _dearpygui only ever needs Development.Module (on
Linux it never links ${Python_LIBRARIES}). This is independent of
riscv64: it reproduces the same way in the x86_64/aarch64 manylinux
images; upstream's own Linux wheels avoid it only because they build
against actions/setup-python's shared-libpython interpreters outside
manylinux.

Upstream-Status: To upstream [not yet submitted; this repo does not open issues/PRs on third-party repositories]

---
src/distribution.cmake | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/distribution.cmake b/src/distribution.cmake
index c943053..01e98f5 100644
--- a/src/distribution.cmake
+++ b/src/distribution.cmake
@@ -1,7 +1,7 @@
cmake_minimum_required (VERSION 3.16)

-find_package (Python ${MV_PY_VERSION} EXACT COMPONENTS Development)
-if(NOT Python_Development_FOUND)
+find_package (Python ${MV_PY_VERSION} EXACT COMPONENTS Development.Module)
+if(NOT Python_Development.Module_FOUND)
message(FATAL_ERROR "The python3 development library from your distribution repo need to be installed first!")
endif()

--
2.47.0

Loading