Skip to content

chore(deps): bump httpx2 from 2.7.0 to 2.12.0 #690

chore(deps): bump httpx2 from 2.7.0 to 2.12.0

chore(deps): bump httpx2 from 2.7.0 to 2.12.0 #690

name: Otari OSS Edition
# The gate behind ARCHITECTURE.md's central promise: every milestone ships a
# standalone OSS edition. It builds the distribution, boots it with only Otari's
# own adapters bound (no overlay bootstrap, no platform token), and runs the
# smoke suite in scripts/oss_edition_smoke.py, which walks a self-hoster's day
# one: health probes, an admin user and API key, a BYO provider credential stored
# at runtime, a routing policy, one fallback-routed completion, and the usage row
# it wrote.
#
# Two things here are deliberate and worth keeping.
#
# The environment is runtime-only (`uv sync --frozen --no-dev`), and the smoke
# script imports nothing but the standard library. A dependency that reached an
# OSS code path from the dev group, or from an enterprise-only package, fails
# here rather than passing on a machine that happens to have it installed. That
# is also why the boot goes through the installed `otari` CLI as a subprocess: a
# TestClient would prove the app imports, not that the edition starts.
#
# It runs against PostgreSQL, which is what a real deployment uses, so a
# migration that only works on SQLite fails this gate too.
#
# Related jobs, kept separate on purpose: otari-tests.yml exercises behavior
# in-process, otari-docker-build.yml proves the image recipe builds and the
# container answers its health endpoints. Neither boots the packaged OSS edition
# and serves a request through it.
#
# Path-filtered to the inputs that can change what boots: the app, the migrations
# the boot runs (alembic.ini included, since `otari migrate` shells out to the
# alembic CLI, which reads it), dependency resolution, and the gate itself. A PR
# that touches none of them cannot fail this, so it is not run on one. That also
# keeps the job off the critical path of docs-only and web/-only PRs, which is
# why it is not wired up as a required status check.
on:
push:
branches: [ main, develop ]
paths:
- 'src/gateway/**'
- 'alembic/**'
- 'alembic.ini'
- 'scripts/oss_edition_smoke.py'
- 'pyproject.toml'
- 'uv.lock'
- '.github/workflows/otari-oss-edition.yml'
pull_request:
branches: [ main ]
paths:
- 'src/gateway/**'
- 'alembic/**'
- 'alembic.ini'
- 'scripts/oss_edition_smoke.py'
- 'pyproject.toml'
- 'uv.lock'
- '.github/workflows/otari-oss-edition.yml'
workflow_dispatch:
jobs:
oss-edition:
runs-on: ubuntu-latest
permissions:
contents: read
services:
postgres:
image: postgres:17-alpine
env:
POSTGRES_USER: otari
POSTGRES_PASSWORD: otari
POSTGRES_DB: otari
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U otari"
--health-interval 5s
--health-timeout 5s
--health-retries 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
with:
python-version: "3.14"
# The build half of the gate: a broken packaging recipe (a module outside the
# discovered packages, an unsatisfiable pin) is invisible until someone tries
# to ship the OSS edition, and otari-docker.yml only finds it after merge.
#
# The artifacts are proof that the recipe works, and are deliberately not what
# gets booted below. A wheel install cannot migrate: alembic/ is not package
# data, and _run_migrations resolves it relative to the package
# (src/gateway/core/database.py), which only lands next to it in a source
# layout. The published image is that source layout (`uv sync` over COPY src,
# plus COPY alembic), so booting the same way is what makes this gate resemble
# the deployment rather than a distribution nobody ships.
- name: Build the OSS distribution
run: uv build
# Runtime dependencies only, no dev group: that is what lets the smoke detect
# a dev-only or enterprise-only import on an OSS path.
- name: Install the OSS edition
run: uv sync --frozen --no-dev
- name: Boot the OSS edition and smoke it
run: >-
uv run --frozen --no-dev python scripts/oss_edition_smoke.py
--database-url postgresql://otari:otari@127.0.0.1:5432/otari