-
Notifications
You must be signed in to change notification settings - Fork 0
265 lines (233 loc) · 8.64 KB
/
pip.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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
name: "Pip"
on:
workflow_dispatch:
pull_request:
push:
branches:
- master
release:
types:
- published
jobs:
build:
name: Build with Pip
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
#platform: [ windows-latest, macos-13, macos-14, ubuntu-latest ]
platform: [ macos-13, macos-14, ubuntu-latest ]
python-version: ["3.9","3.10","3.11","3.12"]
# exclude:
# - platform: windows-latest
# python-version: "3.9"
# - platform: windows-latest
# python-version: "3.12"
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install Intel MacOS dependencies
if: matrix.platform == 'macos-13'
shell: bash
run: |
brew install boost
brew install hdf5
brew install ninja
brew install llvm
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile
source /Users/runner/.bash_profile
gcc --version
gfortran --version
cmake --version
brew info boost
brew info hdf5
- name: Install ARM MacOS dependencies
if: matrix.platform == 'macos-14'
shell: bash
run: |
brew install boost
brew install hdf5
brew install ninja
brew install llvm
echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> /Users/runner/.bash_profile
ln -s /opt/homebrew/bin/gfortran-14 /usr/local/bin/gfortran
gcc --version
gfortran --version
cmake --version
brew info boost
brew info hdf5
- name: Install Windows Dependencies
if: matrix.platform == 'windows-latest'
uses: msys2/setup-msys2@v2
with:
msystem: CLANG64
update: true
install: >
zip
git
mingw-w64-clang-x86_64-curl
mingw-w64-clang-x86_64-toolchain
mingw-w64-clang-x86_64-flang
mingw-w64-clang-x86_64-cmake
mingw-w64-clang-x86_64-boost
mingw-w64-clang-x86_64-hdf5
mingw-w64-clang-x86_64-libzip
mingw-w64-clang-x86_64-zlib
mingw-w64-clang-x86_64-libaec
mingw-w64-clang-x86_64-python-pip-tools
- uses: actions/setup-python@v5
with:
python-version: "${{ matrix.python-version }}"
- name: Build and install macos-13
run: |
export MACOSX_DEPLOYMENT_TARGET=13.0
PATH="/usr/local/opt/llvm/bin:$PATH"
pip wheel . -w dist
ls -al dist
pip install delocate
delocate-listdeps dist/*.whl
delocate-wheel -v dist/*.whl
pip install dist/*.whl
if: matrix.platform == 'macos-13'
- name: Build and install macos-14
run: |
PATH="/opt/homebrew/opt/llvm/bin:$PATH"
pip wheel . -w dist
ls -al dist
pip install delocate
delocate-listdeps dist/*.whl
delocate-wheel -v dist/*.whl
pip install dist/*.whl
if: matrix.platform == 'macos-14'
- name: Build and install windows-latest
shell: msys2 {0}
run: |
pip wheel --verbose -Ccmake.define.CMAKE_C_COMPILER="clang.exe" -Ccmake.define.CMAKE_CXX_COMPILER="clang++.exe" . -w dist
pip install delvewheel
for wheel_file in dist/*.whl; do
echo "not inspecting $wheel_file"
echo "delvewheel needed -v $wheel_file"
echo "not repairing $wheel_file"
echo "delvewheel repair -v $wheel_file"
done
pip install dist/*.whl
if: matrix.platform == 'windows-latest'
- name: Build and install manylinux for python 3.9
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel ninja-build && \
/opt/python/cp39-cp39/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.9'
- name: Build and install manylinux for python 3.10
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel ninja-build && \
/opt/python/cp310-cp310/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.10'
- name: Build and install manylinux for python 3.11
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel ninja-build && \
/opt/python/cp311-cp311/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.11'
- name: Build and install manylinux for python 3.12
run: |
docker run --rm -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64 \
/bin/bash -c \
"yum install -y boost-devel hdf5-devel ninja-build && \
/opt/python/cp312-cp312/bin/pip wheel /io/ -w /io/dist && \
auditwheel repair /io/dist/*.whl -w /io/dist/"
echo "keeping only the manylinux wheels, remove those with -linux_x86_64.whl in the name"
sudo rm -rf dist/*-linux_x86_64.whl
pip install dist/*.whl
if: matrix.platform == 'ubuntu-latest' && matrix.python-version == '3.12'
- name: Test not windows
run: |
pip install pytest
pytest
if: matrix.platform != 'windows-latest'
- name: Test on windows
shell: msys2 {0}
run: |
pip install pytest
pytest
if: matrix.platform == 'windows-latest'
- name: set wheel_file and artifact_name environment vars (non-windows)
if: matrix.platform != 'windows-latest'
run: |
for wheel_file in dist/*.whl; do
echo "Uploading $wheel_file"
echo "wheel_file=$wheel_file" >> $GITHUB_ENV
echo "artifact_name=$(basename $wheel_file)" >> $GITHUB_ENV
done
- name: set wheel_file and artifact_name environment vars (windows)
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
foreach ($wheel_file in Get-ChildItem -Path dist -Filter *.whl) {
Write-Output "Uploading $wheel_file"
echo "wheel_file=$wheel_file" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
echo "artifact_name=$(Split-Path $wheel_file -Leaf)" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8
}
- name: Upload wheel file
uses: actions/upload-artifact@v4
with:
name: ${{ env.artifact_name }}
path: ${{ env.wheel_file }}
- name: Setup tmate session
uses: mxschmitt/action-tmate@v3
if: ${{ failure() }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
publish-to-pypi:
name: Publish to PyPI
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
environment: pypi
permissions:
id-token: write
steps:
- name: download all artifacts (wheels and executables)
uses: actions/download-artifact@v4
with:
path: dist_temp/
- name: Install Python
uses: actions/setup-python@v2
with:
python-version: '3.12'
- name: Publish wheels to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
pip install twine
mkdir dist
echo "current directory is $(pwd)"
ls -al dist*
echo "absolute paths of wheels:"
find dist_temp -type f -name '*.whl' -exec sh -c 'echo "$(realpath {})"/' \;
echo "moving wheels to dist directory"
find dist_temp -type f -name '*.whl' -exec sh -c 'mv "$(realpath {})" dist/' \;
twine upload --repository pypi dist/*.whl
- name: Setup tmate session for PyPI upload failure
uses: mxschmitt/action-tmate@v3
if: ${{ failure() }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}