diff --git a/.github/workflows/publish-python.yml b/.github/workflows/publish-python.yml index 5f01c8c..d9d6f1a 100644 --- a/.github/workflows/publish-python.yml +++ b/.github/workflows/publish-python.yml @@ -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: @@ -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: @@ -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: | @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index ef7d486..d903fee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/README.md b/README.md index b946e6e..8a5fa71 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/release.sh b/release.sh index 6c1d4db..e8bac64 100755 --- a/release.sh +++ b/release.sh @@ -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:" diff --git a/sdk/python/README.md b/sdk/python/README.md index 14ffa0c..4044eeb 100644 --- a/sdk/python/README.md +++ b/sdk/python/README.md @@ -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