Skip to content

Commit 1017051

Browse files
claudeZhiXiao-Lin
authored andcommitted
ci(publish-python): drop PyPI wheel push, GH Release becomes canonical
The Python SDK matrix (4 CPython × 3 platforms = 12 wheels per release, ~17 MB each) burned through PyPI's 10 GB per-project quota and tripped v3.2.0 with `400 Project size too large` mid-upload. PyPI offers no API to delete files; even after manually clearing the 1.x series, every future release would just refill the quota. GitHub Releases has no per-project size cap and the workflow already uploads the full wheel set + a `python-native-manifest.json` index there. Stop pushing to PyPI and call GH Releases the canonical wheel host. Changes - publish-python.yml: remove the `Publish wheels to PyPI` step entirely. The `if: startsWith(github.ref, 'refs/tags/')` guards on the GH-Release steps stay (they were added for debug dispatch and remain valid for branch dispatch). - release.sh: update the post-release summary text to reflect the new Python distribution path. - README + sdk/python/README: replace `pip install a3s-code` with a concrete GH-Release URL example, and explain why. Note that ≤3.1.0 versions remain installable from PyPI. - CHANGELOG: add a [3.2.0] Packaging note documenting the change. PYPI_NATIVE_TOKEN repo secret is now unused — leave for the user to revoke / delete from repo settings as a separate step.
1 parent 5e1012d commit 1017051

5 files changed

Lines changed: 45 additions & 22 deletions

File tree

.github/workflows/publish-python.yml

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
name: Publish Python SDK
22

3-
# This workflow builds native Python wheels, uploads them to GitHub Releases,
4-
# and publishes the wheels to PyPI.
3+
# This workflow builds native Python wheels and uploads them to GitHub
4+
# Releases. Wheels are NOT pushed to PyPI — they grew the project past
5+
# PyPI's default 10 GB per-project quota, so GitHub Releases is now the
6+
# canonical wheel host. See README.md for the install command.
57

68
on:
79
workflow_call:
@@ -108,10 +110,7 @@ jobs:
108110
- name: List wheels
109111
run: ls -la dist/
110112

111-
# Upload native wheels to GitHub Releases (NOT to PyPI).
112-
# Guarded by a tag check so workflow_dispatch from a branch can still
113-
# exercise the PyPI publish path for debugging without the GitHub
114-
# Release steps tripping on a missing release name.
113+
# Upload native wheels to GitHub Releases — the canonical wheel host.
115114
- name: Ensure release exists and upload native assets
116115
if: startsWith(github.ref, 'refs/tags/')
117116
env:
@@ -126,7 +125,8 @@ jobs:
126125
fi
127126
gh release upload "$GITHUB_REF_NAME" dist/*.whl --clobber
128127
129-
# Generate manifest with wheel metadata for bootstrap downloader
128+
# Generate manifest of wheel metadata (filename + sha256) so a
129+
# future bootstrap installer can pick the right wheel by platform.
130130
- name: Generate native wheel manifest
131131
if: startsWith(github.ref, 'refs/tags/')
132132
run: |
@@ -135,19 +135,9 @@ jobs:
135135
dist/python-native-manifest.json \
136136
--version "${GITHUB_REF_NAME#v}"
137137
138-
# Upload manifest to GitHub Releases
139138
- name: Upload manifest to GitHub Releases
140139
if: startsWith(github.ref, 'refs/tags/')
141140
env:
142141
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
143142
run: |
144143
gh release upload "$GITHUB_REF_NAME" dist/python-native-manifest.json --clobber
145-
146-
# Publish native wheels to PyPI
147-
- name: Publish wheels to PyPI
148-
env:
149-
TWINE_USERNAME: __token__
150-
TWINE_PASSWORD: ${{ secrets.PYPI_NATIVE_TOKEN }}
151-
run: |
152-
python -m pip install --upgrade pip twine
153-
python -m twine upload --verbose --skip-existing dist/*.whl

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6767
that query the tracker immediately after scheduling do not race the
6868
spawned task.
6969

70+
### Packaging
71+
72+
- The Python SDK no longer ships native wheels to PyPI. The project
73+
grew past PyPI's default 10 GB per-project quota, and binary wheels
74+
for the full Rust × CPython × platform matrix consume that budget
75+
fast. From v3.2.0 onwards the canonical wheel host is GitHub
76+
Releases — see README for the install command. Versions up to 3.1.0
77+
remain installable from PyPI for backward compatibility.
78+
7079
### Breaking
7180

7281
- `TaskExecutor::execute`, `execute_parallel`, and `execute_background` now

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,22 @@ Full migration notes are in [CHANGELOG.md](./CHANGELOG.md).
8181
## Install
8282

8383
```bash
84-
# Python
85-
pip install a3s-code
86-
8784
# Node.js
8885
npm install @a3s-lab/code
86+
87+
# Python (from v3.2.0; pick the wheel for your interpreter/platform)
88+
pip install \
89+
https://github.com/AI45Lab/Code/releases/download/v3.2.0/a3s_code-3.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
8990
```
9091

9192
Rust users can depend on `a3s-code-core`.
9293

94+
Python wheels are hosted on [GitHub Releases](https://github.com/AI45Lab/Code/releases)
95+
from v3.2.0 onwards — the project grew past PyPI's per-project storage
96+
quota for binary distributions. Each release ships a
97+
`python-native-manifest.json` with sha256 hashes for every wheel.
98+
Versions up to 3.1.0 remain installable via `pip install a3s-code==3.1.0`.
99+
93100
---
94101

95102
## Quick Start

release.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ echo "GitHub Actions will now:"
198198
echo " 1. Run CI checks"
199199
echo " 2. Publish to crates.io"
200200
echo " 3. Publish Node SDK to npm"
201-
echo " 4. Publish Python SDK to PyPI"
201+
echo " 4. Build Python SDK wheels and attach to GitHub Release (PyPI no longer used)"
202202
echo " 5. Create GitHub Release"
203203
echo ""
204204
echo "Monitor progress at:"

sdk/python/README.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,27 @@ Native Python bindings for the A3S Code AI coding agent, built with PyO3.
44

55
## Installation
66

7+
From v3.2.0 onwards the native wheels are hosted on GitHub Releases
8+
(PyPI's per-project storage quota grew too tight for a Rust SDK that
9+
ships a binary per Python × platform). Pick the wheel that matches
10+
your interpreter and platform:
11+
12+
```bash
13+
# Example: CPython 3.12 on linux x86_64
14+
pip install \
15+
https://github.com/AI45Lab/Code/releases/download/v3.2.0/a3s_code-3.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
16+
```
17+
18+
Or list all wheels for a version:
19+
720
```bash
8-
pip install a3s-code
21+
gh release view v3.2.0 --json assets -q '.assets[].browser_download_url' \
22+
| grep '\.whl$'
923
```
1024

25+
Earlier versions (≤ 3.1.0) remain on PyPI and install with the usual
26+
`pip install a3s-code==3.1.0`.
27+
1128
## Quick Start
1229

1330
```python

0 commit comments

Comments
 (0)