|
|
|
name: Build, Publish LiteLLM Docker Image. New Release |
|
on: |
|
workflow_dispatch: |
|
inputs: |
|
tag: |
|
description: "The tag version you want to build" |
|
release_type: |
|
description: "The release type you want to build. Can be 'latest', 'stable', 'dev'" |
|
type: string |
|
default: "latest" |
|
commit_hash: |
|
description: "Commit hash" |
|
required: true |
|
|
|
|
|
env: |
|
REGISTRY: ghcr.io |
|
IMAGE_NAME: ${{ github.repository }} |
|
CHART_NAME: litellm-helm |
|
|
|
|
|
jobs: |
|
|
|
print: |
|
runs-on: ubuntu-latest |
|
steps: |
|
- run: | |
|
echo "Commit hash: ${{ github.event.inputs.commit_hash }}" |
|
echo "Tag: ${{ github.event.inputs.tag }}" |
|
echo "Release type: ${{ github.event.inputs.release_type }}" |
|
docker-hub-deploy: |
|
if: github.repository == 'BerriAI/litellm' |
|
runs-on: ubuntu-latest |
|
steps: |
|
- |
|
name: Checkout |
|
uses: actions/checkout@v4 |
|
with: |
|
ref: ${{ github.event.inputs.commit_hash }} |
|
- |
|
name: Set up QEMU |
|
uses: docker/setup-qemu-action@v3 |
|
- |
|
name: Set up Docker Buildx |
|
uses: docker/setup-buildx-action@v3 |
|
- |
|
name: Login to Docker Hub |
|
uses: docker/login-action@v3 |
|
with: |
|
username: ${{ secrets.DOCKERHUB_USERNAME }} |
|
password: ${{ secrets.DOCKERHUB_TOKEN }} |
|
- |
|
name: Build and push |
|
uses: docker/build-push-action@v5 |
|
with: |
|
context: . |
|
push: true |
|
tags: litellm/litellm:${{ github.event.inputs.tag || 'latest' }} |
|
- |
|
name: Build and push litellm-database image |
|
uses: docker/build-push-action@v5 |
|
with: |
|
context: . |
|
push: true |
|
file: ./docker/Dockerfile.database |
|
tags: litellm/litellm-database:${{ github.event.inputs.tag || 'latest' }} |
|
- |
|
name: Build and push litellm-spend-logs image |
|
uses: docker/build-push-action@v5 |
|
with: |
|
context: . |
|
push: true |
|
file: ./litellm-js/spend-logs/Dockerfile |
|
tags: litellm/litellm-spend_logs:${{ github.event.inputs.tag || 'latest' }} |
|
|
|
build-and-push-image: |
|
runs-on: ubuntu-latest |
|
|
|
permissions: |
|
contents: read |
|
packages: write |
|
|
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
ref: ${{ github.event.inputs.commit_hash }} |
|
|
|
- name: Log in to the Container registry |
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 |
|
with: |
|
registry: ${{ env.REGISTRY }} |
|
username: ${{ github.actor }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
|
|
- name: Extract metadata (tags, labels) for Docker |
|
id: meta |
|
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 |
|
with: |
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} |
|
|
|
- name: Set up QEMU |
|
uses: docker/setup-qemu-action@e0e4588fad221d38ee467c0bffd91115366dc0c5 |
|
- name: Set up Docker Buildx |
|
uses: docker/setup-buildx-action@edfb0fe6204400c56fbfd3feba3fe9ad1adfa345 |
|
|
|
|
|
|
|
- name: Build and push Docker image |
|
uses: docker/build-push-action@4976231911ebf5f32aad765192d35f942aa48cb8 |
|
with: |
|
context: . |
|
push: true |
|
tags: ${{ steps.meta.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta.outputs.tags }}-${{ github.event.inputs.release_type }} |
|
labels: ${{ steps.meta.outputs.labels }} |
|
platforms: local,linux/amd64,linux/arm64,linux/arm64/v8 |
|
|
|
build-and-push-image-database: |
|
runs-on: ubuntu-latest |
|
permissions: |
|
contents: read |
|
packages: write |
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
ref: ${{ github.event.inputs.commit_hash }} |
|
|
|
- name: Log in to the Container registry |
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 |
|
with: |
|
registry: ${{ env.REGISTRY }} |
|
username: ${{ github.actor }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
|
|
- name: Extract metadata (tags, labels) for database Dockerfile |
|
id: meta-database |
|
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 |
|
with: |
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-database |
|
|
|
- name: Set up QEMU |
|
uses: docker/setup-qemu-action@e0e4588fad221d38ee467c0bffd91115366dc0c5 |
|
- name: Set up Docker Buildx |
|
uses: docker/setup-buildx-action@edfb0fe6204400c56fbfd3feba3fe9ad1adfa345 |
|
|
|
- name: Build and push Database Docker image |
|
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 |
|
with: |
|
context: . |
|
file: ./docker/Dockerfile.database |
|
push: true |
|
tags: ${{ steps.meta-database.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta-database.outputs.tags }}-${{ github.event.inputs.release_type }} |
|
labels: ${{ steps.meta-database.outputs.labels }} |
|
platforms: local,linux/amd64,linux/arm64,linux/arm64/v8 |
|
|
|
build-and-push-image-non_root: |
|
runs-on: ubuntu-latest |
|
permissions: |
|
contents: read |
|
packages: write |
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
ref: ${{ github.event.inputs.commit_hash }} |
|
|
|
- name: Log in to the Container registry |
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 |
|
with: |
|
registry: ${{ env.REGISTRY }} |
|
username: ${{ github.actor }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
|
|
- name: Extract metadata (tags, labels) for non_root Dockerfile |
|
id: meta-non_root |
|
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 |
|
with: |
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-non_root |
|
|
|
- name: Set up QEMU |
|
uses: docker/setup-qemu-action@e0e4588fad221d38ee467c0bffd91115366dc0c5 |
|
- name: Set up Docker Buildx |
|
uses: docker/setup-buildx-action@edfb0fe6204400c56fbfd3feba3fe9ad1adfa345 |
|
|
|
- name: Build and push non_root Docker image |
|
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 |
|
with: |
|
context: . |
|
file: ./docker/Dockerfile.non_root |
|
push: true |
|
tags: ${{ steps.meta-non_root.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta-non_root.outputs.tags }}-${{ github.event.inputs.release_type }} |
|
labels: ${{ steps.meta-non_root.outputs.labels }} |
|
platforms: local,linux/amd64,linux/arm64,linux/arm64/v8 |
|
|
|
build-and-push-image-spend-logs: |
|
runs-on: ubuntu-latest |
|
permissions: |
|
contents: read |
|
packages: write |
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
ref: ${{ github.event.inputs.commit_hash }} |
|
|
|
- name: Log in to the Container registry |
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 |
|
with: |
|
registry: ${{ env.REGISTRY }} |
|
username: ${{ github.actor }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
|
|
- name: Extract metadata (tags, labels) for spend-logs Dockerfile |
|
id: meta-spend-logs |
|
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 |
|
with: |
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-spend_logs |
|
|
|
- name: Set up QEMU |
|
uses: docker/setup-qemu-action@e0e4588fad221d38ee467c0bffd91115366dc0c5 |
|
- name: Set up Docker Buildx |
|
uses: docker/setup-buildx-action@edfb0fe6204400c56fbfd3feba3fe9ad1adfa345 |
|
|
|
- name: Build and push Database Docker image |
|
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 |
|
with: |
|
context: . |
|
file: ./litellm-js/spend-logs/Dockerfile |
|
push: true |
|
tags: ${{ steps.meta-spend-logs.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta-spend-logs.outputs.tags }}-${{ github.event.inputs.release_type }} |
|
platforms: local,linux/amd64,linux/arm64,linux/arm64/v8 |
|
|
|
build-and-push-helm-chart: |
|
if: github.event.inputs.release_type != 'dev' |
|
needs: [docker-hub-deploy, build-and-push-image, build-and-push-image-database] |
|
runs-on: ubuntu-latest |
|
steps: |
|
- name: Checkout repository |
|
uses: actions/checkout@v4 |
|
with: |
|
fetch-depth: 0 |
|
|
|
- name: Log in to the Container registry |
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 |
|
with: |
|
registry: ${{ env.REGISTRY }} |
|
username: ${{ github.actor }} |
|
password: ${{ secrets.GITHUB_TOKEN }} |
|
|
|
- name: lowercase github.repository_owner |
|
run: | |
|
echo "REPO_OWNER=`echo ${{github.repository_owner}} | tr '[:upper:]' '[:lower:]'`" >>${GITHUB_ENV} |
|
|
|
- name: Get LiteLLM Latest Tag |
|
id: current_app_tag |
|
shell: bash |
|
run: | |
|
LATEST_TAG=$(git describe --tags --exclude "*dev*" --abbrev=0) |
|
if [ -z "${LATEST_TAG}" ]; then |
|
echo "latest_tag=latest" | tee -a $GITHUB_OUTPUT |
|
else |
|
echo "latest_tag=${LATEST_TAG}" | tee -a $GITHUB_OUTPUT |
|
fi |
|
|
|
- name: Get last published chart version |
|
id: current_version |
|
shell: bash |
|
run: | |
|
CHART_LIST=$(helm show chart oci://${{ env.REGISTRY }}/${{ env.REPO_OWNER }}/${{ env.CHART_NAME }} 2>/dev/null || true) |
|
if [ -z "${CHART_LIST}" ]; then |
|
echo "current-version=0.1.0" | tee -a $GITHUB_OUTPUT |
|
else |
|
printf '%s' "${CHART_LIST}" | grep '^version:' | awk 'BEGIN{FS=":"}{print "current-version="$2}' | tr -d " " | tee -a $GITHUB_OUTPUT |
|
fi |
|
env: |
|
HELM_EXPERIMENTAL_OCI: '1' |
|
|
|
|
|
- name: Bump release version |
|
id: bump_version |
|
uses: christian-draeger/[email protected] |
|
with: |
|
current-version: ${{ steps.current_version.outputs.current-version || '0.1.0' }} |
|
version-fragment: 'bug' |
|
|
|
- uses: ./.github/actions/helm-oci-chart-releaser |
|
with: |
|
name: ${{ env.CHART_NAME }} |
|
repository: ${{ env.REPO_OWNER }} |
|
tag: ${{ github.event.inputs.chartVersion || steps.bump_version.outputs.next-version || '0.1.0' }} |
|
app_version: ${{ steps.current_app_tag.outputs.latest_tag }} |
|
path: deploy/charts/${{ env.CHART_NAME }} |
|
registry: ${{ env.REGISTRY }} |
|
registry_username: ${{ github.actor }} |
|
registry_password: ${{ secrets.GITHUB_TOKEN }} |
|
update_dependencies: true |
|
|
|
release: |
|
name: "New LiteLLM Release" |
|
needs: [docker-hub-deploy, build-and-push-image, build-and-push-image-database] |
|
|
|
runs-on: "ubuntu-latest" |
|
|
|
steps: |
|
- name: Display version |
|
run: echo "Current version is ${{ github.event.inputs.tag }}" |
|
- name: "Set Release Tag" |
|
run: echo "RELEASE_TAG=${{ github.event.inputs.tag }}" >> $GITHUB_ENV |
|
- name: Display release tag |
|
run: echo "RELEASE_TAG is $RELEASE_TAG" |
|
- name: "Create release" |
|
uses: "actions/github-script@v6" |
|
with: |
|
github-token: "${{ secrets.GITHUB_TOKEN }}" |
|
script: | |
|
const commitHash = "${{ github.event.inputs.commit_hash}}"; |
|
console.log("Commit Hash:", commitHash); // Add this line for debugging |
|
try { |
|
const response = await github.rest.repos.createRelease({ |
|
draft: false, |
|
generate_release_notes: true, |
|
target_commitish: commitHash, |
|
name: process.env.RELEASE_TAG, |
|
owner: context.repo.owner, |
|
prerelease: false, |
|
repo: context.repo.repo, |
|
tag_name: process.env.RELEASE_TAG, |
|
}); |
|
|
|
core.exportVariable('RELEASE_ID', response.data.id); |
|
core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url); |
|
} catch (error) { |
|
core.setFailed(error.message); |
|
} |
|
- name: Fetch Release Notes |
|
id: release-notes |
|
uses: actions/github-script@v6 |
|
with: |
|
github-token: "${{ secrets.GITHUB_TOKEN }}" |
|
script: | |
|
try { |
|
const response = await github.rest.repos.getRelease({ |
|
owner: context.repo.owner, |
|
repo: context.repo.repo, |
|
release_id: process.env.RELEASE_ID, |
|
}); |
|
const formattedBody = JSON.stringify(response.data.body).slice(1, -1); |
|
return formattedBody; |
|
} catch (error) { |
|
core.setFailed(error.message); |
|
} |
|
env: |
|
RELEASE_ID: ${{ env.RELEASE_ID }} |
|
- name: Github Releases To Discord |
|
env: |
|
WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }} |
|
REALEASE_TAG: ${{ env.RELEASE_TAG }} |
|
RELEASE_NOTES: ${{ steps.release-notes.outputs.result }} |
|
run: | |
|
curl -H "Content-Type: application/json" -X POST -d '{ |
|
"content": "New LiteLLM release '"${RELEASE_TAG}"'", |
|
"username": "Release Changelog", |
|
"avatar_url": "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png", |
|
"embeds": [ |
|
{ |
|
"title": "Changelog for LiteLLM '"${RELEASE_TAG}"'", |
|
"description": "'"${RELEASE_NOTES}"'", |
|
"color": 2105893 |
|
} |
|
] |
|
}' $WEBHOOK_URL |
|
|
|
|