infino 0.5.6

A fast retrieval engine that stores data on object storage and runs SQL, full-text search, and vector search over it from a single system — search-on-Parquet.
Documentation
name: Benchmark

# Informational benchmark, never blocks merge. Each PR is benchmarked A/B on
# one VM: the PR ref and base `main` are built and run side by side and the PR
# is compared against that same-host main arm (see supertable-bench-azure.yml).
# Uses `pull_request_target` (not `pull_request`) so the job runs in the
# base-repo context where the Azure secrets live — a fork `pull_request` run
# gets none. Fork code is gated on maintainer approval before secrets are
# exposed (see `is_fork_pr`).
on:
  push:
    branches: [main]
    # Only refresh the baseline when perf-relevant code lands. Doc/example/
    # binding-only merges can't move performance, so skip the VM spin-up.
    # (GitHub Actions ignores YAML anchors, so the list is repeated below.)
    paths:
      - "src/**"
      - "benches/**"
      - "build.rs"
      - "Cargo.toml"
      - "Cargo.lock"
      - "rust-toolchain.toml"
      - ".github/workflows/bench.yml"
      - ".github/workflows/supertable-bench-azure.yml"
  pull_request_target:
    branches: [main]
    # Code/state changes only — never on label or comment activity.
    types: [opened, synchronize, reopened]
    # Same allowlist: skip the 4-VM bench on doc/example/binding-only PRs.
    paths:
      - "src/**"
      - "benches/**"
      - "build.rs"
      - "Cargo.toml"
      - "Cargo.lock"
      - "rust-toolchain.toml"
      - ".github/workflows/bench.yml"
      - ".github/workflows/supertable-bench-azure.yml"

jobs:
  bench:
    # Skip on forks (no Azure secrets); fork PRs into upstream still run.
    if: github.repository_owner == 'infino-ai'
    strategy:
      fail-fast: false # one member failing must not cancel the other
      matrix:
        # One modality per leg, each on its own VM. `suffix` keeps per-leg
        # resources and comment markers unique (all legs share one run_id).
        include:
          - { bench: superfile,         docs: "1000000", suffix: sf }
          - { bench: supertable_fts,    docs: "1000000", suffix: st-fts }
          - { bench: supertable_vector, docs: "1000000", suffix: st-vec }
          # Non-cosine (L2) leg: exercises the Sq16Adaptive default codec
          # (the cosine leg above stays on the fixed-grid Sq16).
          - { bench: supertable_vector, docs: "1000000", suffix: st-vec-l2, metric: l2sq }
          - { bench: supertable_sql,    docs: "1000000", suffix: st-sql }
    # A new push to the PR cancels the in-flight run for that bench.
    # Keyed on the SUFFIX, not the bench name: the two vector cells
    # (cosine st-vec and l2sq st-vec-l2) share `matrix.bench`, and a
    # bench-keyed group made them cancel each other on every run.
    concurrency:
      group: bench-${{ github.event.pull_request.number }}-${{ matrix.suffix }}
      cancel-in-progress: true
    permissions:
      id-token: write
      contents: read
      # Kept so summary_destination=pr_comment stays usable; PR runs default to
      # step_summary, so this path is exercised only by a manual dispatch.
      pull-requests: write
    uses: ./.github/workflows/supertable-bench-azure.yml
    with:
      bench: ${{ matrix.bench }}
      docs: ${{ matrix.docs }}
      metric: ${{ matrix.metric }}
      ref: ${{ github.event.pull_request.head.sha }}
      name_suffix: -${{ matrix.suffix }}
      pr_number: ${{ github.event.pull_request.number }}
      # Fork PR ⇒ gate on maintainer approval before secrets are exposed.
      # Guard on the event: a push has no pull_request context, so the bare
      # inequality would treat every push as a fork and route it to the
      # approval-gated environment, leaving baseline runs stuck awaiting review.
      is_fork_pr: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository }}
    secrets: inherit