-
Notifications
You must be signed in to change notification settings - Fork 1
129 lines (120 loc) · 3.42 KB
/
publish.yml
File metadata and controls
129 lines (120 loc) · 3.42 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
name: Publish to PyPI
on:
release:
types: [published]
# 수동 트리거 시 wheel 빌드만 검증하고 실제 업로드는 skip (dry-run)
workflow_dispatch: {}
permissions:
contents: read
concurrency:
group: publish-${{ github.ref }}
cancel-in-progress: false
jobs:
verify-version:
if: github.event_name == 'release'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check Cargo.toml version matches release tag
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
PKG_VERSION=$(python -c "
import re
with open('Cargo.toml') as f:
match = re.search(r'^version\s*=\s*\"(.+?)\"', f.read(), re.MULTILINE)
print(match.group(1))
")
if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then
echo "ERROR: Tag version ($TAG_VERSION) != Cargo.toml version ($PKG_VERSION)"
exit 1
fi
echo "Version check passed: $TAG_VERSION"
build-linux:
name: Build Linux wheel (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
manylinux: auto
command: build
args: --release --out dist
- uses: actions/upload-artifact@v7
with:
name: wheels-linux-${{ matrix.target }}
path: dist/*.whl
build-macos:
name: Build macOS wheel (${{ matrix.target }})
runs-on: macos-latest
strategy:
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
command: build
args: --release --out dist
- uses: actions/upload-artifact@v7
with:
name: wheels-macos-${{ matrix.target }}
path: dist/*.whl
build-windows:
name: Build Windows wheel
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- uses: PyO3/maturin-action@v1
with:
command: build
args: --release --out dist
- uses: actions/upload-artifact@v7
with:
name: wheels-windows
path: dist/*.whl
sdist:
name: Build sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- uses: actions/upload-artifact@v7
with:
name: sdist
path: dist/*.tar.gz
publish:
# 실 PyPI 업로드는 release 이벤트일 때만. workflow_dispatch 에서는 skip (dry-run).
if: github.event_name == 'release'
runs-on: ubuntu-latest
needs: [verify-version, build-linux, build-macos, build-windows, sdist]
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v8
with:
path: dist
merge-multiple: true
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1