-
Notifications
You must be signed in to change notification settings - Fork 201
120 lines (107 loc) · 3.89 KB
/
reusable_build_wheels.yaml
File metadata and controls
120 lines (107 loc) · 3.89 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
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Reusable workflow called by other workflows. (It never triggers on its own.)
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# The tilde is only to make our reusable workflows be listed last in the UI.
name: '~ Build & test Python wheels'
run-name: Build Python wheels and test that they work
on:
workflow_call:
inputs:
upload:
description: 'Upload wheels to GitHub'
type: boolean
default: false
debug:
description: 'Run with debugging options'
type: boolean
default: false
workflow_dispatch:
inputs:
upload:
description: 'Upload wheels to GitHub'
type: boolean
default: true
debug:
description: 'Run with debugging options'
type: boolean
default: true
permissions:
contents: write
jobs:
build-wheels:
name: Build on ${{matrix.conf.os}}/${{matrix.conf.arch}}
runs-on: ${{matrix.conf.os}}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
conf: [
{os: ubuntu-24.04, arch: x86_64},
{os: macos-13, arch: x86_64},
{os: macos-14, arch: arm64},
{os: macos-15, arch: arm64},
{os: windows-2025, arch: AMD64},
]
permissions:
contents: write
steps:
- name: Check out a copy of the git repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 1
submodules: recursive
- name: Set up Python with caching of pip dependencies
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
with:
python-version: '3.12'
cache: pip
cache-dependency-path: |
requirements.txt
dev-requirements.txt
- name: Install Python requirements
run: |
pip install -r requirements.txt
pip install -r dev-requirements.txt
pip install cibuildwheel==2.23.3 twine==6.1.0 check-wheel-contents==0.6.2
- if: startsWith(matrix.conf.os, 'macos')
name: Set CMake MACOSX_DEPLOYMENT_TARGET value on MacOS
run: |
set -x
os=${{matrix.conf.os}}
echo MACOSX_DEPLOYMENT_TARGET=${os: -2} >> "$GITHUB_ENV"
- name: Build and test wheels
env:
# Note: additional cibuildwheel settings are in pyproject.toml.
CIBW_BUILD: 'cp310* cp311* cp312* cp313*'
CIBW_ARCHS: ${{matrix.conf.arch}}
CIBW_BUILD_VERBOSITY: ${{inputs.debug && 1 || ''}}
# Color codes make the raw logs hard to read. (CMake uses CLICOLOR.)
CLICOLOR: ${{inputs.debug && 0 || ''}}
run: |
cibuildwheel --output-dir wheelhouse
- name: Run twine check
run: |
twine check --strict wheelhouse/*
- name: Check wheel contents
run: |
check-wheel-contents wheelhouse/*
# Only take the time to save the wheels if doing a release.
- if: inputs.upload == true
name: Upload wheels to GitHub
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: python-wheels-${{matrix.conf.os}}-${{matrix.conf.arch}}
path: ./wheelhouse/*.whl