@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 6910b56da2
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 14, 05:30 UTC

[CI] Add nightly multiarch manifests to dockerhub (#24102)

Signed-off-by: Sahithi Chigurupati <chigurupati.sahithi@gmail.com> Signed-off-by: Simon Mo <simon.mo@hey.com> Signed-off-by: simon-mo <simon.mo@hey.com> Co-authored-by: Simon Mo <simon.mo@hey.com>

Sahithi Chigurupati committed Sep 8, 2025 at 18:18 UTC 6910b56da2226f88dd5b825ae57af8dea4e1ac47
2 files changed +119
.buildkite/release-pipeline.yaml
+22
@@ -149,3 +149,25 @@ steps:
149 - "docker push public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:$(buildkite-agent meta-data get release-version)"
150 env:
151 DOCKER_BUILDKIT: "1"
152 +
153 + - label: "Build and publish nightly multi-arch image to DockerHub"
154 + depends_on:
155 + - create-multi-arch-manifest
156 + if: build.env("NIGHTLY") == "1"
157 + agents:
158 + queue: cpu_queue_postmerge
159 + commands:
160 + - "aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7"
161 + - "docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT"
162 + - "docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT vllm/vllm-openai:nightly"
163 + - "docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT vllm/vllm-openai:nightly-$BUILDKITE_COMMIT"
164 + - "docker push vllm/vllm-openai:nightly"
165 + - "docker push vllm/vllm-openai:nightly-$BUILDKITE_COMMIT"
166 + # Clean up old nightly builds (keep only last 14)
167 + - "bash .buildkite/scripts/cleanup-nightly-builds.sh"
168 + plugins:
169 + - docker-login#v3.0.0:
170 + username: vllmbot
171 + password-env: DOCKERHUB_TOKEN
172 + env:
173 + DOCKER_BUILDKIT: "1"
.buildkite/scripts/cleanup-nightly-builds.sh new
+97
@@ -0,0 +1,97 @@
1 +#!/bin/bash
2 +
3 +set -ex
4 +
5 +# Clean up old nightly builds from DockerHub, keeping only the last 14 builds
6 +# This script uses DockerHub API to list and delete old tags with "nightly-" prefix
7 +
8 +# DockerHub API endpoint for vllm/vllm-openai repository
9 +REPO_API_URL="https://hub.docker.com/v2/repositories/vllm/vllm-openai/tags"
10 +
11 +# Get DockerHub token from environment
12 +if [ -z "$DOCKERHUB_TOKEN" ]; then
13 + echo "Error: DOCKERHUB_TOKEN environment variable is not set"
14 + exit 1
15 +fi
16 +
17 +# Function to get all tags from DockerHub
18 +get_all_tags() {
19 + local page=1
20 + local all_tags=""
21 +
22 + while true; do
23 + local response=$(curl -s -H "Authorization: Bearer $DOCKERHUB_TOKEN" \
24 + "$REPO_API_URL?page=$page&page_size=100")
25 +
26 + # Get both last_updated timestamp and tag name, separated by |
27 + local tags=$(echo "$response" | jq -r '.results[] | select(.name | startswith("nightly-")) | "\(.last_updated)|\(.name)"')
28 +
29 + if [ -z "$tags" ]; then
30 + break
31 + fi
32 +
33 + all_tags="$all_tags$tags"$'\n'
34 + page=$((page + 1))
35 + done
36 +
37 + # Sort by timestamp (newest first) and extract just the tag names
38 + echo "$all_tags" | sort -r | cut -d'|' -f2
39 +}
40 +
41 +delete_tag() {
42 + local tag_name="$1"
43 + echo "Deleting tag: $tag_name"
44 +
45 + local delete_url="https://hub.docker.com/v2/repositories/vllm/vllm-openai/tags/$tag_name"
46 + local response=$(curl -s -X DELETE -H "Authorization: Bearer $DOCKERHUB_TOKEN" "$delete_url")
47 +
48 + if echo "$response" | jq -e '.detail' > /dev/null 2>&1; then
49 + echo "Warning: Failed to delete tag $tag_name: $(echo "$response" | jq -r '.detail')"
50 + else
51 + echo "Successfully deleted tag: $tag_name"
52 + fi
53 +}
54 +
55 +# Get all nightly- prefixed tags, sorted by last_updated timestamp (newest first)
56 +echo "Fetching all tags from DockerHub..."
57 +all_tags=$(get_all_tags)
58 +
59 +if [ -z "$all_tags" ]; then
60 + echo "No tags found to clean up"
61 + exit 0
62 +fi
63 +
64 +# Count total tags
65 +total_tags=$(echo "$all_tags" | wc -l)
66 +echo "Found $total_tags tags"
67 +
68 +# Keep only the last 14 builds (including the current one)
69 +tags_to_keep=14
70 +tags_to_delete=$((total_tags - tags_to_keep))
71 +
72 +if [ $tags_to_delete -le 0 ]; then
73 + echo "No tags need to be deleted (only $total_tags tags found, keeping $tags_to_keep)"
74 + exit 0
75 +fi
76 +
77 +echo "Will delete $tags_to_delete old tags, keeping the newest $tags_to_keep"
78 +
79 +# Get tags to delete (skip the first $tags_to_keep tags)
80 +tags_to_delete_list=$(echo "$all_tags" | tail -n +$((tags_to_keep + 1)))
81 +
82 +if [ -z "$tags_to_delete_list" ]; then
83 + echo "No tags to delete"
84 + exit 0
85 +fi
86 +
87 +# Delete old tags
88 +echo "Deleting old tags..."
89 +while IFS= read -r tag; do
90 + if [ -n "$tag" ]; then
91 + delete_tag "$tag"
92 + # Add a small delay to avoid rate limiting
93 + sleep 1
94 + fi
95 +done <<< "$tags_to_delete_list"
96 +
97 +echo "Cleanup completed successfully"