-
Notifications
You must be signed in to change notification settings - Fork 1
148 lines (135 loc) · 4.49 KB
/
ci.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
name: build-wheels
on:
# Do this when a new release is published
push:
branches: [ main ]
pull_request:
release:
types: [ published ]
jobs:
# Build for manylinux, which allows it to be run on many different Linux platforms
test-linux:
strategy:
matrix:
py-version: ['3.9', '3.10', '3.11', '3.12']
runs-on: ubuntu-latest
steps:
- name: Checkout rustfrc
uses: actions/checkout@v2
# Set up the repository with the Docker container action, which will allow us to build and run a manylinux Docker
# container that will ensure compatibility. See the action repository for more info.
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.py-version }}
# We install poetry as a dependency manager to read the pyproject.toml of our package.
- name: Poetry
run: pipx install poetry==1.8.2
- name: Maturin
uses: taiki-e/install-action@v2
with:
tool: maturin
# poetry update will install all dependencies for our package, as well as maturin, which we use as our build
# back-end
- name: Poetry install
run: poetry install --sync --no-root
working-directory: ${{ github.workspace }}
- name: Poetry shell
run: poetry shell
working-directory: ${{ github.workspace }}
- name: maturin develop
run: maturin develop
working-directory: ${{ github.workspace }}
- name: cargo test
run: cargo test
working-directory: ${{ github.workspace }}
- name: poetry pytest
run: poetry run pytest
working-directory: ${{ github.workspace }}
build-macos:
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
needs: [ test-linux ]
runs-on: macos-latest
strategy:
matrix:
py-version: [ '3.9', '3.10', '3.11', '3.12' ]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.py-version }}
# The x86_64 Rust toolchain is installed on GitHub runners, but since we compile also for Apple Silicon, we also
# need the correct Rust toolchain.
- name: Rustup install aarch64 target
run: rustup target add aarch64-apple-darwin
if: ${{ matrix.target == '--universal2' }}
- name: Build wheels - universal2
uses: PyO3/maturin-action@v1
with:
target: universal2-apple-darwin
args: --release --out dist -i ${{ matrix.py-version }}
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: ${{ github.workspace }}/dist
build-windows:
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
needs: [ test-linux ]
runs-on: windows-latest
strategy:
matrix:
py-version: ['3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.py-version }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: x64
args: --release --out dist -i ${{ matrix.py-version }}
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: ${{ github.workspace }}/dist
build-linux:
if: ${{ github.event_name == 'release' && github.event.action == 'published' }}
needs: [ test-linux ]
runs-on: ubuntu-latest
strategy:
matrix:
py-version: [ '3.9', '3.10', '3.11', '3.12' ]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.py-version }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
rust-toolchain: stable
target: x86_64
manylinux: auto
args: --release --out dist -i ${{ matrix.py-version }}
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: ${{ github.workspace }}/dist
wheel-publish:
name: Release
runs-on: ubuntu-latest
needs: [ build-macos, build-windows, build-linux ]
steps:
- uses: actions/download-artifact@v3
with:
name: wheels
- name: Publish to PyPI
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_RUSTFRC_TOKEN }}
uses: PyO3/maturin-action@v1
with:
command: upload
args: --skip-existing *