-
Notifications
You must be signed in to change notification settings - Fork 31
133 lines (114 loc) · 3.18 KB
/
ci.yml
File metadata and controls
133 lines (114 loc) · 3.18 KB
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
name: Python Tests
on:
push:
branches: [master]
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-dotnet@v5
- uses: astral-sh/setup-uv@v7
- name: Build
run: uv build
- name: Upload source distribution
uses: actions/upload-artifact@v6
with:
name: build-output
path: "dist/*"
if-no-files-found: error
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depths: 0
- uses: astral-sh/setup-uv@v7
- name: Install Ruff
run: uv tool install ruff
- name: Check format
run: ruff format --check
- name: Check lints
run: ruff check
test:
runs-on: ${{ matrix.os }}
needs: build
strategy:
fail-fast: false
matrix:
# macos-13-arm64, windows-11-arm
# TODO:
# - Install mono via install-package action
# - Update macos images to at least 14 as 13 is retired
# - Update ubuntu images
os: [ubuntu-22.04, ubuntu-22.04-arm, windows-latest, macos-13]
python: ['3.14', '3.13', '3.12', '3.11', '3.10', '3.9', '3.8'] # pypy3
steps:
- name: Set Environment on macOS
uses: maxim-lobanov/setup-xamarin@v1
if: ${{ matrix.os.category == 'macos' }}
with:
mono-version: latest
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
dotnet-version: '8.0.x'
- name: Set up Python ${{ matrix.python }}
uses: astral-sh/setup-uv@v7
with:
python-version: ${{ matrix.python }}
- name: Cache Mono
if: runner.os == 'Windows'
uses: actions/cache@v4
with:
path: ${{ env.TEMP }}\chocolatey
key: ${{ runner.os }}-chocolatey-${{ matrix.python == 'pypy3' && '32' || '64' }}
- name: Install Mono
if: runner.os == 'Windows'
run: |
choco install -y mono ${{ matrix.python == 'pypy3' && '--x86' || '' }}
- uses: actions/checkout@v6
- name: Install dependencies
run: |
uv venv
uv pip install pytest
- name: Download wheel
uses: actions/download-artifact@v6
with:
name: build-output
path: dist/
- name: Install wheel
shell: bash
run: |
uv pip install dist/*.whl
- name: Test with pytest
run: |
uv run pytest
deploy:
runs-on: ubuntu-latest
needs: [build, test]
steps:
- name: Download artifacts
uses: actions/download-artifact@v6
with:
name: build-output
path: dist/
- name: Deploy to Test PyPI
uses: pypa/gh-action-pypi-publish@release/v1
if: startsWith(github.ref, 'refs/head/master')
with:
password: ${{ secrets.TEST_PYPI_API_TOKEN }}
repository_url: https://test.pypi.org/legacy/
- name: Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/v')
with:
files: dist/*
- name: Deploy to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
if: startsWith(github.ref, 'refs/tags/v')
with:
password: ${{ secrets.PYPI_API_TOKEN }}