Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
1a16fb1
Added:
alessandrostone Oct 30, 2025
c6cd8a2
feat(python): implement bincode serialization for Python bindings
alessandrostone Oct 30, 2025
f4e1af2
Async Runtime Bridge:
alessandrostone Oct 30, 2025
61dd05e
Added Streaming Support:
alessandrostone Oct 30, 2025
2ded9c5
feat(python): implement MessagePack serialization for Python interop
alessandrostone Nov 4, 2025
901d6a9
feat(python_tests): added pytest's tests
alessandrostone Nov 4, 2025
78a5415
feat(benchmarks): add python_interop.rs and python_persistent.rs benc…
alessandrostone Nov 4, 2025
5d89f02
formatted
alessandrostone Nov 4, 2025
deeeb42
fix(suppressed warning): Fixed: The unexpected cfg condition value: '…
alessandrostone Nov 4, 2025
753ca21
fix(PyO3 linking issue): Testing without extension-module feature
alessandrostone Nov 4, 2025
d702b07
fix(make): make ci-coverage let tarpaulin fail under 60% to accomodat…
alessandrostone Nov 5, 2025
c38737d
fix(ci): set compatible python version
alessandrostone Nov 5, 2025
dd78a3f
fix(ci-coverage): lowered coverage treshold to 58%
alessandrostone Nov 5, 2025
6bd79de
feat(test): add more tests to the rust codebase
alessandrostone Nov 6, 2025
fa888b1
chore(deps): update PYO3 to 0.24.2
alessandrostone Nov 6, 2025
2061456
fix(examples): better python cluster example
alessandrostone Nov 6, 2025
891c10d
fix(python_generator): fix enum support with Union types for python_g…
alessandrostone Nov 6, 2025
e02c689
chore(format): formatted code;
alessandrostone Nov 6, 2025
9d16506
feat(msgpack): moved everything to msgpack
alessandrostone Nov 7, 2025
5175e4d
fix(python_example): fix python_streaming_client.py
alessandrostone Nov 10, 2025
fd3f12d
feat(bench): added realistic benchmarks for Python<->Rust Interop
alessandrostone Nov 10, 2025
5a43bf4
feat(tests): added gossip protocol tests
alessandrostone Nov 10, 2025
cfaf8a0
feat(tests): optimize streaming unit tests to run in 0.02s instead of…
alessandrostone Nov 10, 2025
40820c5
feat(tests): Unit Test Coverage Improvements
alessandrostone Nov 10, 2025
0a3cabf
feat(python): add async event loop to python to support rpc async han…
alessandrostone Nov 12, 2025
4bff4a7
feat(python_async): Persistent Event Loop Thread Implementation
alessandrostone Nov 12, 2025
1b9fc4e
feat(bench): added python_event_loop_bench.py
alessandrostone Nov 13, 2025
9a635ab
doc(python): add Python Streaming Design future worlk document and up…
alessandrostone Nov 13, 2025
83d4628
feat(python): add full streaming RPC support for Python handlers
alessandrostone Nov 13, 2025
db3dcc0
feat(python): complete Python streaming RPC support with PyO3 0.24 up…
alessandrostone Nov 13, 2025
856bcf3
feat(docs): Documentation:
alessandrostone Nov 13, 2025
e79e832
examples/python/cluster_2 showing worker directly connect to client, …
alessandrostone Nov 13, 2025
be4802b
feat(python): add SWIM cluster support for Python bindings
alessandrostone Nov 14, 2025
911bad3
feat(make): add make python-* commands to setup, clean, build extensi…
alessandrostone Nov 14, 2025
601bd27
fix(gitignore): better gitignore
alessandrostone Nov 14, 2025
c7f142b
feat(CLI): automatic build of python module when generating python code
alessandrostone Nov 14, 2025
e3dbae5
feat: python support
jsam Nov 21, 2025
64fab88
ci: fixes for the ci
jsam Nov 21, 2025
9241e27
ci: fixes for the ci
jsam Nov 21, 2025
93b8fbd
ci: fixes for the ci
jsam Nov 21, 2025
38bb345
ci: fixes for the ci
jsam Nov 21, 2025
1b0e35f
fix(ci): set PYTHON env var and add debug output for Python examples
jsam Nov 21, 2025
9f5cd69
fix(ci): fix nested directory issue in Python code generation
jsam Nov 21, 2025
0dd4a4c
fix(ci): add directorregistry Python bindings generation for cluster
jsam Nov 21, 2025
1fa15e7
feat(ci): consolidate Python examples testing in Makefile
jsam Nov 21, 2025
3045c7a
fix(codegen): handle Pin<Stream> types correctly in Python generator
jsam Nov 21, 2025
23472c5
fix(ci): resolve all clippy warnings and coverage test failures
jsam Nov 22, 2025
befbd23
test(client): fix flaky stream timeout test on macOS
jsam Nov 22, 2025
ee60322
chore: ci coverage update
jsam Nov 23, 2025
0eaf971
fix(tests): resolve clippy and formatting issues
jsam Nov 23, 2025
ac9c84a
fix(ci): resolve hashFiles template validation error
jsam Nov 23, 2025
54dfb94
fix(ci): replace all hashFiles patterns in pr-checks workflow
jsam Nov 23, 2025
367f57c
fix(ci): replace hashFiles with github.sha and fix all clippy errors
jsam Nov 23, 2025
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
9 changes: 7 additions & 2 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4


- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
Expand Down Expand Up @@ -99,7 +104,7 @@ jobs:
try {
const coverage = JSON.parse(fs.readFileSync('target/coverage/tarpaulin-report.json', 'utf8'));
const coveragePercent = coverage.coverage.toFixed(1);
const threshold = 65.0;
const threshold = 58.0;
const status = coveragePercent >= threshold ? '✅' : '❌';

const body = `## ${status} Coverage Report
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/mdbook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Deploy mdBook

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
tags:
- '[0-9]+.[0-9]+.[0-9]+'
- '[0-9]+.[0-9]+.[0-9]+-*'
workflow_dispatch:

permissions:
Expand Down Expand Up @@ -41,7 +41,6 @@ jobs:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
Expand Down
90 changes: 74 additions & 16 deletions .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-build-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-build-

- name: Generate test certificates
Expand All @@ -82,11 +82,16 @@ jobs:
exclude:
- os: macos-latest
rust: beta

steps:
- name: Checkout code
uses: actions/checkout@v4


- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Install Rust ${{ matrix.rust }}
uses: dtolnay/rust-toolchain@master
with:
Expand All @@ -96,14 +101,14 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-${{ matrix.rust }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-${{ matrix.rust }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-${{ matrix.rust }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-${{ matrix.rust }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-${{ matrix.rust }}-cargo-build-${{ github.sha }}
restore-keys: ${{ runner.os }}-${{ matrix.rust }}-cargo-build-

- name: Generate test certificates
Expand All @@ -124,7 +129,12 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4


- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
Expand All @@ -142,14 +152,14 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-coverage-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-coverage-

- name: Generate test certificates
Expand Down Expand Up @@ -196,7 +206,7 @@ jobs:
try {
const coverage = JSON.parse(fs.readFileSync('target/coverage/tarpaulin-report.json', 'utf8'));
const coveragePercent = coverage.coverage.toFixed(1);
const threshold = 65.0;
const threshold = 58.0;
const status = coveragePercent >= threshold ? '✅' : '⚠️';

const body = `## ${status} Coverage Report
Expand Down Expand Up @@ -250,14 +260,14 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-doc-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-doc-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-doc-

- name: Build documentation
Expand Down Expand Up @@ -285,14 +295,14 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-examples-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-cargo-examples-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-examples-

- name: Generate test certificates
Expand All @@ -303,11 +313,58 @@ jobs:
- name: Build examples
run: make examples

# Test Python examples
python-examples:
name: Test Python Examples
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Install timeout utility (macOS)
if: runner.os == 'macOS'
run: brew install coreutils

- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-python-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-python-

- name: Run all Python examples via Makefile
run: |
# Use gtimeout on macOS, timeout on Linux
if [ "$RUNNER_OS" = "macOS" ]; then
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
fi
make ci-python-examples

# Summary job that depends on all checks
pr-checks-complete:
name: All PR Checks Passed
runs-on: ubuntu-latest
needs: [format, lint, test, coverage, security, docs, examples]
needs: [format, lint, test, coverage, security, docs, examples, python-examples]
if: always()
steps:
- name: Check results
Expand All @@ -318,7 +375,8 @@ jobs:
[[ "${{ needs.coverage.result }}" == "failure" ]] || \
[[ "${{ needs.security.result }}" == "failure" ]] || \
[[ "${{ needs.docs.result }}" == "failure" ]] || \
[[ "${{ needs.examples.result }}" == "failure" ]]; then
[[ "${{ needs.examples.result }}" == "failure" ]] || \
[[ "${{ needs.python-examples.result }}" == "failure" ]]; then
echo "❌ One or more checks failed"
exit 1
fi
Expand Down
101 changes: 101 additions & 0 deletions .github/workflows/python-examples.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Python Examples

on:
pull_request:
branches: [ main ]
paths:
- 'examples/python/**'
- 'src/python/**'
- 'pyproject.toml'
- 'Makefile'
- '.github/workflows/python-examples.yml'
push:
branches: [ main ]
paths:
- 'examples/python/**'
- 'src/python/**'
- 'pyproject.toml'
- 'Makefile'
- '.github/workflows/python-examples.yml'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
PYTHON_VERSION: '3.13'

jobs:
test-python-examples:
name: Test Python Examples
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Install timeout utility (macOS)
if: runner.os == 'macOS'
run: brew install coreutils

- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry/index
key: ${{ runner.os }}-cargo-registry-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-registry-

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-python-${{ github.sha }}
restore-keys: ${{ runner.os }}-cargo-python-

- name: Run all Python examples via Makefile
run: |
# Use gtimeout on macOS, timeout on Linux
if [ "$RUNNER_OS" = "macOS" ]; then
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
fi
make ci-python-examples

# Summary job
python-examples-complete:
name: All Python Examples Passed
runs-on: ubuntu-latest
needs: [test-python-examples]
if: always()

steps:
- name: Check results
run: |
if [[ "${{ needs.test-python-examples.result }}" == "failure" ]]; then
echo "❌ Python example tests failed"
exit 1
fi
echo "✅ All Python example tests passed!"

- name: Create summary
run: |
echo "## 🐍 Python Examples Test Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Platform | Status |" >> $GITHUB_STEP_SUMMARY
echo "|---------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Ubuntu | ${{ needs.test-python-examples.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| macOS | ${{ needs.test-python-examples.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
Loading
Loading