111 lines
4.1 KiB
YAML
111 lines
4.1 KiB
YAML
name: Build and Push Development Docker Images
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: "0 0 * * *"
|
|
|
|
jobs:
|
|
build-dev:
|
|
if: ${{ github.repository == 'sgl-project/sglang' }}
|
|
runs-on: ${{ matrix.runner }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- runner: x64-docker-build-node
|
|
platform: linux/amd64
|
|
build_type: all
|
|
grace_blackwell: 0
|
|
tag: dev-x86
|
|
version: 12.9.1
|
|
- runner: arm-docker-build-node
|
|
platform: linux/arm64
|
|
build_type: all
|
|
grace_blackwell: 1
|
|
tag: dev-arm64
|
|
version: 12.9.1
|
|
steps:
|
|
- name: Delete huge unnecessary tools folder
|
|
run: rm -rf /opt/hostedtoolcache
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Free disk space
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
tool-cache: true
|
|
docker-images: true
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
large-packages: true
|
|
swap-storage: true
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to Docker Hub
|
|
uses: docker/login-action@v2
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
|
|
- name: Build and Push Dev Image
|
|
run: |
|
|
docker buildx build --platform ${{ matrix.platform }} --push -f docker/Dockerfile --build-arg CUDA_VERSION=${{ matrix.version }} --build-arg BUILD_TYPE=${{ matrix.build_type }} --build-arg GRACE_BLACKWELL=${{ matrix.grace_blackwell }} --build-arg CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) -t lmsysorg/sglang:${{ matrix.tag }} --no-cache .
|
|
|
|
create-manifests:
|
|
runs-on: ubuntu-22.04
|
|
needs: [build-dev]
|
|
if: ${{ github.repository == 'sgl-project/sglang' }}
|
|
strategy:
|
|
matrix:
|
|
variant:
|
|
- tag: dev
|
|
x86_tag: dev-x86
|
|
arm64_tag: dev-arm64
|
|
steps:
|
|
- uses: docker/setup-buildx-action@v3
|
|
|
|
- uses: docker/login-action@v2
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
- run: |
|
|
SHORT_SHA="${{ github.sha }}"
|
|
docker buildx imagetools create \
|
|
-t lmsysorg/sglang:${{ matrix.variant.tag }} \
|
|
-t lmsysorg/sglang:nightly-${{ matrix.variant.tag }}-$(date +%Y%m%d)-${SHORT_SHA:0:8} \
|
|
lmsysorg/sglang:${{ matrix.variant.x86_tag }} \
|
|
lmsysorg/sglang:${{ matrix.variant.arm64_tag }}
|
|
|
|
- name: Cleanup Old Nightly Builds
|
|
run: |
|
|
# Get JWT token for Docker Hub API
|
|
TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "${{ secrets.DOCKERHUB_USERNAME }}", "password": "${{ secrets.DOCKERHUB_TOKEN }}"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
|
|
|
|
# Get all tags for the repository
|
|
TAGS_RESPONSE=$(curl -s -H "Authorization: JWT $TOKEN" "https://hub.docker.com/v2/repositories/lmsysorg/sglang/tags/?page_size=100")
|
|
|
|
# Extract tags that match our pattern and sort by last_updated timestamp (most recent first)
|
|
TAGS=$(echo "$TAGS_RESPONSE" | jq -r '.results[] | select(.name | startswith("nightly-${{ matrix.variant.tag }}-")) | "\(.last_updated)|\(.name)"' | sort -r | cut -d'|' -f2)
|
|
|
|
# Count total tags and keep only the 14 most recent
|
|
TAG_COUNT=$(echo "$TAGS" | wc -l)
|
|
if [ "$TAG_COUNT" -gt 14 ]; then
|
|
echo "Found $TAG_COUNT nightly builds, keeping only the 14 most recent"
|
|
TAGS_TO_DELETE=$(echo "$TAGS" | tail -n +15)
|
|
echo "Tags to delete: $TAGS_TO_DELETE"
|
|
|
|
# Delete old tags
|
|
for tag in $TAGS_TO_DELETE; do
|
|
echo "Deleting tag: $tag"
|
|
curl -X DELETE \
|
|
-H "Authorization: JWT $TOKEN" \
|
|
"https://hub.docker.com/v2/repositories/lmsysorg/sglang/tags/$tag/"
|
|
done
|
|
else
|
|
echo "Only $TAG_COUNT nightly builds found, no cleanup needed"
|
|
fi
|