Repository navigation
164 lines (142 loc) · 5.53 KB
/
Copy pathci-macos.yml
File metadata and controls
164 lines (142 loc) · 5.53 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
157
158
159
160
161
162
163
164
name: CI macOS ARM
on:
push:
branches: ["master", "cefpython147-mac"]
pull_request:
branches: ["master"]
workflow_dispatch:
inputs:
bypass_cache:
description: "Bypass all caches for a clean run"
type: boolean
default: false
jobs:
download-cef:
runs-on: macos-14
timeout-minutes: 15
outputs:
cef_version: ${{ steps.cef-version.outputs.value }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Read CEF version
id: cef-version
run: |
ver=$(sed -n 's/.*#define CEF_VERSION "\([^"]*\)".*/\1/p' \
src/version/cef_version_macarm64.h)
echo "value=$ver" >> $GITHUB_OUTPUT
- name: Cache CEF binaries
uses: actions/cache@v4
if: ${{ inputs.bypass_cache != true }}
with:
path: |
build/cef_binary_*
build/cef*_macarm64
# Keyed on the CEF version (each version gets its own cache) and on the
# download/prepare scripts (invalidate when they change).
key: cef-macosarm64-${{ hashFiles('tools/download_cef.py', 'tools/automate.py') }}-${{ steps.cef-version.outputs.value }}
- name: Install build tools
run: python tools/requirements.py
- name: Download CEF binaries
run: python tools/download_cef.py
build:
needs: download-cef
runs-on: macos-14
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # full history for the --dev wheel version (git commit count)
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Restore CEF cache
uses: actions/cache/restore@v4
if: ${{ inputs.bypass_cache != true }}
with:
path: |
build/cef_binary_*
build/cef*_macarm64
key: cef-macosarm64-${{ hashFiles('tools/download_cef.py', 'tools/automate.py') }}-${{ needs.download-cef.outputs.cef_version }}
- name: Install build tools
run: python tools/requirements.py
- name: Prepare prebuilt CEF
run: python tools/automate.py --prebuilt-cef
- name: Configure CMake
run: cmake -S . -B build/_cmake_build -G Ninja -DCMAKE_BUILD_TYPE=Release
- name: Build
run: cmake --build build/_cmake_build --parallel
- name: Stage build outputs
run: |
mkdir -p build/artifacts
cp build/_cmake_build/cefpython_py*.so build/artifacts/
helpers=(build/_cmake_build/subprocess_build/"cefpython Helper"*.app)
if [ "${#helpers[@]}" -ne 5 ]; then
echo "Expected 5 CEF helper app bundles, found ${#helpers[@]}" >&2
exit 1
fi
for app in "${helpers[@]}"; do
executable="$app/Contents/MacOS/$(basename "$app" .app)"
if [ ! -x "$executable" ]; then
echo "Missing helper executable: $executable" >&2
exit 1
fi
cp -R "$app" build/artifacts/
done
cef_dir=$(ls -d build/cef*_macarm64 2>/dev/null | head -1)
find "$cef_dir/bin" -maxdepth 1 -mindepth 1 \
! -name 'cefclient*' ! -name 'cefsimple*' ! -name 'ceftests*' \
-exec cp -R {} build/artifacts/ \;
- name: Set up cefpython3 package
run: cp -R build/artifacts/. cefpython3/
- name: Codesign binaries
run: |
# automate.py changes the framework Mach-O install name, invalidating
# its upstream signature. Sign staged code inside-out, then verify
# every final bundle strictly before it is written to the wheel.
framework="cefpython3/Chromium Embedded Framework.framework"
codesign --force --deep --sign - "$framework"
codesign --verify --deep --strict --verbose=2 "$framework"
for module in cefpython3/cefpython_py*.so; do
codesign --force --sign - "$module"
codesign --verify --strict --verbose=2 "$module"
done
helpers=(cefpython3/"cefpython Helper"*.app)
if [ "${#helpers[@]}" -ne 5 ]; then
echo "Expected 5 staged CEF helper app bundles, found ${#helpers[@]}" >&2
exit 1
fi
for app in "${helpers[@]}"; do
chmod 755 "$app/Contents/MacOS/$(basename "$app" .app)"
codesign --force --deep --sign - "$app"
codesign --verify --deep --strict --verbose=2 "$app"
done
- name: Build wheel
run: python tools/build_distrib.py --dev
- name: Unit-test the built wheel
run: |
# Install the wheel and run the unit tests against the INSTALLED
# package (all native code was signed before build_distrib). No
# PYTHONPATH: _test_runner.py chdir's to unittests/, so the repo's
# cefpython3/ build dir is never on sys.path and import cefpython3
# resolves to the installed wheel.
pip install build/dist/*.whl
python unittests/_test_runner.py
- name: Smoke-test the built wheel
timeout-minutes: 5
run: python tools/smoke_test.py
- name: Upload wheel artifact
uses: actions/upload-artifact@v7
with:
path: build/dist/*.whl
archive: false