From f9002441a45f05e14c0a451b2cbc823250c99008 Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 15:16:18 +0400 Subject: [PATCH 1/7] Add support for windows and macos --- .github/workflows/publish.yml | 100 ++++++++++++++---- .github/workflows/release-worker.yml | 149 +++++++++++++++++++++++---- .github/workflows/tests.yml | 45 ++++++-- scripts/build-worker.sh | 13 ++- 4 files changed, 261 insertions(+), 46 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6aff687..486b5d2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,43 +12,105 @@ on: permissions: contents: read +env: + PYTHON_VERSIONS: '["3.11","3.12","3.13","3.14"]' + jobs: linux: - runs-on: ${{ matrix.platform.runner }} + if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') + runs-on: ubuntu-latest strategy: matrix: - platform: - - runner: ubuntu-22.04 - target: x86_64 - - runner: ubuntu-22.04 - target: x86 - - runner: ubuntu-22.04 - target: aarch64 - - runner: ubuntu-22.04 - target: armv7 - - runner: ubuntu-22.04 - target: s390x - - runner: ubuntu-22.04 - target: ppc64le + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: 3.x + python-version: ${{ matrix.python-version }} - name: Build wheels uses: PyO3/maturin-action@v1 with: - target: ${{ matrix.platform.target }} + target: x86_64-unknown-linux-gnu args: --release --out dist --find-interpreter sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: auto - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: wheels-linux-${{ matrix.platform.target }} + name: wheels-linux-x86_64 + path: dist + + windows: + if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') + runs-on: windows-latest + strategy: + matrix: + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: x86_64-pc-windows-msvc + args: --release --out dist --find-interpreter + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + - name: Upload wheels + uses: actions/upload-artifact@v5 + with: + name: wheels-windows-x64 + path: dist + + macos-x86_64: + if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') + runs-on: macos-15-intel + strategy: + matrix: + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: x86_64-apple-darwin + args: --release --out dist --find-interpreter + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + - name: Upload wheels + uses: actions/upload-artifact@v5 + with: + name: wheels-macos-x86_64-apple-darwin + path: dist + + macos-aarch64: + if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') + runs-on: macos-latest + strategy: + matrix: + arch: [aarch64] + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.arch }}-apple-darwin + args: --release --out dist --find-interpreter + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + - name: Upload wheels + uses: actions/upload-artifact@v5 + with: + name: wheels-macos-${{ matrix.arch }}-apple-darwin path: dist sdist: + if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -67,7 +129,7 @@ jobs: if: (github.repository_owner == 'ccxlv') && ${{ startsWith(github.event.release.tag_name, 'v') }} name: Release runs-on: ubuntu-latest - needs: [linux, sdist] + needs: [linux, windows, macos-x86_64, macos-aarch64, sdist] permissions: # Use to sign the release artifacts id-token: write diff --git a/.github/workflows/release-worker.yml b/.github/workflows/release-worker.yml index a805fc8..a1bdacf 100644 --- a/.github/workflows/release-worker.yml +++ b/.github/workflows/release-worker.yml @@ -1,61 +1,174 @@ name: Release Worker on: - push: - tags: - - worker-v* + workflow_run: + workflows: ["Tests"] + types: + - completed env: + PYTHON_VERSIONS: '["3.11","3.12","3.13","3.14"]' LINUX_TARGET: x86_64-unknown-linux-gnu + WINDOWS_TARGET: x86_64-pc-windows-msvc + MACOS_TARGET_x86_64: x86_64-apple-darwin + MACOS_TARET_aarch64: aarch64-apple-darwin jobs: - linux: - if: (github.repository_owner == 'ccxlv') + check-main: runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - - name: Checkout repository - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 - - name: Ensure tag is on main run: | git fetch origin main git merge-base --is-ancestor "$GITHUB_SHA" origin/main + linux: + if: > + github.repository_owner == 'ccxlv' + && github.event.workflow_run.conclusion == 'success' + && startsWith(github.event.workflow_run.head_branch, 'worker-v') + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - name: Install Rust uses: dtolnay/rust-toolchain@stable - - name: Cache Rust uses: Swatinem/rust-cache@v2 - - name: Build run: scripts/build-worker.sh ${{ env.LINUX_TARGET }} - - name: Package the worker run: | cd dist mv fluxqueue-worker-${{ env.LINUX_TARGET }} fluxqueue-worker tar -czvf fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-linux-x86_64.tar.gz fluxqueue-worker rm fluxqueue-worker - - name: Upload build artifact uses: actions/upload-artifact@v4 with: name: fluxqueue-worker-linux-py${{ matrix.python-version }} path: dist/* + windows: + if: > + github.repository_owner == 'ccxlv' + && github.event.workflow_run.conclusion == 'success' + && startsWith(github.event.workflow_run.head_branch, 'worker-v') + runs-on: windows-latest + strategy: + matrix: + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + - name: Build + run: scripts/build-worker.sh ${{ env.WINDOWS_TARGET }} + - name: Prepare the worker + shell: bash + run: | + cd dist + mv fluxqueue-worker-${{ env.WINDOWS_TARGET }}.exe fluxqueue-worker.exe + zip fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-windows-x86_64.zip fluxqueue-worker.exe + rm fluxqueue-worker.exe + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: fluxqueue-worker-windows-py${{ matrix.python-version }} + path: dist/* + + macos-x86_64: + if: > + github.repository_owner == 'ccxlv' + && github.event.workflow_run.conclusion == 'success' + && startsWith(github.event.workflow_run.head_branch, 'worker-v') + runs-on: macos-15-intel + strategy: + matrix: + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + - name: Build + run: scripts/build-worker.sh ${{ env.MACOS_TARGET_x86_64 }} + - name: Package the worker + run: | + cd dist + mv fluxqueue-worker-${{ env.MACOS_TARGET_x86_64 }} fluxqueue-worker + zip fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-macos-x86_64.zip fluxqueue-worker + rm fluxqueue-worker + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: fluxqueue-worker-macos-x86_64-py${{ matrix.python-version }} + path: dist/* + + macos-aarch64: + if: > + github.repository_owner == 'ccxlv' + && github.event.workflow_run.conclusion == 'success' + && startsWith(github.event.workflow_run.head_branch, 'worker-v') + runs-on: macos-latest + strategy: + matrix: + arch: [aarch64] + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + - name: Build + run: scripts/build-worker.sh ${{ env.MACOS_TARET_aarch64 }} + - name: Package the worker + run: | + cd dist + mv fluxqueue-worker-${{ env.MACOS_TARET_aarch64 }} fluxqueue-worker + zip fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-macos-aarch64.zip fluxqueue-worker + rm fluxqueue-worker + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: fluxqueue-worker-macos-aarch64-py${{ matrix.python-version }} + path: dist/* + release: - if: (github.repository_owner == 'ccxlv') - needs: [linux] + if: > + github.repository_owner == 'ccxlv' + && github.event.workflow_run.conclusion == 'success' + && startsWith(github.event.workflow_run.head_branch, 'worker-v') + needs: [linux, windows, macos-x86_64, macos-aarch64] runs-on: ubuntu-latest permissions: contents: write diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2244711..0c65532 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,6 +10,7 @@ on: env: REDIS_VERSION: 8.4.0 + PYTHON_VERSIONS: '["3.11","3.12","3.13","3.14"]' jobs: # TODO: Add another job that will determine which tests to run based on push types and the changes that were made. @@ -35,24 +36,54 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] - + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: pip - - run: python -m pip install --upgrade pip - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 + - run: pip install -e .[tests] + - run: pytest tests/ + - run: cargo test --workspace --locked + tests-macos-x86_64: + runs-on: macos-15-intel + strategy: + matrix: + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: pip + - run: python -m pip install --upgrade pip + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 - run: pip install -e .[tests] + - run: pytest tests/ + - run: cargo test --workspace --locked + tests-macos-aarch64: + runs-on: macos-latest + strategy: + matrix: + arch: [aarch64] + python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: pip + - run: python -m pip install --upgrade pip + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - run: pip install -e .[tests] - run: pytest tests/ - run: cargo test --workspace --locked @@ -60,6 +91,8 @@ jobs: needs: - check-style - tests-linux + - tests-macos-x86_64 + - tests-macos-aarch64 if: (github.repository_owner == 'ccxlv') runs-on: ubuntu-latest steps: diff --git a/scripts/build-worker.sh b/scripts/build-worker.sh index 3c7b288..cd9dd6b 100755 --- a/scripts/build-worker.sh +++ b/scripts/build-worker.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -e TARGET=$1 @@ -8,8 +8,15 @@ if [ -z "$TARGET" ]; then exit 1 fi - cargo build -p fluxqueue-worker --release --target "$TARGET" +BIN_NAME="fluxqueue-worker" +EXT="" + +# Add .exe only for Windows targets +if [[ "$TARGET" == *"windows"* ]]; then + EXT=".exe" +fi + mkdir -p dist -cp "target/$TARGET/release/fluxqueue-worker" "dist/fluxqueue-worker-$TARGET" +cp "target/$TARGET/release/${BIN_NAME}${EXT}" "dist/${BIN_NAME}-${TARGET}${EXT}" From 8e2ec5632a043e1c045b31440d9ea05eac3593b4 Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 16:13:58 +0400 Subject: [PATCH 2/7] Update tests --- .github/actions/tests/action.yml | 33 +++++++++++++++ .github/workflows/tests.yml | 73 +++++++------------------------- 2 files changed, 48 insertions(+), 58 deletions(-) create mode 100644 .github/actions/tests/action.yml diff --git a/.github/actions/tests/action.yml b/.github/actions/tests/action.yml new file mode 100644 index 0000000..8f49a21 --- /dev/null +++ b/.github/actions/tests/action.yml @@ -0,0 +1,33 @@ +name: "Run Python and Rust Tests" +description: "Standardized test suite with strict shell" +inputs: + python-version: + description: "Python version to use" + required: true + +runs: + using: "composite" + steps: + - name: Set up Python ${{ inputs.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python-version }} + cache: pip + + - name: Install dependencies + shell: bash -euxo pipefail {0} + run: | + python -m pip install --upgrade pip + pip install -e .[tests] + + - name: Set up Rust + uses: dtolnay/rust-toolchain@stable + + - name: Rust Cache + uses: Swatinem/rust-cache@v2 + + - name: Run Tests + shell: bash -euxo pipefail {0} + run: | + pytest tests/ + cargo test --workspace --locked diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0c65532..38be562 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,6 @@ on: env: REDIS_VERSION: 8.4.0 - PYTHON_VERSIONS: '["3.11","3.12","3.13","3.14"]' jobs: # TODO: Add another job that will determine which tests to run based on push types and the changes that were made. @@ -26,74 +25,32 @@ jobs: - uses: actions/setup-python@v5 with: python-version: "3.13" - - run: pip install -e .[dev] - - run: scripts/check-prettier.sh - - run: ruff check . - - run: cargo fmt --all -- --check - - run: cargo clippy --workspace -- -D warnings + - run: | + pip install -e .[dev] + scripts/check-prettier.sh + ruff check . + cargo fmt --all -- --check + cargo clippy --workspace -- -D warnings - tests-linux: - runs-on: ubuntu-latest + tests: + name: ${{ matrix.os }} (Py ${{ matrix.python-version }}) strategy: + fail-fast: false matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] + os: [ubuntu-latest, macos-15-intel, macos-latest] + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: pip - - run: python -m pip install --upgrade pip - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 - - run: pip install -e .[tests] - - run: pytest tests/ - - run: cargo test --workspace --locked - tests-macos-x86_64: - runs-on: macos-15-intel - strategy: - matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - name: Run Test Suite + uses: ./.github/actions/tests with: python-version: ${{ matrix.python-version }} - cache: pip - - run: python -m pip install --upgrade pip - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 - - run: pip install -e .[tests] - - run: pytest tests/ - - run: cargo test --workspace --locked - - tests-macos-aarch64: - runs-on: macos-latest - strategy: - matrix: - arch: [aarch64] - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: pip - - run: python -m pip install --upgrade pip - - uses: dtolnay/rust-toolchain@stable - - uses: Swatinem/rust-cache@v2 - - run: pip install -e .[tests] - - run: pytest tests/ - - run: cargo test --workspace --locked tests-pass: - needs: - - check-style - - tests-linux - - tests-macos-x86_64 - - tests-macos-aarch64 if: (github.repository_owner == 'ccxlv') + needs: [check-style, tests] runs-on: ubuntu-latest steps: - run: echo "All tests passed ✅" From 87e919bbad1223eb37f6d9300a37e743460e154c Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 16:34:44 +0400 Subject: [PATCH 3/7] Testing macos --- .github/workflows/tests.yml | 17 ++++++++++++++++- tests/conftest.py | 17 +++-------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 38be562..db1416d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -42,7 +42,22 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - + - name: Install Redis (macOS) + if: runner.os == 'macOS' + shell: bash -euxo pipefail {0} + run: | + # Extract major version (e.g., 8.4.0 -> 8) + MAJOR_VERSION=$(echo "${{ env.REDIS_VERSION }}" | cut -d. -f1) + + # Check if a specific versioned formula exists, otherwise use latest + if brew info "redis@$MAJOR_VERSION" >/dev/null 2>&1; then + brew install "redis@$MAJOR_VERSION" + brew services start "redis@$MAJOR_VERSION" + echo "$(brew --prefix "redis@$MAJOR_VERSION")/bin" >> $GITHUB_PATH + else + brew install redis + brew services start redis + fi - name: Run Test Suite uses: ./.github/actions/tests with: diff --git a/tests/conftest.py b/tests/conftest.py index b14bde0..b3e4ebe 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -21,23 +21,12 @@ class TestEnv: TestEnvFixture = Annotated[TestEnv, pytest.fixture] -@pytest.fixture(scope="session") -def redis_container() -> Iterator[RedisContainer]: - with RedisContainer(f"redis:{REDIS_VERSION}") as container: - yield container - - @pytest.fixture -def test_env(redis_container: RedisContainer): - host = redis_container.get_container_host_ip() - port = int(redis_container.get_exposed_port(redis_container.port)) - - redis_url: str = f"redis://{host}:{port}" - - redis_client: Redis = Redis(host=host, port=port) +def test_env(): + redis_client: Redis = Redis() redis_client.flushall() - fluxqueue: FluxQueue = FluxQueue(redis_url=redis_url) + fluxqueue: FluxQueue = FluxQueue() try: yield TestEnv(fluxqueue=fluxqueue, redis_client=redis_client) From 32a3a2df6a6a10c23cdaf9d202e80d6cee43c0ab Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 16:47:02 +0400 Subject: [PATCH 4/7] Fix tests and add windows tests --- .github/workflows/publish.yml | 11 +- .github/workflows/release-worker.yml | 9 +- .github/workflows/tests.yml | 37 +- Cargo.lock | 1567 ++----------------------- Cargo.toml | 6 + crates/fluxqueue-worker/Cargo.toml | 3 - crates/fluxqueue-worker/src/worker.rs | 24 +- pyproject.toml | 1 - tests/conftest.py | 4 - 9 files changed, 112 insertions(+), 1550 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 486b5d2..8746a3d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,16 +12,13 @@ on: permissions: contents: read -env: - PYTHON_VERSIONS: '["3.11","3.12","3.13","3.14"]' - jobs: linux: if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') runs-on: ubuntu-latest strategy: matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -44,7 +41,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 @@ -67,7 +64,7 @@ jobs: runs-on: macos-15-intel strategy: matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 @@ -91,7 +88,7 @@ jobs: strategy: matrix: arch: [aarch64] - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 diff --git a/.github/workflows/release-worker.yml b/.github/workflows/release-worker.yml index a1bdacf..b5cff96 100644 --- a/.github/workflows/release-worker.yml +++ b/.github/workflows/release-worker.yml @@ -7,7 +7,6 @@ on: - completed env: - PYTHON_VERSIONS: '["3.11","3.12","3.13","3.14"]' LINUX_TARGET: x86_64-unknown-linux-gnu WINDOWS_TARGET: x86_64-pc-windows-msvc MACOS_TARGET_x86_64: x86_64-apple-darwin @@ -33,7 +32,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - name: Checkout repository uses: actions/checkout@v4 @@ -67,7 +66,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - name: Checkout repository uses: actions/checkout@v4 @@ -102,7 +101,7 @@ jobs: runs-on: macos-15-intel strategy: matrix: - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - name: Checkout repository uses: actions/checkout@v4 @@ -137,7 +136,7 @@ jobs: strategy: matrix: arch: [aarch64] - python-version: ${{ fromJSON(env.PYTHON_VERSIONS) }} + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - name: Checkout repository uses: actions/checkout@v4 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index db1416d..4af9b42 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -8,9 +8,6 @@ on: branches: - main -env: - REDIS_VERSION: 8.4.0 - jobs: # TODO: Add another job that will determine which tests to run based on push types and the changes that were made. check-style: @@ -38,26 +35,34 @@ jobs: fail-fast: false matrix: python-version: ["3.11", "3.12", "3.13", "3.14"] - os: [ubuntu-latest, macos-15-intel, macos-latest] + os: [ubuntu-latest, macos-15-intel, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 + + - name: Install Redis (Linux) + if: runner.os == 'Linux' + shell: bash -euxo pipefail {0} + run: | + sudo apt-get update + sudo apt-get install -y redis-server + sudo systemctl start redis-server + - name: Install Redis (macOS) if: runner.os == 'macOS' shell: bash -euxo pipefail {0} run: | - # Extract major version (e.g., 8.4.0 -> 8) - MAJOR_VERSION=$(echo "${{ env.REDIS_VERSION }}" | cut -d. -f1) - - # Check if a specific versioned formula exists, otherwise use latest - if brew info "redis@$MAJOR_VERSION" >/dev/null 2>&1; then - brew install "redis@$MAJOR_VERSION" - brew services start "redis@$MAJOR_VERSION" - echo "$(brew --prefix "redis@$MAJOR_VERSION")/bin" >> $GITHUB_PATH - else - brew install redis - brew services start redis - fi + brew install redis + brew services start redis + + - name: Install Redis (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + choco install redis-64 --yes + redis-server --service-install + redis-server --service-start + - name: Run Test Suite uses: ./.github/actions/tests with: diff --git a/Cargo.lock b/Cargo.lock index d501093..c73a535 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,202 +76,12 @@ version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" -[[package]] -name = "astral-tokio-tar" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec179a06c1769b1e42e1e2cbe74c7dcdb3d6383c838454d063eaac5bbb7ebbe5" -dependencies = [ - "filetime", - "futures-core", - "libc", - "portable-atomic", - "rustc-hash", - "tokio", - "tokio-stream", - "xattr", -] - -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "axum" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8" -dependencies = [ - "axum-core", - "bytes", - "futures-util", - "http", - "http-body", - "http-body-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "serde_core", - "sync_wrapper", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "http-body-util", - "mime", - "pin-project-lite", - "sync_wrapper", - "tower-layer", - "tower-service", -] - -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "bitflags" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" - -[[package]] -name = "bollard" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227aa051deec8d16bd9c34605e7aaf153f240e35483dd42f6f78903847934738" -dependencies = [ - "async-stream", - "base64 0.22.1", - "bitflags", - "bollard-buildkit-proto", - "bollard-stubs", - "bytes", - "futures-core", - "futures-util", - "hex", - "home", - "http", - "http-body-util", - "hyper", - "hyper-named-pipe", - "hyper-rustls", - "hyper-util", - "hyperlocal", - "log", - "num", - "pin-project-lite", - "rand", - "rustls", - "rustls-native-certs", - "rustls-pki-types", - "serde", - "serde_derive", - "serde_json", - "serde_urlencoded", - "thiserror", - "time", - "tokio", - "tokio-stream", - "tokio-util", - "tonic", - "tower-service", - "url", - "winapi", -] - -[[package]] -name = "bollard-buildkit-proto" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a885520bf6249ab931a764ffdb87b0ceef48e6e7d807cfdb21b751e086e1ad" -dependencies = [ - "prost", - "prost-types", - "tonic", - "tonic-prost", - "ureq", -] - -[[package]] -name = "bollard-stubs" -version = "1.52.1-rc.29.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0a8ca8799131c1837d1282c3f81f31e76ceb0ce426e04a7fe1ccee3287c066" -dependencies = [ - "base64 0.22.1", - "bollard-buildkit-proto", - "bytes", - "prost", - "serde", - "serde_json", - "serde_repr", - "time", -] - [[package]] name = "bumpalo" version = "3.19.1" @@ -309,7 +119,6 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", - "serde", "wasm-bindgen", "windows-link", ] @@ -374,57 +183,12 @@ dependencies = [ "tokio-util", ] -[[package]] -name = "core-foundation" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "darling" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" -dependencies = [ - "darling_core", - "quote", - "syn", -] - [[package]] name = "deadpool" version = "0.12.3" @@ -456,16 +220,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "deranged" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" -dependencies = [ - "powerfmt", - "serde_core", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -477,35 +231,6 @@ dependencies = [ "syn", ] -[[package]] -name = "docker_credential" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d89dfcba45b4afad7450a99b39e751590463e45c04728cf555d36bb66940de8" -dependencies = [ - "base64 0.21.7", - "serde", - "serde_json", -] - -[[package]] -name = "dyn-clone" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - [[package]] name = "errno" version = "0.3.14" @@ -516,38 +241,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "etcetera" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de48cc4d1c1d97a20fd819def54b890cadde72ed3ad0c614822a0a433361be96" -dependencies = [ - "cfg-if", - "windows-sys 0.61.2", -] - -[[package]] -name = "ferroid" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb330bbd4cb7a5b9f559427f06f98a4f853a137c8298f3bd3f8ca57663e21986" -dependencies = [ - "portable-atomic", - "rand", - "web-time", -] - -[[package]] -name = "filetime" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" -dependencies = [ - "cfg-if", - "libc", - "libredox", -] - [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -585,7 +278,6 @@ dependencies = [ "rmp-serde", "rmpv", "serde", - "testcontainers", "tokio", "tracing", "tracing-subscriber", @@ -603,12 +295,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -707,17 +393,6 @@ dependencies = [ "slab", ] -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "getrandom" version = "0.3.4" @@ -730,37 +405,6 @@ dependencies = [ "wasip2", ] -[[package]] -name = "h2" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap 2.13.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - [[package]] name = "heck" version = "0.5.0" @@ -774,242 +418,80 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "home" -version = "0.5.12" +name = "iana-time-zone" +version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ - "windows-sys 0.61.2", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", ] [[package]] -name = "http" -version = "1.4.0" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "bytes", - "itoa", + "cc", ] [[package]] -name = "http-body" -version = "1.0.1" +name = "icu_collections" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ - "bytes", - "http", + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "http-body-util" -version = "0.1.3" +name = "icu_locale_core" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "httparse" -version = "1.10.1" +name = "icu_normalizer" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "icu_normalizer_data" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] -name = "hyper" -version = "1.8.1" +name = "icu_properties" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" -dependencies = [ - "atomic-waker", - "bytes", - "futures-channel", - "futures-core", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "pin-utils", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-named-pipe" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" -dependencies = [ - "hex", - "hyper", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", - "winapi", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-timeout" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" -dependencies = [ - "hyper", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http", - "http-body", - "hyper", - "libc", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", -] - -[[package]] -name = "hyperlocal" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7" -dependencies = [ - "hex", - "http-body-util", - "hyper", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -1040,12 +522,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - [[package]] name = "idna" version = "1.1.0" @@ -1067,29 +543,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - -[[package]] -name = "indexmap" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" -dependencies = [ - "equivalent", - "hashbrown 0.16.1", - "serde", - "serde_core", -] - [[package]] name = "indoc" version = "2.0.7" @@ -1105,15 +558,6 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.17" @@ -1142,23 +586,6 @@ version = "0.2.181" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "459427e2af2b9c839b132acb702a1c654d95e10f8c326bfc2ad11310e458b1c5" -[[package]] -name = "libredox" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" -dependencies = [ - "bitflags", - "libc", - "redox_syscall", -] - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - [[package]] name = "litemap" version = "0.8.1" @@ -1180,12 +607,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matchit" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" - [[package]] name = "memchr" version = "2.8.0" @@ -1201,12 +622,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - [[package]] name = "mio" version = "1.1.1" @@ -1227,20 +642,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -1251,21 +652,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" - [[package]] name = "num-integer" version = "0.1.46" @@ -1275,28 +661,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1328,63 +692,12 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" -[[package]] -name = "openssl-probe" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" - -[[package]] -name = "parse-display" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914a1c2265c98e2446911282c6ac86d8524f495792c38c5bd884f80499c7538a" -dependencies = [ - "parse-display-derive", - "regex", - "regex-syntax", -] - -[[package]] -name = "parse-display-derive" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ae7800a4c974efd12df917266338e79a7a74415173caf7e70aa0a0707345281" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "regex-syntax", - "structmeta", - "syn", -] - [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pin-project" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -1412,21 +725,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - -[[package]] -name = "ppv-lite86" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" -dependencies = [ - "zerocopy", -] - [[package]] name = "proc-macro2" version = "1.0.106" @@ -1436,38 +734,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "prost" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-derive" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" -dependencies = [ - "prost", -] - [[package]] name = "pyo3" version = "0.27.2" @@ -1567,35 +833,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "rand" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" -dependencies = [ - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", -] - [[package]] name = "redis" version = "0.32.7" @@ -1618,47 +855,6 @@ dependencies = [ "url", ] -[[package]] -name = "redox_syscall" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" -dependencies = [ - "bitflags", -] - -[[package]] -name = "ref-cast" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "regex" -version = "1.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - [[package]] name = "regex-automata" version = "0.4.14" @@ -1676,20 +872,6 @@ version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.17", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - [[package]] name = "rmp" version = "0.8.15" @@ -1720,72 +902,6 @@ dependencies = [ "serde_bytes", ] -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustix" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "rustls" -version = "0.23.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" -dependencies = [ - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pki-types" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" -dependencies = [ - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.22" @@ -1798,62 +914,6 @@ version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "schemars" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "schemars" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" -dependencies = [ - "dyn-clone", - "ref-cast", - "serde", - "serde_json", -] - -[[package]] -name = "security-framework" -version = "3.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d17b898a6d6948c3a8ee4372c17cb384f90d2e6e912ef00895b14fd7ab54ec38" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321c8673b092a9a42605034a9879d73cb79101ed5fd117bc9a597b89b4e9e61a" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "serde" version = "1.0.228" @@ -1865,108 +925,41 @@ dependencies = [ ] [[package]] -name = "serde-pyobject" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5614e792b7c36d3feeb45b8287ea2dc615f063896e59258d11ef5015c18bdf6a" -dependencies = [ - "log", - "pyo3", - "serde", -] - -[[package]] -name = "serde_bytes" -version = "0.11.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" -dependencies = [ - "serde", - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" +name = "serde-pyobject" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "5614e792b7c36d3feeb45b8287ea2dc615f063896e59258d11ef5015c18bdf6a" dependencies = [ - "proc-macro2", - "quote", - "syn", + "log", + "pyo3", + "serde", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "serde_bytes" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ - "form_urlencoded", - "itoa", - "ryu", "serde", + "serde_core", ] [[package]] -name = "serde_with" -version = "3.16.1" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ - "base64 0.22.1", - "chrono", - "hex", - "indexmap 1.9.3", - "indexmap 2.13.0", - "schemars 0.9.0", - "schemars 1.2.1", - "serde_core", - "serde_json", - "serde_with_macros", - "time", + "serde_derive", ] [[package]] -name = "serde_with_macros" -version = "3.16.1" +name = "serde_derive" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ - "darling", "proc-macro2", "quote", "syn", @@ -2037,35 +1030,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "structmeta" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" -dependencies = [ - "proc-macro2", - "quote", - "structmeta-derive", - "syn", -] - -[[package]] -name = "structmeta-derive" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - [[package]] name = "syn" version = "2.0.114" @@ -2077,12 +1041,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - [[package]] name = "synstructure" version = "0.13.2" @@ -2100,57 +1058,6 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1dd07eb858a2067e2f3c7155d54e929265c264e6f37efe3ee7a8d1b5a1dd0ba" -[[package]] -name = "testcontainers" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fdcea723c64cc08dbc533b3761e345a15bf1222cbe6cb611de09b43f17a168" -dependencies = [ - "astral-tokio-tar", - "async-trait", - "bollard", - "bytes", - "docker_credential", - "either", - "etcetera", - "ferroid", - "futures", - "http", - "itertools", - "log", - "memchr", - "parse-display", - "pin-project-lite", - "serde", - "serde_json", - "serde_with", - "thiserror", - "tokio", - "tokio-stream", - "tokio-util", - "url", -] - -[[package]] -name = "thiserror" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "thread_local" version = "1.1.9" @@ -2160,37 +1067,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "itoa", - "num-conv", - "powerfmt", - "serde_core", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - -[[package]] -name = "time-macros" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" version = "0.8.2" @@ -2207,7 +1083,6 @@ version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ - "bytes", "libc", "mio", "pin-project-lite", @@ -2228,27 +1103,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-rustls" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.18" @@ -2262,77 +1116,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tonic" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f32a6f80051a4111560201420c7885d0082ba9efe2ab61875c587bb6b18b9a0" -dependencies = [ - "async-trait", - "axum", - "base64 0.22.1", - "bytes", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-timeout", - "hyper-util", - "percent-encoding", - "pin-project", - "socket2", - "sync_wrapper", - "tokio", - "tokio-stream", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tonic-prost" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f86539c0089bfd09b1f8c0ab0239d80392af74c21bc9e0f15e1b4aca4c1647f" -dependencies = [ - "bytes", - "prost", - "tonic", -] - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 2.13.0", - "pin-project-lite", - "slab", - "sync_wrapper", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - [[package]] name = "tracing" version = "0.1.44" @@ -2394,12 +1177,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - [[package]] name = "unicode-ident" version = "1.0.23" @@ -2412,39 +1189,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "ureq" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc97a28575b85cfedf2a7e7d3cc64b3e11bd8ac766666318003abbacc7a21fc" -dependencies = [ - "base64 0.22.1", - "log", - "percent-encoding", - "rustls", - "rustls-pki-types", - "ureq-proto", - "utf-8", -] - -[[package]] -name = "ureq-proto" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d81f9efa9df032be5934a46a068815a10a042b494b6a58cb0a1a97bb5467ed6f" -dependencies = [ - "base64 0.22.1", - "http", - "httparse", - "log", -] - [[package]] name = "url" version = "2.5.8" @@ -2455,15 +1199,8 @@ dependencies = [ "idna", "percent-encoding", "serde", - "serde_derive", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -2482,7 +1219,7 @@ version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f" dependencies = [ - "getrandom 0.3.4", + "getrandom", "js-sys", "wasm-bindgen", ] @@ -2493,15 +1230,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -2562,38 +1290,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.62.2" @@ -2653,22 +1349,13 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.5", + "windows-targets", ] [[package]] @@ -2680,22 +1367,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - [[package]] name = "windows-targets" version = "0.53.5" @@ -2703,106 +1374,58 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - [[package]] name = "windows_aarch64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - [[package]] name = "windows_aarch64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - [[package]] name = "windows_i686_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - [[package]] name = "windows_i686_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - [[package]] name = "windows_i686_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - [[package]] name = "windows_x86_64_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - [[package]] name = "windows_x86_64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - [[package]] name = "windows_x86_64_msvc" version = "0.53.1" @@ -2821,16 +1444,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix", -] - [[package]] name = "yoke" version = "0.8.1" @@ -2854,26 +1467,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.8.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zerofrom" version = "0.1.6" @@ -2895,12 +1488,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zeroize" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" - [[package]] name = "zerotrie" version = "0.2.3" @@ -2933,9 +1520,3 @@ dependencies = [ "quote", "syn", ] - -[[package]] -name = "zmij" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/Cargo.toml b/Cargo.toml index d881e37..c3e9685 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,12 @@ [workspace] members = ["crates/fluxqueue-common", "crates/fluxqueue-worker"] +[workspace.package] +repository = "https://github.com/CCXLV/fluxqueue" +homepage = "https://fluxqueue.ccxlv.dev/" +authors = ["Giorgi Merebashvili "] +edition = "2024" + [package] name = "fluxqueue_core" version = "0.2.0-beta.1" diff --git a/crates/fluxqueue-worker/Cargo.toml b/crates/fluxqueue-worker/Cargo.toml index 9d7fde7..08ca414 100644 --- a/crates/fluxqueue-worker/Cargo.toml +++ b/crates/fluxqueue-worker/Cargo.toml @@ -35,6 +35,3 @@ chrono = "0.4.43" num_cpus = "1.17.0" fluxqueue-common.workspace = true - -[dev-dependencies] -testcontainers = "0.27.0" diff --git a/crates/fluxqueue-worker/src/worker.rs b/crates/fluxqueue-worker/src/worker.rs index 7f092f8..b2a8b55 100644 --- a/crates/fluxqueue-worker/src/worker.rs +++ b/crates/fluxqueue-worker/src/worker.rs @@ -426,11 +426,6 @@ mod tests { use super::*; use crate::logger::TestWriter; use std::sync::{Arc, Mutex}; - use testcontainers::{ - GenericImage, ImageExt, - core::{IntoContainerPort, WaitFor}, - runners::AsyncRunner, - }; #[test] fn test_path_to_module_path() -> Result<()> { @@ -630,34 +625,21 @@ mod tests { let _guard = tracing::subscriber::set_default(subscriber); let module_path_str = get_test_module_path("test_tasks_module.py"); - let redis_version = std::env::var("REDIS_VERSION").unwrap_or("latest".to_string()); - - let container = GenericImage::new("redis", &redis_version) - .with_exposed_port(6379.tcp()) - .with_wait_for(WaitFor::message_on_stdout("Ready to accept connections")) - .with_network("bridge") - .with_env_var("DEBUG", "1") - .start() - .await - .expect("Failed to start Redis"); - - let mapped_port = container.get_host_port_ipv4(6379).await?; - let redis_url = format!("redis://localhost:{:?}", mapped_port); - let cloned_redis_url = redis_url.clone(); + let redis_url = "redis://localhost:6379"; let (shutdown_tx, shutdown_rx) = watch::channel(false); let worker_handle = tokio::spawn(run_worker( shutdown_rx, 4, - redis_url, + redis_url.to_string(), module_path_str, "default".to_string(), false, )); sleep(Duration::from_secs(5)).await; - enqueue_tasks(&cloned_redis_url).await?; + enqueue_tasks(&redis_url).await?; sleep(Duration::from_secs(5)).await; let _ = shutdown_tx.send(true); diff --git a/pyproject.toml b/pyproject.toml index 2936691..83b963d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,6 @@ dev = ["ruff"] tests = [ "pytest-asyncio", "python-dotenv", - "testcontainers", "redis" ] cli = [ diff --git a/tests/conftest.py b/tests/conftest.py index b3e4ebe..0ea0b55 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,11 +1,9 @@ import os -from collections.abc import Iterator from dataclasses import dataclass from typing import Annotated import pytest from redis import Redis -from testcontainers.redis import RedisContainer from fluxqueue import FluxQueue @@ -24,8 +22,6 @@ class TestEnv: @pytest.fixture def test_env(): redis_client: Redis = Redis() - redis_client.flushall() - fluxqueue: FluxQueue = FluxQueue() try: From 50c7aa77abe977b13feed3bea3ef7257a05c416d Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 18:38:26 +0400 Subject: [PATCH 5/7] Remove windows tests --- .github/workflows/tests.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4af9b42..1901d77 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: python-version: ["3.11", "3.12", "3.13", "3.14"] - os: [ubuntu-latest, macos-15-intel, macos-latest, windows-latest] + os: [ubuntu-latest, macos-15-intel, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -55,14 +55,6 @@ jobs: brew install redis brew services start redis - - name: Install Redis (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: | - choco install redis-64 --yes - redis-server --service-install - redis-server --service-start - - name: Run Test Suite uses: ./.github/actions/tests with: From 73cb043f13215296aa2d03578945fa7cd7e07e0b Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 19:06:12 +0400 Subject: [PATCH 6/7] Update release-worker workflow --- .github/actions/build-worker/action.yml | 63 ++++++++++ .github/actions/tests/action.yml | 2 +- .github/workflows/release-worker.yml | 157 +++--------------------- 3 files changed, 84 insertions(+), 138 deletions(-) create mode 100644 .github/actions/build-worker/action.yml diff --git a/.github/actions/build-worker/action.yml b/.github/actions/build-worker/action.yml new file mode 100644 index 0000000..e3eb7b3 --- /dev/null +++ b/.github/actions/build-worker/action.yml @@ -0,0 +1,63 @@ +name: "Build Worker" +description: "Build worker" +inputs: + python-version: + description: "Python version to use" + required: true + target: + description: "Target that is the worker is built for" + required: true + +runs: + using: composite + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python ${{ inputs.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python-version }} + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Cache Rust + uses: Swatinem/rust-cache@v2 + + - name: Build + shell: bash -euxo pipefail {0} + run: scripts/build-worker.sh ${{ inputs.target }} + + - name: Package the worker (Linux) + if: runner.os == 'Linux' + shell: bash -euxo pipefail {0} + run: | + cd dist + mv fluxqueue-worker-${{ inputs.target }} fluxqueue-worker + tar -czvf fluxqueue-${{ github.ref_name }}-py${{ inputs.python-version }}-linux-x86_64.tar.gz fluxqueue-worker + rm fluxqueue-worker + + - name: Package the worker (macOS) + if: runner.os == 'macOS' + shell: bash -euxo pipefail {0} + run: | + cd dist + mv fluxqueue-worker-${{ inputs.target }} fluxqueue-worker + zip fluxqueue-${{ github.ref_name }}-py${{ inputs.python-version }}-${{ inputs.target }}.zip fluxqueue-worker + rm fluxqueue-worker + + - name: Package the worker (Windows) + if: runner.os == 'Windows' + shell: bash -euxo pipefail {0} + run: | + cd dist + mv fluxqueue-worker-${{ inputs.target }}.exe fluxqueue-worker.exe + zip fluxqueue-${{ github.ref_name }}-py${{ inputs.python-version }}-windows-x86_64.zip fluxqueue-worker.exe + rm fluxqueue-worker.exe + + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: fluxqueue-worker-${{ inputs.target }}-py${{ inputs.python-version }} + path: dist/* diff --git a/.github/actions/tests/action.yml b/.github/actions/tests/action.yml index 8f49a21..8a4b7d6 100644 --- a/.github/actions/tests/action.yml +++ b/.github/actions/tests/action.yml @@ -6,7 +6,7 @@ inputs: required: true runs: - using: "composite" + using: composite steps: - name: Set up Python ${{ inputs.python-version }} uses: actions/setup-python@v5 diff --git a/.github/workflows/release-worker.yml b/.github/workflows/release-worker.yml index b5cff96..bfab90a 100644 --- a/.github/workflows/release-worker.yml +++ b/.github/workflows/release-worker.yml @@ -3,14 +3,7 @@ name: Release Worker on: workflow_run: workflows: ["Tests"] - types: - - completed - -env: - LINUX_TARGET: x86_64-unknown-linux-gnu - WINDOWS_TARGET: x86_64-pc-windows-msvc - MACOS_TARGET_x86_64: x86_64-apple-darwin - MACOS_TARET_aarch64: aarch64-apple-darwin + types: [completed] jobs: check-main: @@ -24,150 +17,40 @@ jobs: git fetch origin main git merge-base --is-ancestor "$GITHUB_SHA" origin/main - linux: - if: > - github.repository_owner == 'ccxlv' - && github.event.workflow_run.conclusion == 'success' - && startsWith(github.event.workflow_run.head_branch, 'worker-v') - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - - name: Cache Rust - uses: Swatinem/rust-cache@v2 - - name: Build - run: scripts/build-worker.sh ${{ env.LINUX_TARGET }} - - name: Package the worker - run: | - cd dist - mv fluxqueue-worker-${{ env.LINUX_TARGET }} fluxqueue-worker - tar -czvf fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-linux-x86_64.tar.gz fluxqueue-worker - rm fluxqueue-worker - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: fluxqueue-worker-linux-py${{ matrix.python-version }} - path: dist/* - - windows: + build: if: > github.repository_owner == 'ccxlv' && github.event.workflow_run.conclusion == 'success' && startsWith(github.event.workflow_run.head_branch, 'worker-v') - runs-on: windows-latest + name: ${{ matrix.os }} (Py ${{ matrix.python-version }}) strategy: + fail-fast: false matrix: python-version: ["3.11", "3.12", "3.13", "3.14"] + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + - os: macos-15-intel + target: x86_64-apple-darwin + - os: macos-latest + target: aarch64-apple-darwin + - os: windows-latest + target: x86_64-pc-windows-msvc + runs-on: ${{ matrix.os }} steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + - uses: actions/checkout@v4 + - name: Run Build Suite + uses: ./.github/actions/build-worker with: python-version: ${{ matrix.python-version }} - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - - name: Cache Rust - uses: Swatinem/rust-cache@v2 - - name: Build - run: scripts/build-worker.sh ${{ env.WINDOWS_TARGET }} - - name: Prepare the worker - shell: bash - run: | - cd dist - mv fluxqueue-worker-${{ env.WINDOWS_TARGET }}.exe fluxqueue-worker.exe - zip fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-windows-x86_64.zip fluxqueue-worker.exe - rm fluxqueue-worker.exe - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: fluxqueue-worker-windows-py${{ matrix.python-version }} - path: dist/* - - macos-x86_64: - if: > - github.repository_owner == 'ccxlv' - && github.event.workflow_run.conclusion == 'success' - && startsWith(github.event.workflow_run.head_branch, 'worker-v') - runs-on: macos-15-intel - strategy: - matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - - name: Cache Rust - uses: Swatinem/rust-cache@v2 - - name: Build - run: scripts/build-worker.sh ${{ env.MACOS_TARGET_x86_64 }} - - name: Package the worker - run: | - cd dist - mv fluxqueue-worker-${{ env.MACOS_TARGET_x86_64 }} fluxqueue-worker - zip fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-macos-x86_64.zip fluxqueue-worker - rm fluxqueue-worker - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: fluxqueue-worker-macos-x86_64-py${{ matrix.python-version }} - path: dist/* - - macos-aarch64: - if: > - github.repository_owner == 'ccxlv' - && github.event.workflow_run.conclusion == 'success' - && startsWith(github.event.workflow_run.head_branch, 'worker-v') - runs-on: macos-latest - strategy: - matrix: - arch: [aarch64] - python-version: ["3.11", "3.12", "3.13", "3.14"] - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Install Rust - uses: dtolnay/rust-toolchain@stable - - name: Cache Rust - uses: Swatinem/rust-cache@v2 - - name: Build - run: scripts/build-worker.sh ${{ env.MACOS_TARET_aarch64 }} - - name: Package the worker - run: | - cd dist - mv fluxqueue-worker-${{ env.MACOS_TARET_aarch64 }} fluxqueue-worker - zip fluxqueue-${{ github.ref_name }}-py${{ matrix.python-version }}-macos-aarch64.zip fluxqueue-worker - rm fluxqueue-worker - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: fluxqueue-worker-macos-aarch64-py${{ matrix.python-version }} - path: dist/* + target: ${{ matrix.target }} release: if: > github.repository_owner == 'ccxlv' && github.event.workflow_run.conclusion == 'success' && startsWith(github.event.workflow_run.head_branch, 'worker-v') - needs: [linux, windows, macos-x86_64, macos-aarch64] + needs: [build] runs-on: ubuntu-latest permissions: contents: write @@ -184,5 +67,5 @@ jobs: tag_name: ${{ github.ref_name }} name: ${{ github.ref_name }} files: artifacts/**/* - draft: false + draft: true prerelease: false From e687c4046241ce5e91dc52de1202ab9d25867952 Mon Sep 17 00:00:00 2001 From: Giorgi Merebashvili Date: Sun, 15 Feb 2026 19:44:35 +0400 Subject: [PATCH 7/7] Update pypi publish workflow --- .github/actions/build-package/action.yml | 28 ++++++ .github/workflows/publish.yml | 104 ++++------------------- .github/workflows/release-worker.yml | 1 - 3 files changed, 44 insertions(+), 89 deletions(-) create mode 100644 .github/actions/build-package/action.yml diff --git a/.github/actions/build-package/action.yml b/.github/actions/build-package/action.yml new file mode 100644 index 0000000..1f016d5 --- /dev/null +++ b/.github/actions/build-package/action.yml @@ -0,0 +1,28 @@ +name: "Build Python Package" +description: "Build and package the library" +inputs: + python-version: + description: "Python version" + required: true + target: + description: "Target to build the package for" + required: true + +runs: + using: composite + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ inputs.python-version }} + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ inputs.target }} + args: --release --out dist --find-interpreter + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-${{ inputs.target }} + path: dist diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8746a3d..a010367 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,98 +13,29 @@ permissions: contents: read jobs: - linux: + build: if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') - runs-on: ubuntu-latest + name: ${{ matrix.os }} (Py ${{ matrix.python-version }}) strategy: matrix: python-version: ["3.11", "3.12", "3.13", "3.14"] + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + - os: macos-15-intel + target: x86_64-apple-darwin + - os: macos-latest + target: aarch64-apple-darwin + - os: windows-latest + target: x86_64-pc-windows-msvc + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: x86_64-unknown-linux-gnu - args: --release --out dist --find-interpreter - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: wheels-linux-x86_64 - path: dist - - windows: - if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') - runs-on: windows-latest - strategy: - matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: x86_64-pc-windows-msvc - args: --release --out dist --find-interpreter - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - - name: Upload wheels - uses: actions/upload-artifact@v5 - with: - name: wheels-windows-x64 - path: dist - - macos-x86_64: - if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') - runs-on: macos-15-intel - strategy: - matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 + - name: Run Build Suite + uses: ./.github/actions/build-package with: python-version: ${{ matrix.python-version }} - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: x86_64-apple-darwin - args: --release --out dist --find-interpreter - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - - name: Upload wheels - uses: actions/upload-artifact@v5 - with: - name: wheels-macos-x86_64-apple-darwin - path: dist - - macos-aarch64: - if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') - runs-on: macos-latest - strategy: - matrix: - arch: [aarch64] - python-version: ["3.11", "3.12", "3.13", "3.14"] - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - name: Build wheels - uses: PyO3/maturin-action@v1 - with: - target: ${{ matrix.arch }}-apple-darwin - args: --release --out dist --find-interpreter - sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - - name: Upload wheels - uses: actions/upload-artifact@v5 - with: - name: wheels-macos-${{ matrix.arch }}-apple-darwin - path: dist + target: ${{ matrix.target }} sdist: if: github.repository_owner == 'ccxlv' && startsWith(github.event.release.tag_name, 'v') @@ -126,13 +57,10 @@ jobs: if: (github.repository_owner == 'ccxlv') && ${{ startsWith(github.event.release.tag_name, 'v') }} name: Release runs-on: ubuntu-latest - needs: [linux, windows, macos-x86_64, macos-aarch64, sdist] + needs: [build, sdist] permissions: - # Use to sign the release artifacts id-token: write - # Used to upload release artifacts contents: write - # Used to generate artifact attestation attestations: write steps: - name: Install uv diff --git a/.github/workflows/release-worker.yml b/.github/workflows/release-worker.yml index bfab90a..76c16cb 100644 --- a/.github/workflows/release-worker.yml +++ b/.github/workflows/release-worker.yml @@ -24,7 +24,6 @@ jobs: && startsWith(github.event.workflow_run.head_branch, 'worker-v') name: ${{ matrix.os }} (Py ${{ matrix.python-version }}) strategy: - fail-fast: false matrix: python-version: ["3.11", "3.12", "3.13", "3.14"] include: