Skip to content

Release Python SDK 0.48.0 for VGI protocol v3 #389

Release Python SDK 0.48.0 for VGI protocol v3

Release Python SDK 0.48.0 for VGI protocol v3 #389

Workflow file for this run

# Runs the canonical Query-farm/vgi integration sqllogictest suite against the
# Python example worker on every push / PR. The native runner comes from the
# Query-farm/vgi Actions build of the same commit as the test suite and statically
# links the matching extension. Public package releases remain separate.
# ci/run-integration.sh also supports the published standalone runner locally.
#
# (The separate ci.yml covers lint / type-check / unit + conformance tests / docs.
# Those drive the pure-Python in-process Client; this workflow is the only place
# the worker is exercised through the real DuckDB extension over the wire.)
name: Integration suite
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
permissions:
contents: read
actions: read
concurrency:
group: integration-${{ github.ref }}
cancel-in-progress: true
env:
# The test suite and native Actions artifact must come from this exact ref.
# The downloader verifies its provenance against the checked-out commit.
VGI_REF: a83ff7e8cd46aa840a10e78fe9b31603931824c2
VGI_NATIVE_RUNNER_BRANCH: release/vgi-v3-ci-20261028
# CI is not a user: its ATTACHes should not land in Query.Farm's adoption data.
# The vgi extension fires a telemetry event per successful ATTACH, and this
# suite performs several hundred of them per lane, so opting out keeps the
# numbers honest. It also removes telemetry as a variable in lane timings —
# the per-ATTACH event was added in Query-farm/vgi 71e2d51 (2026-07-12), and
# the stdio lane total stepped from ~690s to ~870s across that window.
QUERY_FARM_TELEMETRY_OPT_OUT: "1"
jobs:
integration:
runs-on: ubuntu-latest
timeout-minutes: 45
strategy:
# If any transport leg fails, cancel the rest — one broken transport means
# the build is broken; no value in burning ~45 min finishing the others.
fail-fast: true
matrix:
include:
# launch: the primary lane, over the reusable AF_UNIX launcher transport.
# shm: launch + the POSIX shared-memory side channel. Rides the
# launcher, not raw subprocess, to avoid paying the
# fork-per-connection cost for the whole suite.
# http: the whole suite over the stateless HTTP transport.
- { lane: launch }
- { lane: shm, shm_bytes: '67108864' }
- { lane: http }
name: integration (${{ matrix.lane }})
steps:
- name: Checkout vgi-python
uses: actions/checkout@v7
- name: Checkout pinned vgi test suite
uses: actions/checkout@v7
with:
repository: Query-farm/vgi
ref: ${{ env.VGI_REF }}
path: vgi-upstream
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install uv
uses: astral-sh/setup-uv@v10.2.0
- name: Set up Python 3.14
run: uv python install 3.14
- name: Install dependencies (vgi + fixtures + all extras)
run: uv sync --all-extras --python 3.14
- name: Download the matching native integration runner
run: |
python3 "$VGI_SRC/scripts/ci_fetch_native_runner.py" \
--source "$VGI_SRC" --output "$RUNNER_TEMP/vgi-native"
env:
GH_TOKEN: ${{ github.token }}
VGI_SRC: ${{ github.workspace }}/vgi-upstream
- name: Run integration suite (${{ matrix.lane }})
run: ci/run-integration.sh
env:
VGI_SRC: ${{ github.workspace }}/vgi-upstream
TRANSPORT: ${{ matrix.lane }}
# Empty on every lane except shm; run-integration.sh drops an empty value.
VGI_RPC_SHM_SIZE_BYTES: ${{ matrix.shm_bytes || '' }}