Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 7 additions & 17 deletions .github/workflows/publish-python.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
name: Publish Python SDK

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

on:
workflow_call:
Expand Down Expand Up @@ -108,10 +110,7 @@ jobs:
- name: List wheels
run: ls -la dist/

# Upload native wheels to GitHub Releases (NOT to PyPI).
# Guarded by a tag check so workflow_dispatch from a branch can still
# exercise the PyPI publish path for debugging without the GitHub
# Release steps tripping on a missing release name.
# Upload native wheels to GitHub Releases — the canonical wheel host.
- name: Ensure release exists and upload native assets
if: startsWith(github.ref, 'refs/tags/')
env:
Expand All @@ -126,7 +125,8 @@ jobs:
fi
gh release upload "$GITHUB_REF_NAME" dist/*.whl --clobber

# Generate manifest with wheel metadata for bootstrap downloader
# Generate manifest of wheel metadata (filename + sha256) so a
# future bootstrap installer can pick the right wheel by platform.
- name: Generate native wheel manifest
if: startsWith(github.ref, 'refs/tags/')
run: |
Expand All @@ -135,19 +135,9 @@ jobs:
dist/python-native-manifest.json \
--version "${GITHUB_REF_NAME#v}"

# Upload manifest to GitHub Releases
- name: Upload manifest to GitHub Releases
if: startsWith(github.ref, 'refs/tags/')
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload "$GITHUB_REF_NAME" dist/python-native-manifest.json --clobber

# Publish native wheels to PyPI
- name: Publish wheels to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_NATIVE_TOKEN }}
run: |
python -m pip install --upgrade pip twine
python -m twine upload --verbose --skip-existing dist/*.whl
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
that query the tracker immediately after scheduling do not race the
spawned task.

### Packaging

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

### Breaking

- `TaskExecutor::execute`, `execute_parallel`, and `execute_background` now
Expand Down
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,22 @@ Full migration notes are in [CHANGELOG.md](./CHANGELOG.md).
## Install

```bash
# Python
pip install a3s-code

# Node.js
npm install @a3s-lab/code

# Python (from v3.2.0; pick the wheel for your interpreter/platform)
pip install \
https://github.com/AI45Lab/Code/releases/download/v3.2.0/a3s_code-3.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
```

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

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

---

## Quick Start
Expand Down
2 changes: 1 addition & 1 deletion release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ echo "GitHub Actions will now:"
echo " 1. Run CI checks"
echo " 2. Publish to crates.io"
echo " 3. Publish Node SDK to npm"
echo " 4. Publish Python SDK to PyPI"
echo " 4. Build Python SDK wheels and attach to GitHub Release (PyPI no longer used)"
echo " 5. Create GitHub Release"
echo ""
echo "Monitor progress at:"
Expand Down
19 changes: 18 additions & 1 deletion sdk/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,27 @@ Native Python bindings for the A3S Code AI coding agent, built with PyO3.

## Installation

From v3.2.0 onwards the native wheels are hosted on GitHub Releases
(PyPI's per-project storage quota grew too tight for a Rust SDK that
ships a binary per Python × platform). Pick the wheel that matches
your interpreter and platform:

```bash
# Example: CPython 3.12 on linux x86_64
pip install \
https://github.com/AI45Lab/Code/releases/download/v3.2.0/a3s_code-3.2.0-cp312-cp312-manylinux_2_28_x86_64.whl
```

Or list all wheels for a version:

```bash
pip install a3s-code
gh release view v3.2.0 --json assets -q '.assets[].browser_download_url' \
| grep '\.whl$'
```

Earlier versions (≤ 3.1.0) remain on PyPI and install with the usual
`pip install a3s-code==3.1.0`.

## Quick Start

```python
Expand Down
Loading