mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-13 23:11:40 +00:00
The gate previously measured whatever environment the caller happened to have. Locally that is the fat bootstrap venv (--extra proxy pulls in fastapi-sso, whose type info flips a reportUnnecessaryIsInstance diagnostic in ui_sso.py), while CI's publisher venv only has the proxy-dev and e2e-dev groups, so identical trees measured 866 locally vs 865 in CI and every local gate run breached by a phantom +1 scripts/type_check_gate.py now provisions .venv-typecheck itself: a frozen uv sync of the canonical proxy-dev and e2e-dev groups, the interpreter pinned to pyrightconfig.json's pythonVersion, plus the generated Prisma client. Every measurement pass is pinned to that env with --pythonpath, because basedpyright auto-detects a .venv in the project root and that auto-detection beats both PATH order and VIRTUAL_ENV, so the CLI flag is the only pin that actually works. The dependency-group set is folded into the environment fingerprint, so artifacts or caches recorded under a different group set never match and the gate falls back to computing base counts locally instead of comparing mismatched environments The publisher workflow drops its own install and prisma steps and lets the script build the measurement env, and the node heap for the full-tree pass drops from 12GB to 8GB (peak RSS measured at 5.4GB)
62 lines
2.2 KiB
YAML
62 lines
2.2 KiB
YAML
name: Publish basedpyright base counts
|
|
|
|
# Every commit on litellm_internal_staging is some branch's future merge-base.
|
|
# Publishing its per-rule basedpyright counts as an artifact lets
|
|
# scripts/type_check_gate.py download them in seconds instead of paying a
|
|
# 60-110s second basedpyright pass on every fresh worktree or moved merge-base.
|
|
# No concurrency group on purpose: runs must never cancel each other, because
|
|
# every sha's artifact matters (any of them can become a merge-base).
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- litellm_internal_staging
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: "Ref to compute and publish base counts for"
|
|
required: false
|
|
default: litellm_internal_staging
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
publish:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 20
|
|
|
|
steps:
|
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
with:
|
|
ref: ${{ inputs.ref || github.sha }}
|
|
clean: true
|
|
persist-credentials: false
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Set up uv
|
|
uses: ./.github/actions/setup-uv-with-retries
|
|
with:
|
|
version: "0.10.9"
|
|
|
|
# The gate provisions its own measurement env (.venv-typecheck: a frozen
|
|
# uv sync of its canonical dependency groups plus a generated Prisma
|
|
# client), so no install step here can drift from what local runs measure.
|
|
- name: Emit basedpyright counts for HEAD
|
|
env:
|
|
PRISMA_BINARY_CACHE_DIR: ${{ runner.temp }}/prisma-cache
|
|
run: |
|
|
python scripts/type_check_gate.py --emit-counts-dir "$RUNNER_TEMP/basedpyright-counts"
|
|
counts_file=$(ls "$RUNNER_TEMP"/basedpyright-counts/basedpyright-counts-*.json)
|
|
echo "COUNTS_ARTIFACT_NAME=$(basename "$counts_file" .json)" >> "$GITHUB_ENV"
|
|
|
|
- name: Upload counts artifact
|
|
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
|
|
with:
|
|
name: ${{ env.COUNTS_ARTIFACT_NAME }}
|
|
path: ${{ runner.temp }}/basedpyright-counts/
|
|
if-no-files-found: error
|