From 5b14cb800c8e64a42f7f4b0b2c443e4b976f691c Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Tue, 13 Oct 2026 01:26:06 +0000 Subject: [PATCH 1/2] materialyoucolor: Add version 3.0.4 --- .github/workflows/build-materialyoucolor.yml | 126 +++++++++++++++++++ docs/packages/materialyoucolor.yaml | 5 + 2 files changed, 131 insertions(+) create mode 100644 .github/workflows/build-materialyoucolor.yml create mode 100644 docs/packages/materialyoucolor.yaml diff --git a/.github/workflows/build-materialyoucolor.yml b/.github/workflows/build-materialyoucolor.yml new file mode 100644 index 000000000000..f1592f9740e9 --- /dev/null +++ b/.github/workflows/build-materialyoucolor.yml @@ -0,0 +1,126 @@ +# SPDX-FileCopyrightText: 2026 The RISE Project +# SPDX-License-Identifier: MIT +--- +# This workflow is based on the `build_wheels` job of +# https://github.com/T-Dynamos/materialyoucolor-python/blob/v3.0.4/.github/workflows/cibuildwheel.yml +name: Build materialyoucolor wheels (riscv64) + +on: + workflow_dispatch: + inputs: + version: + description: 'Version glob to (re)build; empty builds every version of docs/packages/materialyoucolor.yaml not released yet' + required: false + default: '' + pull_request: + branches: [main] + paths: + - '.github/workflows/build-materialyoucolor.yml' + - 'docs/packages/materialyoucolor.yaml' + push: + branches: [main] + paths: + - '.github/workflows/build-materialyoucolor.yml' + - 'docs/packages/materialyoucolor.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: materialyoucolor + version: ${{ inputs.version }} + + build_wheels: + needs: [setup] + if: needs.setup.outputs.versions != '[]' + name: Build materialyoucolor ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 + runs-on: ubuntu-24.04-riscv + strategy: + fail-fast: false + matrix: + version: ${{ fromJSON(needs.setup.outputs.versions) }} + python: ["cp312", "cp313", "cp314", "cp314t"] + + env: + MATERIALYOUCOLOR_VERSION: ${{ matrix.version }} + + steps: + - name: Checkout materialyoucolor-python v${{ env.MATERIALYOUCOLOR_VERSION }} + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: T-Dynamos/materialyoucolor-python + ref: v${{ env.MATERIALYOUCOLOR_VERSION }} + submodules: recursive + persist-credentials: false + + # The quantizer is Google's material-color-utilities C++ (Apache-2.0) plus + # stb_image.h (MIT or public domain); upstream's wheel ships only its own + # LICENSE. Stage both at the root for setuptools' default license_files glob. + - name: Stage the vendored dependencies' licences + run: | + set -euo pipefail + curl -fsSL --retry 5 "https://raw.githubusercontent.com/material-foundation/material-color-utilities/5b3618b16fdc3825e21d5679bafd144662088ea1/LICENSE" -o LICENSE.material-color-utilities + sed -n '/^This software is available under 2 licenses/,$p' materialyoucolor/quantize/stb_image.h > LICENSE.stb + + - 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/ + CIBW_BEFORE_TEST: > + pip install -r {project}/requirements.txt -r {project}/requirements-dev.txt + CIBW_TEST_COMMAND: > + python -c "from PIL import Image; Image.new('RGB', (128, 128), (70, 120, 180)).save('test_image.jpg')" && + python {project}/tests/test_all.py --image test_image.jpg --quality 1 --method pillow --tonal-spot && + python {project}/tests/test_all.py --image test_image.jpg --quality 1 --method cpp --tonal-spot + CIBW_BEFORE_BUILD: > + pip install setuptools wheel pybind11 + + - name: Check wheel contents + run: | + python3 - wheelhouse/*.whl <<'EOF' + import sys, zipfile + path = sys.argv[1] + names = zipfile.ZipFile(path).namelist() + assert any(n.startswith("materialyoucolor/quantize/celebi.") and n.endswith(".so") for n in names), names + licences = {n.rsplit("/", 1)[-1] for n in names + if ".dist-info/licenses/" in n and not n.endswith("/")} + assert licences == {"LICENSE", "LICENSE.material-color-utilities", "LICENSE.stb"}, licences + print(path, "ok") + EOF + + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: materialyoucolor-${{ env.MATERIALYOUCOLOR_VERSION }}-${{ matrix.python }}-manylinux_riscv64 + path: wheelhouse/*.whl + if-no-files-found: error + + publish: + name: Publish materialyoucolor ${{ 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: materialyoucolor-${{ matrix.version }}-*-manylinux_riscv64 diff --git a/docs/packages/materialyoucolor.yaml b/docs/packages/materialyoucolor.yaml new file mode 100644 index 000000000000..3936d24a3f64 --- /dev/null +++ b/docs/packages/materialyoucolor.yaml @@ -0,0 +1,5 @@ +package-name: materialyoucolor +source-code: https://github.com/T-Dynamos/materialyoucolor-python +license: MIT License +versions: +- version: 3.0.4 From 5f98d907b6abf3b3c7c0759e4af9718a158cc6d2 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 23 Oct 2026 15:31:30 +0000 Subject: [PATCH 2/2] materialyoucolor: Install pillow from wheels only in tests Pillow 13.0.0 was released on PyPI as an sdist with no riscv64 wheel, so the unpinned pillow in upstream's requirements.txt resolved to it and failed to build in the test environment (no libjpeg headers in the manylinux image). Restrict pillow to binaries so pip uses the riscv64 wheels from pypi.riseproject.dev. --- .github/workflows/build-materialyoucolor.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-materialyoucolor.yml b/.github/workflows/build-materialyoucolor.yml index f1592f9740e9..7ceadc6651ee 100644 --- a/.github/workflows/build-materialyoucolor.yml +++ b/.github/workflows/build-materialyoucolor.yml @@ -80,6 +80,9 @@ jobs: env: CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ + # Unpinned pillow otherwise resolves PyPI's newest sdist, which is ahead of our + # registry's riscv64 wheels and cannot build (no libjpeg headers in the image). + CIBW_TEST_ENVIRONMENT: PIP_ONLY_BINARY=pillow CIBW_BEFORE_TEST: > pip install -r {project}/requirements.txt -r {project}/requirements-dev.txt CIBW_TEST_COMMAND: >