-
Notifications
You must be signed in to change notification settings - Fork 72
143 lines (131 loc) · 4.32 KB
/
wheel.yml
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
name: Wheel
on:
pull_request:
types: [ opened, synchronize, reopened ]
push:
branches:
- main
workflow_dispatch:
release:
types:
- published
jobs:
generate-wheels-matrix:
# https://iscinumpy.dev/post/cibuildwheel-2-10-0/
name: Generate wheels matrix
runs-on: ubuntu-latest
outputs:
include: ${{ steps.set-matrix.outputs.include }}
steps:
- uses: actions/checkout@v3
- name: Install cibuildwheel
run: pipx install cibuildwheel==2.16.2
- id: set-matrix
run: |
MATRIX=$(
{
cibuildwheel --print-build-identifiers --platform linux \
| jq -nRc '{"only": inputs, "os": "ubuntu-latest"}'
} | jq -sc
)
echo "include=$MATRIX" >> $GITHUB_OUTPUT
env:
CIBW_ARCHS_LINUX: x86_64
# Builds wheels for PyPy & CPython on manylinux
CIBW_BUILD: "*manylinux*"
# musllinux crashes during Boost 1.78.0 compilation
# May be related to https://bugs.gentoo.org/829147
# Perhaps that bumping Boost version in workflow can solve the issue
CIBW_SKIP: "*musllinux*"
CIBW_TEST_REQUIRES: pytest
CIBW_BUILD_VERBOSITY: 1
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
build-wheels:
name: Build ${{ matrix.only }}
needs: generate-wheels-matrix
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.generate-wheels-matrix.outputs.include) }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Download libraries
uses: ./.github/composite-actions/download-libraries
with:
download-pybind: true
download-googletest: false
- name: Cache unpacked Boost
uses: actions/cache@v3
id: cache-unpacked-boost
with:
path: ${{github.workspace}}/lib/boost_1_78_0
key: ${{ runner.os }}-boost-for-wheels-78
- name: Download & unpack Boost
run: |
cd ${{github.workspace}}/lib
wget -O boost_1_78_0.tar.gz https://sourceforge.net/projects/boost/files/boost/1.78.0/boost_1_78_0.tar.gz/download
tar xzf boost_1_78_0.tar.gz
shell: bash
if: steps.cache-unpacked-boost.outputs.cache-hit != 'true'
- name: Build wheels
uses: pypa/[email protected]
with:
only: ${{ matrix.only }}
env:
CIBW_BEFORE_ALL: >
cd lib/boost_1_78_0 &&
./bootstrap.sh --prefix=/usr/local &&
./b2 install -j4 --prefix=/usr/local
CIBW_TEST_COMMAND: >
cp {project}/test_input_data/WDC_satellites.csv {project}/src/python_bindings &&
cd {project}/src/python_bindings &&
python3 {project}/src/python_bindings/test_bindings.py
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: artifact-${{ matrix.only }}
if-no-files-found: ignore
path: ./wheelhouse/*.whl
merge-artifacts:
name: Merge artifacts
runs-on: ubuntu-latest
needs: build-wheels
steps:
- uses: actions/checkout@v3
- name: Download all artifacts from previous step
uses: actions/download-artifact@v3
with:
path: wheel-artifacts
- name: Delete old artifacts
uses: geekyeggo/delete-artifact@v2
with:
name: artifact-*
failOnError: false
- run: mkdir -p wheelhouse
- name: Flattening nested directories
run: find wheel-artifacts -mindepth 2 -type f -exec mv -i '{}' wheelhouse ';'
- name: Upload a single artifact
uses: actions/upload-artifact@v3
with:
name: wheels
path: wheelhouse/*.whl
publish-wheels:
needs: merge-artifacts
name: Publish wheels
# Related:
# https://learn.scientific-python.org/development/guides/gha-wheels/
# https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/
environment: pypi
permissions:
id-token: write
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/checkout@v3
- name: Download wheels
uses: actions/download-artifact@v3
with:
name: wheels
path: dist
- uses: pypa/gh-action-pypi-publish@release/v1