-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
[CI] Automate Docker Hub release image publishing #40415
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
8e520ee
2b83d0c
8f214e0
041d4b8
426e477
d48a7c4
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -436,6 +436,33 @@ | |
| DOCKER_BUILDKIT: "1" | ||
| DOCKERHUB_USERNAME: "vllmbot" | ||
|
|
||
| - block: "Publish release images to DockerHub" | ||
| key: block-publish-release-images | ||
| depends_on: | ||
| - annotate-release-workflow | ||
| - create-multi-arch-manifest-cuda-12-9 | ||
| - create-multi-arch-manifest-ubuntu2404 | ||
| - create-multi-arch-manifest-cuda-12-9-ubuntu2404 | ||
|
Comment on lines
+445
to
+447
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. does it not need to wait on create-multi-arch-manifest?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good catch — added |
||
| - build-rocm-release-image | ||
| - input-release-version | ||
| if: build.env("NIGHTLY") != "1" | ||
|
|
||
|
Check warning on line 449 in .buildkite/release-pipeline.yaml
|
||
|
claude[bot] marked this conversation as resolved.
|
||
| - label: "Publish release images to DockerHub" | ||
| depends_on: | ||
| - block-publish-release-images | ||
| id: publish-release-images-dockerhub | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. use key instead of id
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done — switched to
Comment on lines
+460
to
+463
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 The new Extended reasoning...What the bug is
Why this is a consistency gapThe same author/file has already encoded the right pattern for the analogous case 350 lines earlier:
That pattern fits that case (the build group should run in BOTH modes — in nightly the upstream block is missing, so
Step-by-step trace of nightly behavior
In the happy path this is the intended outcome. The risk is that step (4) relies on Buildkite's behavior being stable across versions and matching the author's mental model — and unlike approach (1), there is nothing in the YAML that tells a future reader 'this step is intentionally nightly-gated'. Addressing the refutationA fellow verifier argues this is intentional behavior leveraging Buildkite's transitive-filter semantics, and that the lines 113-115 pattern is not analogous because the build group must run in both modes whereas the publish step must not. That refutation is correct on intent — the two cases ARE different, and the refutation is right that simply pasting But the refutation does not address the explicit-vs-implicit gap. The two existing patterns in this file ( ImpactBounded — in the most likely case the existing pattern works (Buildkite skips the publish step in nightly as intended). The downside is reduced readability and a small risk if Buildkite's filtered-dependency semantics ever change or differ across pipeline-upload code paths. Severity: nit. FixAdd the matching guard on the label step: - label: "Publish release images to DockerHub"
depends_on:
- block-publish-release-images
id: publish-release-images-dockerhub
if: build.env("NIGHTLY") != "1" # <-- add this
agents:
queue: small_cpu_queue_release
...This makes the nightly-skip intent explicit at the step that runs and matches the file's own convention of guarding nightly-conditional steps with their own |
||
| agents: | ||
| queue: small_cpu_queue_release | ||
| commands: | ||
| - "bash .buildkite/scripts/publish-release-images.sh" | ||
| plugins: | ||
| - docker-login#v3.0.0: | ||
| username: vllmbot | ||
| password-env: DOCKERHUB_TOKEN | ||
| env: | ||
| DOCKER_BUILDKIT: "1" | ||
| DOCKERHUB_USERNAME: "vllmbot" | ||
|
|
||
| - group: "Publish wheels" | ||
| key: "publish-wheels" | ||
| steps: | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,172 @@ | ||
| #!/bin/bash | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
| # SPDX-FileCopyrightText: Copyright contributors to the vLLM project | ||
| # | ||
| # Publish release Docker images from ECR to DockerHub. | ||
| # Pulls per-arch images, tags with latest and versioned tags, pushes them, | ||
| # then creates and pushes multi-arch manifests. | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| RELEASE_VERSION=$(buildkite-agent meta-data get release-version 2>/dev/null | sed 's/^v//') | ||
| if [ -z "${RELEASE_VERSION}" ]; then | ||
| echo "ERROR: release-version metadata not set" | ||
| exit 1 | ||
| fi | ||
|
Check warning on line 15 in .buildkite/scripts/publish-release-images.sh
|
||
|
claude[bot] marked this conversation as resolved.
|
||
|
|
||
| COMMIT="$BUILDKITE_COMMIT" | ||
| ROCM_BASE_CACHE_KEY=$(.buildkite/scripts/cache-rocm-base-wheels.sh key) | ||
|
|
||
| echo "========================================" | ||
| echo "Publishing release images v${RELEASE_VERSION}" | ||
| echo " Commit: ${COMMIT}" | ||
| echo " ROCm base cache key: ${ROCM_BASE_CACHE_KEY}" | ||
| echo "========================================" | ||
|
|
||
| # Login to ECR to pull staging images | ||
| aws ecr-public get-login-password --region us-east-1 | \ | ||
| docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7 | ||
|
|
||
| # ---- CUDA (default: 13.0) ---- | ||
|
|
||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64 | ||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64 vllm/vllm-openai:latest-x86_64 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 | ||
| docker push vllm/vllm-openai:latest-x86_64 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64 vllm/vllm-openai:latest-aarch64 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64 | ||
| docker push vllm/vllm-openai:latest-aarch64 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64 | ||
|
|
||
| docker manifest rm vllm/vllm-openai:latest || true | ||
| docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION} || true | ||
| docker manifest create vllm/vllm-openai:latest vllm/vllm-openai:latest-x86_64 vllm/vllm-openai:latest-aarch64 | ||
| docker manifest create vllm/vllm-openai:v${RELEASE_VERSION} vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64 | ||
| docker manifest push vllm/vllm-openai:latest | ||
| docker manifest push vllm/vllm-openai:v${RELEASE_VERSION} | ||
|
|
||
| # ---- CUDA 12.9 ---- | ||
|
|
||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129 | ||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129 vllm/vllm-openai:latest-x86_64-cu129 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129 | ||
| docker push vllm/vllm-openai:latest-x86_64-cu129 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129 vllm/vllm-openai:latest-aarch64-cu129 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129 | ||
| docker push vllm/vllm-openai:latest-aarch64-cu129 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129 | ||
|
|
||
| docker manifest rm vllm/vllm-openai:latest-cu129 || true | ||
| docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION}-cu129 || true | ||
| docker manifest create vllm/vllm-openai:latest-cu129 vllm/vllm-openai:latest-x86_64-cu129 vllm/vllm-openai:latest-aarch64-cu129 | ||
| 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 | ||
| docker manifest push vllm/vllm-openai:latest-cu129 | ||
| docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-cu129 | ||
|
|
||
| # ---- Ubuntu 24.04 (CUDA 13.0) ---- | ||
|
|
||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404 | ||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404 vllm/vllm-openai:latest-x86_64-ubuntu2404 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404 | ||
| docker push vllm/vllm-openai:latest-x86_64-ubuntu2404 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404 vllm/vllm-openai:latest-aarch64-ubuntu2404 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404 | ||
| docker push vllm/vllm-openai:latest-aarch64-ubuntu2404 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404 | ||
|
|
||
| docker manifest rm vllm/vllm-openai:latest-ubuntu2404 || true | ||
| docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404 || true | ||
| docker manifest create vllm/vllm-openai:latest-ubuntu2404 vllm/vllm-openai:latest-x86_64-ubuntu2404 vllm/vllm-openai:latest-aarch64-ubuntu2404 | ||
| 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 | ||
| docker manifest push vllm/vllm-openai:latest-ubuntu2404 | ||
| docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404 | ||
|
|
||
| # ---- Ubuntu 24.04 (CUDA 12.9) ---- | ||
|
|
||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404 | ||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404 vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404 | ||
| docker push vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404 | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404 vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404 | ||
| docker push vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404 | ||
| docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404 | ||
|
|
||
| docker manifest rm vllm/vllm-openai:latest-cu129-ubuntu2404 || true | ||
| docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404 || true | ||
| docker manifest create vllm/vllm-openai:latest-cu129-ubuntu2404 vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404 vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404 | ||
| 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 | ||
| docker manifest push vllm/vllm-openai:latest-cu129-ubuntu2404 | ||
| docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404 | ||
|
|
||
| # ---- ROCm ---- | ||
|
|
||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm | ||
| docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm vllm/vllm-openai-rocm:latest | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm vllm/vllm-openai-rocm:v${RELEASE_VERSION} | ||
| docker push vllm/vllm-openai-rocm:latest | ||
| docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION} | ||
|
|
||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base vllm/vllm-openai-rocm:latest-base | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base | ||
| docker push vllm/vllm-openai-rocm:latest-base | ||
| docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base | ||
|
|
||
| # ---- CPU ---- | ||
| # CPU images are behind separate block steps and may not have been built. | ||
| # Attempt to pull and publish; skip gracefully if images are not available. | ||
|
|
||
| CPU_X86=false | ||
| CPU_ARM=false | ||
|
|
||
| if docker pull public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:v${RELEASE_VERSION} 2>/dev/null; then | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:v${RELEASE_VERSION} vllm/vllm-openai-cpu:latest-x86_64 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:v${RELEASE_VERSION} vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64 | ||
| docker push vllm/vllm-openai-cpu:latest-x86_64 | ||
| docker push vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64 | ||
| CPU_X86=true | ||
| else | ||
| echo "WARNING: x86_64 CPU image not found, skipping (ensure block-cpu-release-image-build was unblocked)" | ||
| fi | ||
|
|
||
| if docker pull public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:v${RELEASE_VERSION} 2>/dev/null; then | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:v${RELEASE_VERSION} vllm/vllm-openai-cpu:latest-arm64 | ||
| docker tag public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:v${RELEASE_VERSION} vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64 | ||
| docker push vllm/vllm-openai-cpu:latest-arm64 | ||
| docker push vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64 | ||
| CPU_ARM=true | ||
| else | ||
| echo "WARNING: arm64 CPU image not found, skipping (ensure block-arm64-cpu-release-image-build was unblocked)" | ||
| fi | ||
|
Check failure on line 158 in .buildkite/scripts/publish-release-images.sh
|
||
|
claude[bot] marked this conversation as resolved.
Outdated
|
||
|
|
||
| if [ "$CPU_X86" = "true" ] && [ "$CPU_ARM" = "true" ]; then | ||
| docker manifest rm vllm/vllm-openai-cpu:latest || true | ||
| docker manifest rm vllm/vllm-openai-cpu:v${RELEASE_VERSION} || true | ||
| docker manifest create vllm/vllm-openai-cpu:latest vllm/vllm-openai-cpu:latest-x86_64 vllm/vllm-openai-cpu:latest-arm64 | ||
| 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 | ||
| docker manifest push vllm/vllm-openai-cpu:latest | ||
| docker manifest push vllm/vllm-openai-cpu:v${RELEASE_VERSION} | ||
| else | ||
| echo "WARNING: Skipping CPU multi-arch manifest (both x86_64 and arm64 images required)" | ||
| fi | ||
|
claude[bot] marked this conversation as resolved.
Outdated
|
||
|
|
||
| echo "" | ||
| echo "Successfully published release images for v${RELEASE_VERSION}" | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it doesn't need to wait for release workflow annotation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done — dropped
annotate-release-workflowfrom the depends_on. The annotate step posts wheel download info and isn't a real publish prerequisite.