-
Notifications
You must be signed in to change notification settings - Fork 255
262 lines (232 loc) · 9.23 KB
/
create.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
on:
push:
pull_request:
create:
name: Continuous Delivery
jobs:
build_wheels:
name: cibuildwheel on ${{ matrix.os }} ${{ matrix.architecture }}
if: (github.event_name == 'create' && github.event.ref_type == 'tag') || contains(github.event.head_commit.message, '[build wheel]') || contains(github.event.pull_request.title, '[build wheel]')
env:
CIBW_BEFORE_ALL_LINUX: 'yum install -y java-11-openjdk-devel'
CIBW_REPAIR_WHEEL_COMMAND_MACOS: ''
CIBW_SKIP: 'cp36-* *musllinux*'
strategy:
matrix:
include:
- os: windows-latest
architecture: 'x86'
cibw_archs: 'x86'
- os: windows-latest
architecture: 'x64'
cibw_archs: 'AMD64'
- os: ubuntu-latest
architecture: 'x64'
cibw_archs: 'x86_64'
- os: kivy-ubuntu-arm64
architecture: 'aarch64'
cibw_archs: aarch64
- os: macos-latest
architecture: 'x64'
cibw_archs: 'x86_64 universal2'
runs-on: ${{ matrix.os }}
steps:
- name: Checkout pyjnius
uses: actions/checkout@v3
- name: Setup Python (Ubuntu x86_64, macOS Intel, Windows x86_64)
if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' || matrix.os == 'ubuntu-latest'
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Setup java
# There's no need to setup java on ubuntu-latest, as build is done into a manylinux
# containerized environment. (CIBW_BEFORE_ALL_LINUX) takes care of it.
if: ${{ matrix.os != 'ubuntu-latest' }}
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
architecture: ${{ matrix.architecture }}
- name: Install cibuildwheel & build wheels (Windows)
if: matrix.os == 'windows-latest'
env:
CIBW_ARCHS: '${{ matrix.cibw_archs }}'
run: |
python -m pip install cibuildwheel~=2.12.3
python -m cibuildwheel --output-dir dist
- name: Install cibuildwheel & build wheels (Linux, macOS Intel)
if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64') || (matrix.os == 'macos-latest')
env:
CIBW_ARCHS: '${{ matrix.cibw_archs }}'
run: |
source .ci/utils.sh
ensure_python_version 3.11
python -m pip install cibuildwheel~=2.12.3
python -m cibuildwheel --output-dir dist
- name: upload wheels
uses: actions/upload-artifact@v2
with:
name: dist
path: dist
build_sdist:
name: Build sdist
if: (github.event_name == 'create' && github.event.ref_type == 'tag') || contains(github.event.head_commit.message, '[build sdist]') || contains(github.event.pull_request.title, '[build sdist]')
runs-on: 'ubuntu-latest'
steps:
- name: Checkout pyjnius
uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Build sdist
run: |
pip install -U setuptools
python setup.py sdist
- name: upload sdist
uses: actions/upload-artifact@v2
with:
name: dist
path: dist
test_wheels:
name: Test wheel on ${{ matrix.os }} (${{ matrix.architecture }}) Python ${{ matrix.python }}
if: (github.event_name == 'create' && github.event.ref_type == 'tag') || contains(github.event.head_commit.message, '[build wheel]') || contains(github.event.pull_request.title, '[build wheel]')
needs:
- build_wheels
continue-on-error: true
strategy:
matrix:
os: ['ubuntu-latest', 'macos-latest', 'windows-latest', 'kivy-ubuntu-arm64']
python: ['3.7', '3.8', '3.9', '3.10', '3.11', 'pypy3.7', 'pypy3.8', 'pypy3.9']
include:
# We may would like to introduce tests also on windows-latest on x86 (win32 wheels)?
- os: ubuntu-latest
architecture: 'x64'
- os: kivy-ubuntu-arm64
architecture: 'aarch64'
- os: windows-latest
architecture: 'x64'
- os: macos-latest
architecture: 'x64'
- os: apple-silicon-m1
architecture: 'aarch64'
python: '3.10'
- os: apple-silicon-m1
architecture: 'aarch64'
python: '3.11'
runs-on: ${{ matrix.os }}
steps:
- name: Checkout pyjnius
uses: actions/checkout@v3
- uses: actions/download-artifact@v2
with:
name: dist
path: dist
- name: Setup Python (Ubuntu x86_64, macOS Intel, Windows x86_64)
# Needs to be skipped on our self-hosted runners tagged as 'apple-silicon-m1'
if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' || matrix.os == 'ubuntu-latest' || matrix.os == 'apple-silicon-m1'
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Setup java
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
architecture: ${{ matrix.architecture }}
- name: Setup ant on macOS
if: (matrix.os == 'macos-latest') || (matrix.os == 'apple-silicon-m1')
run: |
brew install ant
- name: Setup ant on Linux
if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64')
run: |
sudo apt-get update && sudo apt-get install -y ant
- name: Build test-classes via ant
run: ant all
- name: Install pyjnius wheel + test prerequisites (Windows, macOS)
if: matrix.os == 'windows-latest' || matrix.os == 'macos-latest' || matrix.os == 'apple-silicon-m1'
# --find-links=dist --no-index is needed to avoid downloading the pyjnius wheel
# from the index. We need to test the wheel we just built.
run: |
python -m pip install --find-links=dist --no-index pyjnius
python -m pip install pyjnius[dev,ci]
- name: Install pyjnius wheel + test prerequisites (Linux)
if: matrix.os == 'ubuntu-latest' || matrix.os == 'kivy-ubuntu-arm64'
# --find-links=dist --no-index is needed to avoid downloading the pyjnius wheel
# from the index. We need to test the wheel we just built.
run: |
source .ci/utils.sh
ensure_python_version ${{ matrix.python }}
python -m pip install --find-links=dist --no-index pyjnius
python -m pip install pyjnius[dev,ci]
- name: Test wheel (Linux, macOS)
if: (matrix.os == 'ubuntu-latest') || (matrix.os == 'kivy-ubuntu-arm64') || (matrix.os == 'macos-latest') || (matrix.os == 'apple-silicon-m1')
run: |
source .ci/utils.sh
ensure_python_version ${{ matrix.python }}
cd tests
CLASSPATH=../build/test-classes:../build/classes python -m pytest -v
- name: Test wheel ( Windows + Python == 3.7.x )
# On Python < 3.8.x, we can't use `os.add_dll_directory`, so the jre should be in PATH.
if: (matrix.os == 'windows-latest') && contains(matrix.python, '3.7')
run: |
cd tests
$env:PATH +=";$env:JAVA_HOME\jre\bin\server\;$env:JAVA_HOME\jre\bin\client\;$env:JAVA_HOME\bin\server\"
$env:CLASSPATH ="../build/test-classes;../build/classes"
python -m pytest -v
- name: Test wheel (Windows + Python != 3.7.x )
if: (matrix.os == 'windows-latest') && !contains(matrix.python, '3.7')
run: |
cd tests
$env:CLASSPATH ="../build/test-classes;../build/classes"
python -m pytest -v
release:
if: (github.event_name == 'create' && github.event.ref_type == 'tag')
name: release
needs:
- build_wheels
- build_sdist
- test_wheels
runs-on: 'ubuntu-latest'
steps:
- uses: actions/download-artifact@v2
with:
name: dist
path: dist
- name: Upload Test Release Asset
id: create_test_release
if: startsWith(github.ref, 'refs/tags/') && endsWith(github.ref, '-test')
uses: softprops/action-gh-release@78c309ef59fdb9557cd6574f2e0be552936ed728
with:
prerelease: true
files: |
dist/*.whl
dist/*.zip
dist/*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Release Asset
id: upload-release-asset
if: startsWith(github.ref, 'refs/tags/') && ! endsWith(github.ref, '-test')
uses: softprops/action-gh-release@78c309ef59fdb9557cd6574f2e0be552936ed728
with:
files: |
dist/*.whl
dist/*.zip
dist/*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish package
if: startsWith(github.ref, 'refs/tags/') && endsWith(github.ref, '-test')
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN_TEST }}
repository_url: https://test.pypi.org/legacy/
- name: Publish package
if: startsWith(github.ref, 'refs/tags/') && ! endsWith(github.ref, '-test')
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}