-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(python): add Python bindings for Autonomi
This commit introduces Python bindings for the Autonomi crate using PyO3, making the Autonomi network client accessible from Python applications. Key changes: - Add autonomi-py crate with PyO3 bindings - Configure workspace to include Python package - Set up maturin build system for Python package - Add GitHub Actions workflow for building and publishing Python wheels - Configure cross-platform builds for Linux, macOS, and Windows - Add Python 3.8-3.12 support The Python package provides bindings for core Autonomi functionality including: - Network client connection - Data upload/download - Wallet management - Payment handling Build artifacts will be published to PyPI when a new version is tagged.
- Loading branch information
Showing
15 changed files
with
1,372 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
name: Build and Publish Python Package | ||
|
||
on: | ||
push: | ||
tags: | ||
- 'XXX*' | ||
|
||
permissions: | ||
id-token: write | ||
contents: read | ||
|
||
jobs: | ||
macos: | ||
runs-on: macos-latest | ||
permissions: | ||
id-token: write | ||
contents: read | ||
strategy: | ||
matrix: | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
target: [x86_64, aarch64] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
- name: Install Rust | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
components: rustfmt | ||
- name: Create Python module structure | ||
run: | | ||
mkdir -p autonomi/python/autonomi_client | ||
cat > autonomi/python/autonomi_client/__init__.py << EOL | ||
from ._autonomi import * | ||
__version__ = "0.2.33" | ||
EOL | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
target: ${{ matrix.target }} | ||
args: --release --out dist | ||
sccache: 'true' | ||
working-directory: ./autonomi | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: wheels | ||
path: autonomi/dist/*.whl | ||
if-no-files-found: error | ||
|
||
windows: | ||
runs-on: windows-latest | ||
permissions: | ||
id-token: write | ||
contents: read | ||
strategy: | ||
matrix: | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
target: [x64] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
architecture: ${{ matrix.target }} | ||
- name: Install Rust | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
components: rustfmt | ||
- name: Create Python module structure | ||
shell: cmd | ||
run: | | ||
mkdir autonomi\python\autonomi_client | ||
echo from ._autonomi import * > autonomi\python\autonomi_client\__init__.py | ||
echo __version__ = "0.2.33" >> autonomi\python\autonomi_client\__init__.py | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
args: --release --out dist | ||
sccache: 'true' | ||
working-directory: ./autonomi | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: wheels | ||
path: autonomi/dist/*.whl | ||
if-no-files-found: error | ||
|
||
linux: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
id-token: write | ||
contents: read | ||
strategy: | ||
matrix: | ||
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] | ||
target: [x86_64] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
- name: Install Rust | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
components: rustfmt | ||
target: x86_64-unknown-linux-gnu | ||
- name: Install dependencies | ||
run: | | ||
python -m pip install --user cffi | ||
python -m pip install --user patchelf | ||
rustup component add rustfmt | ||
- name: Create Python module structure | ||
run: | | ||
mkdir -p autonomi/python/autonomi_client | ||
cat > autonomi/python/autonomi_client/__init__.py << EOL | ||
from ._autonomi import * | ||
__version__ = "0.2.33" | ||
EOL | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
target: ${{ matrix.target }} | ||
manylinux: auto | ||
args: --release --out dist | ||
sccache: 'true' | ||
working-directory: ./autonomi | ||
before-script-linux: | | ||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | ||
source $HOME/.cargo/env | ||
rustup component add rustfmt | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: wheels | ||
path: autonomi/dist/*.whl | ||
if-no-files-found: error | ||
|
||
sdist: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
id-token: write | ||
contents: read | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install Rust | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
components: rustfmt | ||
- name: Create Python module structure | ||
run: | | ||
mkdir -p autonomi/python/autonomi_client | ||
cat > autonomi/python/autonomi_client/__init__.py << EOL | ||
from ._autonomi import * | ||
__version__ = "0.2.33" | ||
EOL | ||
- name: Build sdist | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
command: sdist | ||
args: --out dist | ||
working-directory: ./autonomi | ||
- name: Upload sdist | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: wheels | ||
path: autonomi/dist/*.tar.gz | ||
if-no-files-found: error | ||
|
||
release: | ||
name: Release | ||
runs-on: ubuntu-latest | ||
needs: [macos, windows, linux, sdist] | ||
permissions: | ||
id-token: write | ||
contents: read | ||
steps: | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: wheels | ||
path: dist | ||
- name: Display structure of downloaded files | ||
run: ls -R dist | ||
- name: Publish to PyPI | ||
uses: pypa/gh-action-pypi-publish@release/v1 | ||
with: | ||
packages-dir: dist/ | ||
verbose: true | ||
print-hash: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.