Republishes the upstream LiteLLM proxy
images with our pending upstream patches applied and the proprietary
enterprise/ code removed — nothing else. LiteLLM is MIT-licensed except
the enterprise components, whose license forbids redistribution without a
BerriAI subscription, so the published images contain MIT-licensed code only.
With an empty patch/ dir the output is a 1-to-1 copy of upstream minus
those enterprise components.
Two packages, mirroring the upstream image variants, tagged with the upstream
release (e.g. v1.94.0) plus latest:
| Package | Upstream base | Consumed by |
|---|---|---|
ghcr.io/amazeeio/litellm-lagoon-base |
ghcr.io/berriai/litellm |
litellm-lagoon (Lagoon / docker-compose) |
ghcr.io/amazeeio/litellm-lagoon-base-database |
ghcr.io/berriai/litellm-database |
litellm helm chart in amazeeai-k0rdent-catalog |
DockerfilestartsFROM ${LITELLM_IMAGE}:${LITELLM_VERSION}, removes the enterprise code (litellm-enterprisepackage +/app/enterprise— all litellm imports of it are ImportError-guarded and features are dormant withoutLITELLM_LICENSE, so nothing functional is lost), and applies everypatch/*.patchonto the installedlitellmsite-package withgit apply --include='litellm/*'(tests/UI-source paths in a patch are skipped — the images ship prebuilt UI assets). A finalimport litellm.proxy.proxy_serversmoke-checks the result..github/workflows/build.ymlruns once a day, resolves the latest stable (non-prerelease) LiteLLM release, and builds/pushes both variants if not already published. Pushes tomaintouchingDockerfileorpatch/republish the current version.workflow_dispatchaccepts an explicit version.- If a build fails (usually: patch no longer applies to a new release), a single message is posted to Slack — repeat failures stay quiet until a run succeeds again.
None. 0001-litellm-pr31618-budget-threshold-webhook-alerts.patch
(BerriAI/litellm#31618) was
dropped when it stopped applying to v1.94.0 — restore it from git history and
re-rebase (recipe below) if it's needed again before the PR merges upstream.
With an empty patch/ dir the builds publish unpatched copies of upstream
(still enterprise-stripped).
git clone --depth 1 --branch <version> --filter=blob:none --sparse https://github.com/BerriAI/litellm /tmp/litellm
cd /tmp/litellm && git sparse-checkout set litellm
gh pr diff <pr-number> --repo BerriAI/litellm > /tmp/pr.diff
git apply --include='litellm/*' /tmp/pr.diff # fix rejects by hand if any
git diff > <this-repo>/patch/0001-<short-name>.patchThe packages stay internal, so every pull needs auth against ghcr.io with
read:packages:
- Lagoon builds (litellm-lagoon):
.lagoon.ymldeclares acontainer-registriesentry for ghcr.io; create the referenced Lagoon variables (GHCR_USERNAME,GHCR_PULL_TOKEN— a fine-grained PAT or classic PAT withread:packages) on each project:lagoon add variable -p <project> -N GHCR_PULL_TOKEN -V <token> -S container_registry - Kubernetes / k0rdent: create a
kubernetes.io/dockerconfigjsonpull secret for ghcr.io in the target namespace and reference it via the chart'slitellm-helm.imagePullSecrets. - Local dev:
docker login ghcr.iowith your GitHub username + PAT.
- Grant the org-level
SLACK_BOT_TOKENsecret access to this repo (org settings → secrets → repository access), and set theSLACK_CHANNEL_IDrepository variable to the alerts channel ID. The Slack app must be a member of that channel.