main
sh 232 lines 12.6 KB
Raw
1 #!/bin/bash
2 # SPDX-License-Identifier: Apache-2.0
3 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
4 #
5 # Publish a release Docker image family from ECR to DockerHub.
6 # Pulls per-arch images, tags with latest and versioned tags, pushes them,
7 # then creates and pushes multi-arch manifests.
8
9 set -euo pipefail
10
11 TARGET="${1:-all}"
12 case "${TARGET}" in
13 cuda-13-0 | cuda-12-9 | cuda-13-0-ubuntu-24-04 | \
14 cuda-12-9-ubuntu-24-04 | rocm | xpu | cpu | all) ;;
15 *)
16 echo "Usage: $0 {cuda-13-0|cuda-12-9|cuda-13-0-ubuntu-24-04|cuda-12-9-ubuntu-24-04|rocm|xpu|cpu|all}"
17 exit 2
18 ;;
19 esac
20
21 target_enabled() {
22 [ "${TARGET}" = "all" ] || [ "${TARGET}" = "$1" ]
23 }
24
25 RELEASE_VERSION=$(buildkite-agent meta-data get release-version --default "" | sed 's/^v//')
26 if [ -z "${RELEASE_VERSION}" ]; then
27 echo "ERROR: release-version metadata not set"
28 exit 1
29 fi
30
31 COMMIT="$BUILDKITE_COMMIT"
32
33 echo "========================================"
34 echo "Publishing ${TARGET} release images v${RELEASE_VERSION}"
35 echo " Commit: ${COMMIT}"
36 echo "========================================"
37
38 # Login to ECR to pull staging images
39 aws ecr-public get-login-password --region us-east-1 | \
40 docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7
41
42 # ---- CUDA (default: 13.0) ----
43
44 if target_enabled cuda-13-0; then
45 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64"
46 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64"
47
48 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64" vllm/vllm-openai:latest-x86_64
49 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64"
50 docker push vllm/vllm-openai:latest-x86_64
51 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64"
52
53 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64" vllm/vllm-openai:latest-aarch64
54 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64"
55 docker push vllm/vllm-openai:latest-aarch64
56 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64"
57
58 docker manifest rm vllm/vllm-openai:latest || true
59 docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}" || true
60 docker manifest create vllm/vllm-openai:latest vllm/vllm-openai:latest-x86_64 vllm/vllm-openai:latest-aarch64
61 docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64"
62 docker manifest push vllm/vllm-openai:latest
63 docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}"
64
65 ZSTD_DIGEST=$(docker buildx imagetools inspect \
66 "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64" \
67 --format '{{json .Manifest.Digest}}' | tr -d '"')
68 .buildkite/scripts/publish-zstd-image.sh \
69 "public.ecr.aws/q9t5s3a7/vllm-release-repo@${ZSTD_DIGEST}" \
70 "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-zstd"
71 fi
72
73 # ---- CUDA 12.9 ----
74
75 if target_enabled cuda-12-9; then
76 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129"
77 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129"
78
79 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129" vllm/vllm-openai:latest-x86_64-cu129
80 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129"
81 docker push vllm/vllm-openai:latest-x86_64-cu129
82 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129"
83
84 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129" vllm/vllm-openai:latest-aarch64-cu129
85 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129"
86 docker push vllm/vllm-openai:latest-aarch64-cu129
87 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129"
88
89 docker manifest rm vllm/vllm-openai:latest-cu129 || true
90 docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}-cu129" || true
91 docker manifest create vllm/vllm-openai:latest-cu129 vllm/vllm-openai:latest-x86_64-cu129 vllm/vllm-openai:latest-aarch64-cu129
92 docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129"
93 docker manifest push vllm/vllm-openai:latest-cu129
94 docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}-cu129"
95 fi
96
97 # ---- Ubuntu 24.04 (CUDA 13.0) ----
98
99 if target_enabled cuda-13-0-ubuntu-24-04; then
100 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404"
101 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404"
102
103 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404" vllm/vllm-openai:latest-x86_64-ubuntu2404
104 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404"
105 docker push vllm/vllm-openai:latest-x86_64-ubuntu2404
106 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404"
107
108 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404" vllm/vllm-openai:latest-aarch64-ubuntu2404
109 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404"
110 docker push vllm/vllm-openai:latest-aarch64-ubuntu2404
111 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404"
112
113 docker manifest rm vllm/vllm-openai:latest-ubuntu2404 || true
114 docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404" || true
115 docker manifest create vllm/vllm-openai:latest-ubuntu2404 vllm/vllm-openai:latest-x86_64-ubuntu2404 vllm/vllm-openai:latest-aarch64-ubuntu2404
116 docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404"
117 docker manifest push vllm/vllm-openai:latest-ubuntu2404
118 docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404"
119 fi
120
121 # ---- Ubuntu 24.04 (CUDA 12.9) ----
122
123 if target_enabled cuda-12-9-ubuntu-24-04; then
124 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404"
125 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404"
126
127 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404" vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404
128 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404"
129 docker push vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404
130 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404"
131
132 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404" vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
133 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404"
134 docker push vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
135 docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404"
136
137 docker manifest rm vllm/vllm-openai:latest-cu129-ubuntu2404 || true
138 docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404" || true
139 docker manifest create vllm/vllm-openai:latest-cu129-ubuntu2404 vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404 vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
140 docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404"
141 docker manifest push vllm/vllm-openai:latest-cu129-ubuntu2404
142 docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404"
143 fi
144
145 # ---- ROCm ----
146
147 if target_enabled rocm; then
148 ROCM_BASE_CACHE_KEY=$(.buildkite/scripts/cache-rocm-base-wheels.sh key)
149 echo "ROCm base cache key: ${ROCM_BASE_CACHE_KEY}"
150
151 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm"
152 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base"
153
154 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm" vllm/vllm-openai-rocm:latest
155 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm" "vllm/vllm-openai-rocm:v${RELEASE_VERSION}"
156 docker push vllm/vllm-openai-rocm:latest
157 docker push "vllm/vllm-openai-rocm:v${RELEASE_VERSION}"
158
159 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base" vllm/vllm-openai-rocm:latest-base
160 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base" "vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base"
161 docker push vllm/vllm-openai-rocm:latest-base
162 docker push "vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base"
163 fi
164
165 # ---- XPU ----
166
167 if target_enabled xpu; then
168 docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu"
169
170 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu" vllm/vllm-openai-xpu:latest-x86_64
171 docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu" "vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64"
172 docker push vllm/vllm-openai-xpu:latest-x86_64
173 docker push "vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64"
174
175 docker manifest rm vllm/vllm-openai-xpu:latest || true
176 docker manifest rm "vllm/vllm-openai-xpu:v${RELEASE_VERSION}" || true
177 docker manifest create vllm/vllm-openai-xpu:latest vllm/vllm-openai-xpu:latest-x86_64 --amend
178 docker manifest create "vllm/vllm-openai-xpu:v${RELEASE_VERSION}" "vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64" --amend
179 docker manifest push vllm/vllm-openai-xpu:latest
180 docker manifest push "vllm/vllm-openai-xpu:v${RELEASE_VERSION}"
181 fi
182
183 # ---- CPU ----
184 # CPU images are behind separate block steps and may not have been built.
185 # All-or-nothing: inspect both arches first, then either publish everything
186 # (per-arch + multi-arch manifest) or skip everything. Publishing only one
187 # arch would leave `:latest-x86_64` pointing at the new release while the
188 # `:latest` multi-arch manifest still resolves to the previous release.
189
190 if target_enabled cpu; then
191 CPU_X86_TAG=public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:${COMMIT}-x86_64
192 CPU_ARM_TAG=public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:${COMMIT}-arm64
193
194 CPU_X86_AVAILABLE=false
195 CPU_ARM_AVAILABLE=false
196 docker manifest inspect "${CPU_X86_TAG}" >/dev/null 2>&1 && CPU_X86_AVAILABLE=true
197 docker manifest inspect "${CPU_ARM_TAG}" >/dev/null 2>&1 && CPU_ARM_AVAILABLE=true
198
199 if [ "$CPU_X86_AVAILABLE" = "true" ] && [ "$CPU_ARM_AVAILABLE" = "true" ]; then
200 docker pull "${CPU_X86_TAG}"
201 docker tag "${CPU_X86_TAG}" vllm/vllm-openai-cpu:latest-x86_64
202 docker tag "${CPU_X86_TAG}" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64"
203 docker push vllm/vllm-openai-cpu:latest-x86_64
204 docker push "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64"
205
206 docker pull "${CPU_ARM_TAG}"
207 docker tag "${CPU_ARM_TAG}" vllm/vllm-openai-cpu:latest-arm64
208 docker tag "${CPU_ARM_TAG}" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64"
209 docker push vllm/vllm-openai-cpu:latest-arm64
210 docker push "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64"
211
212 docker manifest rm vllm/vllm-openai-cpu:latest || true
213 docker manifest rm "vllm/vllm-openai-cpu:v${RELEASE_VERSION}" || true
214 docker manifest create vllm/vllm-openai-cpu:latest vllm/vllm-openai-cpu:latest-x86_64 vllm/vllm-openai-cpu:latest-arm64
215 docker manifest create "vllm/vllm-openai-cpu:v${RELEASE_VERSION}" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64"
216 docker manifest push vllm/vllm-openai-cpu:latest
217 docker manifest push "vllm/vllm-openai-cpu:v${RELEASE_VERSION}"
218 elif [ "$CPU_X86_AVAILABLE" = "false" ] && [ "$CPU_ARM_AVAILABLE" = "false" ]; then
219 echo "WARNING: Neither CPU image found in ECR, skipping CPU publish (ensure block-cpu-release-image-build and block-arm64-cpu-release-image-build were unblocked and the builds finished pushing)"
220 else
221 # Partial state: one arch built, the other did not. Fail loudly rather than
222 # ship a Docker Hub state where `:latest-${arch}` and `:latest` (multi-arch)
223 # disagree on which release they point at.
224 echo "ERROR: Partial CPU build detected (x86_64=${CPU_X86_AVAILABLE}, arm64=${CPU_ARM_AVAILABLE})."
225 echo " Refusing to publish to avoid split-tag drift between per-arch and multi-arch tags."
226 echo " Re-run the missing CPU build and retry, or manually publish if a single-arch release is intended."
227 exit 1
228 fi
229 fi
230
231 echo ""
232 echo "Successfully published ${TARGET} release images for v${RELEASE_VERSION}"