-
Notifications
You must be signed in to change notification settings - Fork 72
135 lines (124 loc) · 4.09 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
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: ${{github.workspace}}/wheel-artifacts
- name: Delete old artifacts
uses: geekyeggo/delete-artifact@v2
with:
name: artifact-*
failOnError: false
- name: Flattening a nested directories
run: find ${{github.workspace}}/wheel-artifacts -mindepth 2 -type f -exec mv -i '{}' dist/ ';'
- name: Upload single artifact
uses: actions/upload-artifact@v3
with:
name: wheels
path: ${{github.workspace}}/dist
publish-wheels:
needs: merge-artifacts
name: Publish wheels
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
- run: ls -R
working-directory: dist