Repository navigation
156 lines (140 loc) · 5.86 KB
/
Copy pathbuild-dlib-bin.yml
File metadata and controls
156 lines (140 loc) · 5.86 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
152
153
154
155
156
# SPDX-FileCopyrightText: 2026 The RISE Project
# SPDX-License-Identifier: MIT
---
# This workflow is based on: https://github.com/alesanfra/dlib-wheels/blob/master/.github/workflows/build.yaml
name: Build dlib-bin wheels (riscv64)
on:
workflow_dispatch:
inputs:
version:
description: 'Version glob to (re)build; empty builds every version of docs/packages/dlib-bin.yaml not released yet'
required: false
default: ''
pull_request:
branches: [main]
paths:
- '.github/workflows/build-dlib-bin.yml'
- 'docs/packages/dlib-bin.yaml'
push:
branches: [main]
paths:
- '.github/workflows/build-dlib-bin.yml'
- 'docs/packages/dlib-bin.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: dlib-bin
version: ${{ inputs.version }}
build_wheels:
needs: [setup]
if: needs.setup.outputs.versions != '[]'
name: Build dlib-bin ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64
runs-on: ubuntu-24.04-riscv
timeout-minutes: 600
strategy:
fail-fast: false
# Upstream publishes no free-threaded wheel, so cp314t is not built.
matrix:
version: ${{ fromJSON(needs.setup.outputs.versions) }}
python: ["cp312", "cp313", "cp314"]
env:
DLIB_BIN_VERSION: ${{ matrix.version }}
steps:
# davisking/dlib tags only the base release; a .postN dlib-bin version is
# the same upstream source republished under a new distribution version.
- name: Determine upstream git tag
run: echo "DLIB_TAG=v${DLIB_BIN_VERSION%.post*}" >> "$GITHUB_ENV"
- name: Checkout dlib ${{ env.DLIB_TAG }}
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: davisking/dlib
ref: ${{ env.DLIB_TAG }}
persist-credentials: false
- name: Patch dlib configuration
run: |
sed -i'' -e "s/name='dlib'/name='dlib-bin'/" setup.py
sed -i'' -e "s/version=read_version_from_cmakelists('dlib\/CMakeLists.txt')/version='$DLIB_BIN_VERSION'/" setup.py
sed -i'' -e "s/url='https:\/\/github\.com\/davisking\/dlib'/url='https:\/\/github\.com\/alesanfra\/dlib-wheels'/" setup.py
sed -i'' -e "s/_cmake_extra_options = \[\]/_cmake_extra_options = \['-DDLIB_NO_GUI_SUPPORT=ON'\]/" setup.py
grep -q "name='dlib-bin'" setup.py
grep -q "version='$DLIB_BIN_VERSION'" setup.py
# dlib compiles its bundled libpng, zlib and libjpeg into the extension
# whenever the system libraries are absent, which they are in the
# manylinux image, and the bindings are built with pybind11. Upstream
# ships none of their licences, on any architecture.
- name: Stage the bundled libraries' licences
run: |
cp dlib/external/libpng/LICENSE LICENSE.libpng
cp dlib/external/pybind11/LICENSE LICENSE.pybind11
sed -n '/Copyright (C) 1995-2017 Jean-loup Gailly/,/madler@alumni.caltech.edu/p' \
dlib/external/zlib/zlib.h > LICENSE.zlib
sed -n '/^LEGAL ISSUES$/,/^REFERENCES$/p' dlib/external/libjpeg/README \
| sed '$d' > LICENSE.libjpeg
for f in LICENSE.libpng LICENSE.pybind11 LICENSE.zlib LICENSE.libjpeg; do
test -s "$f" || { echo "$f is empty"; exit 1; }
done
- 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_BUILD: pip install cmake
# Upstream's wheel job only imports dlib; this runs the suite dlib's
# own build_python.yml runs, staged so the checkout cannot shadow the
# wheel. numpy resolves from the RISE registry.
CIBW_TEST_REQUIRES: pytest numpy
CIBW_TEST_SOURCES: tools/python/test examples/faces
CIBW_TEST_COMMAND: python -m pytest tools/python/test
CIBW_TEST_ENVIRONMENT: >-
PIP_ONLY_BINARY=numpy
PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/
- name: Check the wheel ships the extension and the licences
run: |
python3 - wheelhouse/*.whl <<'EOF'
import sys, zipfile
names = zipfile.ZipFile(sys.argv[1]).namelist()
assert any(
n.startswith("_dlib_pybind11.") and n.endswith(".so") for n in names
), names
licences = {
n.rsplit("/", 1)[1] for n in names if ".dist-info/licenses/" in n
} - {""}
assert licences == {
"LICENSE.txt",
"LICENSE.libjpeg",
"LICENSE.libpng",
"LICENSE.pybind11",
"LICENSE.zlib",
}, licences
EOF
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: dlib-bin-${{ env.DLIB_BIN_VERSION }}-${{ matrix.python }}-manylinux_riscv64
path: wheelhouse/*.whl
if-no-files-found: error
publish:
name: Publish dlib-bin ${{ 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: dlib-bin-${{ matrix.version }}-*-manylinux_riscv64