| name: Release Docker Images |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| on: |
| push: |
| tags: |
| - "v[0-9]+.*" |
| workflow_dispatch: |
| inputs: |
| version: |
| description: "Version to build (without v prefix, e.g., 0.5.7)" |
| required: true |
|
|
| jobs: |
| publish-x86: |
| if: github.repository == 'sgl-project/sglang' |
| environment: "prod" |
| strategy: |
| matrix: |
| variant: |
| - cuda_version: "12.9.1" |
| build_type: "all" |
| grace_blackwell: 0 |
| runs-on: x64-docker-build-node |
| 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: false |
| docker-images: false |
| android: true |
| dotnet: true |
| haskell: true |
| large-packages: true |
| swap-storage: false |
|
|
| - 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: Get version from tag |
| id: version |
| run: | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then |
| VERSION="${{ github.event.inputs.version }}" |
| else |
| # Extract version from tag (e.g., v0.5.7 -> 0.5.7) |
| VERSION="${GITHUB_REF_NAME#v}" |
| fi |
| |
| |
| if [ -z "$VERSION" ]; then |
| echo "::error::Version is empty" |
| exit 1 |
| fi |
| if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+'; then |
| echo "::error::Invalid version format: $VERSION (expected: X.Y.Z)" |
| exit 1 |
| fi |
|
|
| echo "version=${VERSION}" >> $GITHUB_OUTPUT |
|
|
| - name: Build AMD64 Framework |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu129-amd64 |
| |
| docker buildx build \ |
| --target framework \ |
| --platform linux/amd64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=${{ matrix.variant.cuda_version }} \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg GRACE_BLACKWELL=${{ matrix.variant.grace_blackwell }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| - name: Build and Push AMD64 Runtime |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu129-amd64-runtime |
| |
| docker buildx build \ |
| --target runtime \ |
| --platform linux/amd64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=${{ matrix.variant.cuda_version }} \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg GRACE_BLACKWELL=${{ matrix.variant.grace_blackwell }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| - name: Build and Push AMD64 Framework (CUDA 13) |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu130-amd64 |
| |
| docker buildx build \ |
| --target framework \ |
| --platform linux/amd64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=13.0.1 \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg GRACE_BLACKWELL=0 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| - name: Build and Push AMD64 Runtime (CUDA 13) |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu130-amd64-runtime |
| |
| docker buildx build \ |
| --target runtime \ |
| --platform linux/amd64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=13.0.1 \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg GRACE_BLACKWELL=0 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| publish-arm64: |
| if: github.repository == 'sgl-project/sglang' |
| environment: "prod" |
| strategy: |
| matrix: |
| variant: |
| - cuda_version: "12.9.1" |
| build_type: "all" |
| grace_blackwell: 1 |
| runs-on: arm-docker-build-node |
| steps: |
| - name: Delete huge unnecessary tools folder |
| run: rm -rf /opt/hostedtoolcache |
|
|
| - name: Checkout repository |
| uses: actions/checkout@v4 |
|
|
| - 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: Get version from tag |
| id: version |
| run: | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then |
| VERSION="${{ github.event.inputs.version }}" |
| else |
| # Extract version from tag (e.g., v0.5.7 -> 0.5.7) |
| VERSION="${GITHUB_REF_NAME#v}" |
| fi |
| |
| |
| if [ -z "$VERSION" ]; then |
| echo "::error::Version is empty" |
| exit 1 |
| fi |
| if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+'; then |
| echo "::error::Invalid version format: $VERSION (expected: X.Y.Z)" |
| exit 1 |
| fi |
|
|
| echo "version=${VERSION}" >> $GITHUB_OUTPUT |
|
|
| - name: Build ARM64 Framework |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu129-arm64 |
| |
| docker buildx build \ |
| --target framework \ |
| --platform linux/arm64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=${{ matrix.variant.cuda_version }} \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg GRACE_BLACKWELL=${{ matrix.variant.grace_blackwell }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| - name: Build and Push ARM64 Runtime |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu129-arm64-runtime |
| |
| docker buildx build \ |
| --target runtime \ |
| --platform linux/arm64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=${{ matrix.variant.cuda_version }} \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg GRACE_BLACKWELL=${{ matrix.variant.grace_blackwell }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| - name: Build and Push ARM64 Framework (CUDA 13) |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu130-arm64 |
| |
| docker buildx build \ |
| --target framework \ |
| --platform linux/arm64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=13.0.1 \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg INSTALL_FLASHINFER_JIT_CACHE=1 \ |
| --build-arg GRACE_BLACKWELL=1 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| - name: Build and Push ARM64 Runtime (CUDA 13) |
| run: | |
| version=${{ steps.version.outputs.version }} |
| tag=v${version}-cu130-arm64-runtime |
| |
| docker buildx build \ |
| --target runtime \ |
| --platform linux/arm64 \ |
| --push \ |
| -f docker/Dockerfile \ |
| --build-arg CUDA_VERSION=13.0.1 \ |
| --build-arg BUILD_TYPE=${{ matrix.variant.build_type }} \ |
| --build-arg GRACE_BLACKWELL=1 \ |
| --build-arg SGL_VERSION=${version} \ |
| -t lmsysorg/sglang:${tag} \ |
| --no-cache \ |
| . |
|
|
| create-manifests: |
| runs-on: ubuntu-22.04 |
| needs: [publish-x86, publish-arm64] |
| if: github.repository == 'sgl-project/sglang' |
| environment: "prod" |
| steps: |
| - name: Checkout repository |
| uses: actions/checkout@v4 |
|
|
| - 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: Get version from tag |
| id: version |
| run: | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then |
| VERSION="${{ github.event.inputs.version }}" |
| else |
| # Extract version from tag (e.g., v0.5.7 -> 0.5.7) |
| VERSION="${GITHUB_REF_NAME#v}" |
| fi |
| |
| |
| if [ -z "$VERSION" ]; then |
| echo "::error::Version is empty" |
| exit 1 |
| fi |
| if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+'; then |
| echo "::error::Invalid version format: $VERSION (expected: X.Y.Z)" |
| exit 1 |
| fi |
|
|
| echo "version=${VERSION}" >> $GITHUB_OUTPUT |
|
|
| - name: Create multi-arch manifests |
| run: | |
| version=${{ steps.version.outputs.version }} |
| |
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:v${version} \ |
| lmsysorg/sglang:v${version}-cu129-amd64 \ |
| lmsysorg/sglang:v${version}-cu129-arm64 |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:latest \ |
| lmsysorg/sglang:v${version}-cu129-amd64 \ |
| lmsysorg/sglang:v${version}-cu129-arm64 |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:v${version}-runtime \ |
| lmsysorg/sglang:v${version}-cu129-amd64-runtime \ |
| lmsysorg/sglang:v${version}-cu129-arm64-runtime |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:latest-runtime \ |
| lmsysorg/sglang:v${version}-cu129-amd64-runtime \ |
| lmsysorg/sglang:v${version}-cu129-arm64-runtime |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:v${version}-cu130 \ |
| lmsysorg/sglang:v${version}-cu130-amd64 \ |
| lmsysorg/sglang:v${version}-cu130-arm64 |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:latest-cu130 \ |
| lmsysorg/sglang:v${version}-cu130-amd64 \ |
| lmsysorg/sglang:v${version}-cu130-arm64 |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:v${version}-cu130-runtime \ |
| lmsysorg/sglang:v${version}-cu130-amd64-runtime \ |
| lmsysorg/sglang:v${version}-cu130-arm64-runtime |
|
|
| |
| docker buildx imagetools create \ |
| -t lmsysorg/sglang:latest-cu130-runtime \ |
| lmsysorg/sglang:v${version}-cu130-amd64-runtime \ |
| lmsysorg/sglang:v${version}-cu130-arm64-runtime |
|
|