-
Notifications
You must be signed in to change notification settings - Fork 0
151 lines (136 loc) · 5.9 KB
/
Copy pathbuild-rawpy.yml
File metadata and controls
151 lines (136 loc) · 5.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
name: Build rawpy wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/rawpy.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-rawpy.yml'
- 'docs/packages/rawpy.yaml'
- 'patches/rawpy/**'
push:
branches: [main]
paths:
- '.github/workflows/build-rawpy.yml'
- 'docs/packages/rawpy.yaml'
- 'patches/rawpy/**'
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: rawpy
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build rawpy ${{ 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:
RAWPY_VERSION: ${{ matrix.version }}
steps:
- name: Checkout rawpy v${{ env.RAWPY_VERSION }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: letmaik/rawpy
ref: v${{ env.RAWPY_VERSION }}
submodules: true
persist-credentials: false
- name: Checkout python-wheels
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: python-wheels
persist-credentials: false
- name: Patch rawpy source
run: git apply python-wheels/patches/rawpy/${{ env.RAWPY_VERSION }}/*.patch
- 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 }}
# Rocky 10 riscv64 ships lcms2/jasper directly; its libjpeg-turbo lacks the
# JPEG8 ABI (DNG lossy codec) upstream's own build-linux.sh gets by building
# from source with -DWITH_JPEG8=ON, so only that one is built the same way
# upstream does (riscv64 has no libjpeg-turbo SIMD kernels, hence -DWITH_SIMD=0).
CIBW_BEFORE_BUILD: >
dnf install -y zlib-ng-compat-devel lcms2-devel jasper-devel &&
curl -fsSL -o /tmp/libjpeg-turbo.tar.gz
https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.1.3/libjpeg-turbo-3.1.3.tar.gz &&
echo "075920b826834ac4ddf97661cc73491047855859affd671d52079c6867c1c6c0 /tmp/libjpeg-turbo.tar.gz" | sha256sum -c - &&
tar xzf /tmp/libjpeg-turbo.tar.gz -C /tmp &&
cmake -S /tmp/libjpeg-turbo-3.1.3 -B /tmp/libjpeg-turbo-3.1.3/build
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
-DENABLE_SHARED=ON -DENABLE_STATIC=OFF -DWITH_JPEG8=ON -DWITH_SIMD=0 &&
cmake --build /tmp/libjpeg-turbo-3.1.3/build -j"$(nproc)" --target install &&
rm -f /usr/include/jconfig-32.h /usr/include/jconfig-64.h &&
curl -fsSL -o {project}/LICENSE.lcms2 https://raw.githubusercontent.com/mm2/Little-CMS/lcms2.16/LICENSE &&
curl -fsSL -o {project}/LICENSE.libjpeg-turbo https://raw.githubusercontent.com/libjpeg-turbo/libjpeg-turbo/3.1.3/LICENSE.md &&
curl -fsSL -o {project}/LICENSE.jasper https://raw.githubusercontent.com/jasper-software/jasper/version-4.1.0/LICENSE.txt
CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
CIBW_TEST_ENVIRONMENT: CI=true
CIBW_TEST_EXTRAS: test
CIBW_TEST_SOURCES: test examples
CIBW_TEST_COMMAND: >-
python -c "import importlib.metadata as m; names={p.name for p in m.files('rawpy') if '.dist-info/licenses/' in str(p)}; assert names == {'LICENSE','LICENSE.LibRaw','LICENSE.lcms2','LICENSE.libjpeg-turbo','LICENSE.jasper'}, names" &&
python -m pytest -v test
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: rawpy-${{ env.RAWPY_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
gpl_sources:
name: Collect GPL sources (gcc) for rawpy ${{ matrix.version }}
needs: [setup]
if: needs.setup.outputs.versions != '[]'
runs-on: ubuntu-24.04-riscv
strategy:
fail-fast: false
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
steps:
- uses: riseproject-dev/python-wheels/actions/collect-gpl-sources@main
with:
image: ${{ env.MANYLINUX_RISCV64_IMAGE }}
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: rawpy-${{ matrix.version }}-gpl-sources
path: gpl-sources.tar
if-no-files-found: error
publish:
name: Publish rawpy ${{ matrix.version }}
needs: [setup, build_wheels, gpl_sources]
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: rawpy-${{ matrix.version }}-*-manylinux_riscv64
gpl-sources-artifact: rawpy-${{ matrix.version }}-gpl-sources
gpl-sources-description: gcc