refactor: switch transport from Parquet to Arrow IPC #130
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Checks | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: "*" | |
| merge_group: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| id-token: write | |
| pull-requests: write | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| LintPython: | |
| name: Python / Lint | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Install the project | |
| run: uv sync --locked --dev --no-install-project | |
| - name: Run ruff | |
| run: uv run ruff check | |
| TestJS: | |
| name: JS / Build + Test | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Build and test JS | |
| run: | | |
| cd packages/buckaroo-js-core | |
| pnpm install && pnpm run build | |
| pnpm run test | |
| BuildWheel: | |
| name: Build JS + Python Wheel | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Install the project | |
| run: uv sync --all-extras --dev | |
| - name: Patch version for TestPyPI | |
| if: github.event_name == 'pull_request' | |
| run: | | |
| BASE=$(grep -Po '^version = "\K[^"]+' pyproject.toml) | |
| DEV="${BASE}.dev${{ github.run_id }}" | |
| sed -i "s/^version = \".*\"/version = \"${DEV}\"/" pyproject.toml | |
| echo "Published version: ${DEV}" | |
| - name: Build JS extension + Python wheel | |
| run: ./scripts/full_build.sh | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| path: | | |
| ./dist | |
| ./buckaroo/static/ | |
| ./packages/buckaroo-js-core/dist/ | |
| ./packages/buckaroo-widget/dist/ | |
| PublishTestPyPI: | |
| name: Publish to TestPyPI | |
| if: >- | |
| github.event_name == 'pull_request' && | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 5 | |
| environment: testpypi | |
| permissions: | |
| id-token: write | |
| pull-requests: write | |
| steps: | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| path: artifacts | |
| - name: Publish to TestPyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| with: | |
| repository-url: https://test.pypi.org/legacy/ | |
| packages-dir: artifacts/dist/ | |
| - name: Comment on PR with install command | |
| uses: actions/github-script@v8 | |
| with: | |
| script: | | |
| const fs = require('fs'); | |
| const distFiles = fs.readdirSync('artifacts/dist'); | |
| const wheel = distFiles.find(f => f.endsWith('.whl')); | |
| const version = wheel.match(/buckaroo-(.+?)-/)[1]; | |
| const idx = `--index-strategy unsafe-best-match --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/`; | |
| const body = [ | |
| '## :package: TestPyPI package published', | |
| '', | |
| '```bash', | |
| `pip install ${idx} buckaroo==${version}`, | |
| '```', | |
| '', | |
| 'or with uv:', | |
| '', | |
| '```bash', | |
| `uv pip install ${idx} buckaroo==${version}`, | |
| '```', | |
| '', | |
| '### MCP server for Claude Code', | |
| '', | |
| '```bash', | |
| `claude mcp add buckaroo-table -- uvx --from "buckaroo[mcp]==${version}" ${idx} buckaroo-table`, | |
| '```', | |
| ].join('\n'); | |
| const { data: comments } = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| }); | |
| const marker = '## :package: TestPyPI package published'; | |
| const existing = comments.find(c => c.body.startsWith(marker)); | |
| if (existing) { | |
| await github.rest.issues.updateComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| comment_id: existing.id, | |
| body, | |
| }); | |
| } else { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| body, | |
| }); | |
| } | |
| TestMCPWheel: | |
| name: MCP / Integration (wheel) | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Install wheel with MCP extras | |
| run: | | |
| uv venv .venv-wheel | |
| WHEEL=$(ls dist/buckaroo-*.whl) | |
| uv pip install --python .venv-wheel/bin/python "${WHEEL}[mcp]" pytest | |
| - name: Verify entry point | |
| run: .venv-wheel/bin/buckaroo-table --help || true | |
| - name: Run MCP integration tests | |
| env: | |
| BUCKAROO_MCP_CMD: .venv-wheel/bin/buckaroo-table | |
| run: .venv-wheel/bin/pytest tests/unit/server/test_mcp_uvx_install.py -v --color=yes -m slow | |
| # --------------------------------------------------------------------------- | |
| # Smoke tests — install the wheel with each optional extra in an isolated venv | |
| # --------------------------------------------------------------------------- | |
| SmokeTestExtras: | |
| name: Smoke / Optional Extras | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Smoke test — base install | |
| run: | | |
| uv venv /tmp/smoke-base | |
| uv pip install --python /tmp/smoke-base dist/*.whl | |
| /tmp/smoke-base/bin/python scripts/smoke_test.py base | |
| - name: Smoke test — polars | |
| run: | | |
| uv venv /tmp/smoke-polars | |
| WHEEL=$(ls dist/*.whl) | |
| uv pip install --python /tmp/smoke-polars "${WHEEL}[polars]" | |
| /tmp/smoke-polars/bin/python scripts/smoke_test.py polars | |
| - name: Smoke test — mcp | |
| run: | | |
| uv venv /tmp/smoke-mcp | |
| WHEEL=$(ls dist/*.whl) | |
| uv pip install --python /tmp/smoke-mcp "${WHEEL}[mcp]" | |
| /tmp/smoke-mcp/bin/python scripts/smoke_test.py mcp | |
| - name: Smoke test — marimo | |
| run: | | |
| uv venv /tmp/smoke-marimo | |
| WHEEL=$(ls dist/*.whl) | |
| uv pip install --python /tmp/smoke-marimo "${WHEEL}[marimo]" | |
| /tmp/smoke-marimo/bin/python scripts/smoke_test.py marimo | |
| - name: Smoke test — jupyterlab | |
| run: | | |
| uv venv /tmp/smoke-jupyterlab | |
| WHEEL=$(ls dist/*.whl) | |
| uv pip install --python /tmp/smoke-jupyterlab "${WHEEL}[jupyterlab]" | |
| /tmp/smoke-jupyterlab/bin/python scripts/smoke_test.py jupyterlab | |
| - name: Smoke test — notebook | |
| run: | | |
| uv venv /tmp/smoke-notebook | |
| WHEEL=$(ls dist/*.whl) | |
| uv pip install --python /tmp/smoke-notebook "${WHEEL}[notebook]" | |
| /tmp/smoke-notebook/bin/python scripts/smoke_test.py notebook | |
| # --------------------------------------------------------------------------- | |
| # Source-level tests — operate on the codebase, no wheel needed | |
| # --------------------------------------------------------------------------- | |
| TestPython: | |
| name: Python / Test | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.11", "3.12", "3.13", "3.14"] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: ${{ matrix.python-version }} | |
| prune-cache: false | |
| - name: setup js files | |
| run: | | |
| mkdir buckaroo/static || true | |
| touch buckaroo/static/compiled.css | |
| touch buckaroo/static/widget.js | |
| touch buckaroo/static/widget.css | |
| - name: Install the project | |
| run: uv sync --all-extras --dev | |
| - name: Run tests | |
| run: uv run --with pytest-cov pytest ./tests/unit -m "not slow" --color=yes --cov anywidget --cov-report xml | |
| - uses: codecov/codecov-action@v5 | |
| TestPythonMaxVersions: | |
| name: Python / Test (Max Versions) | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.11", "3.12", "3.13", "3.14"] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: ${{ matrix.python-version }} | |
| prune-cache: false | |
| - name: setup js files | |
| run: | | |
| mkdir buckaroo/static || true | |
| touch buckaroo/static/compiled.css | |
| touch buckaroo/static/widget.js | |
| touch buckaroo/static/widget.css | |
| - name: Install the project with maximum versions | |
| run: | | |
| rm -f uv.lock | |
| cat >> pyproject.toml << 'PYEOF' | |
| [tool.uv] | |
| override-dependencies = ["pandas"] | |
| PYEOF | |
| uv sync --resolution=highest --all-extras --dev --no-group datacompy | |
| uv pip list | grep -i pandas | |
| - name: Run tests | |
| run: .venv/bin/python -m pytest ./tests/unit -m "not slow" --color=yes --cov anywidget --cov-report xml | |
| TestPythonWindows: | |
| name: Python / Test (Windows) | |
| runs-on: depot-windows-2025 | |
| timeout-minutes: 15 | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: setup js files | |
| shell: bash | |
| run: | | |
| mkdir -p buckaroo/static | |
| touch buckaroo/static/compiled.css | |
| touch buckaroo/static/widget.js | |
| touch buckaroo/static/widget.css | |
| - name: Install the project | |
| run: uv sync --all-extras --dev | |
| - name: Run tests | |
| run: uv run pytest ./tests/unit -m "not slow" --color=yes | |
| # --------------------------------------------------------------------------- | |
| # Integration tests — install the pre-built wheel, simulate end-user install | |
| # --------------------------------------------------------------------------- | |
| TestStorybook: | |
| name: Storybook Playwright Tests | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ hashFiles('packages/buckaroo-js-core/package.json') }} | |
| - name: Run Storybook Playwright Tests | |
| run: bash scripts/test_playwright_storybook.sh | |
| - name: Capture Theme Screenshots | |
| run: bash scripts/test_playwright_screenshots.sh | |
| - name: Upload Theme Screenshots | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: theme-screenshots | |
| path: packages/buckaroo-js-core/screenshots/ | |
| if-no-files-found: ignore | |
| TestServer: | |
| name: Server Playwright Tests | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ hashFiles('packages/buckaroo-js-core/package.json') }} | |
| - name: Run Server Playwright Tests | |
| run: bash scripts/test_playwright_server.sh | |
| TestMarimo: | |
| name: Marimo Playwright Tests | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 4 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Install the project | |
| run: uv sync --all-extras --dev | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ hashFiles('packages/buckaroo-js-core/package.json') }} | |
| - name: Run Marimo Playwright Tests | |
| run: bash scripts/test_playwright_marimo.sh | |
| TestWASMMarimo: | |
| name: WASM Marimo Playwright Tests | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 4 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Install the project | |
| run: uv sync --all-extras --dev | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ hashFiles('packages/buckaroo-js-core/package.json') }} | |
| - name: Run WASM Marimo Playwright Tests | |
| run: bash scripts/test_playwright_wasm_marimo.sh | |
| # --------------------------------------------------------------------------- | |
| # Docs — build documentation and check links | |
| # --------------------------------------------------------------------------- | |
| CheckDocs: | |
| name: Docs / Build + Check Links | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - uses: awalsh128/cache-apt-pkgs-action@latest | |
| with: | |
| packages: pandoc graphviz | |
| - name: Install the project | |
| run: uv sync --locked --all-extras --dev | |
| - name: Check docs build and links | |
| run: | | |
| mkdir -p buckaroo/static || true | |
| touch buckaroo/static/compiled.css | |
| touch buckaroo/static/widget.js | |
| touch buckaroo/static/widget.css | |
| mkdir -p docs/build/html | |
| uv run pytest --check-links docs/source/*.rst | |
| uv run pytest --check-links docs/example-notebooks/*.ipynb | |
| uv run sphinx-build -T -b html docs/source docs/build | |
| # --------------------------------------------------------------------------- | |
| # JupyterLab integration tests | |
| # --------------------------------------------------------------------------- | |
| TestJupyterLab: | |
| name: JupyterLab Playwright Tests | |
| needs: [BuildWheel] | |
| runs-on: depot-ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| python-version: "3.13" | |
| prune-cache: false | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 9.10.0 | |
| - name: Setup Node.js with pnpm cache | |
| uses: actions/setup-node@v6 | |
| with: | |
| cache: 'pnpm' | |
| cache-dependency-path: 'packages/pnpm-lock.yaml' | |
| - name: Install pnpm dependencies | |
| working-directory: packages | |
| run: pnpm install --frozen-lockfile | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: buckaroo-build | |
| - name: Install the project | |
| run: | | |
| uv sync --all-extras --dev | |
| uv pip install --force-reinstall dist/*.whl | |
| uv pip install polars jupyterlab | |
| - name: Cache Playwright browsers | |
| uses: actions/cache@v5 | |
| with: | |
| path: ~/.cache/ms-playwright | |
| key: playwright-${{ hashFiles('packages/buckaroo-js-core/package.json') }} | |
| - name: Run JupyterLab Playwright Tests | |
| run: bash scripts/test_playwright_jupyter.sh --venv-location=".venv" |