diff --git a/.buildkite/release-pipeline.yaml b/.buildkite/release-pipeline.yaml index a543c5966..a052bf5af 100644 --- a/.buildkite/release-pipeline.yaml +++ b/.buildkite/release-pipeline.yaml @@ -192,6 +192,7 @@ steps: depends_on: - block-cpu-release-image-build - input-release-version + id: build-release-image-x86-cpu agents: queue: cpu_queue_release commands: @@ -207,9 +208,10 @@ steps: depends_on: ~ - label: "Build release image - arm64 - CPU" - depends_on: + depends_on: - block-arm64-cpu-release-image-build - input-release-version + id: build-release-image-arm64-cpu agents: queue: arm64_cpu_queue_release commands: @@ -280,6 +282,31 @@ steps: - "docker manifest create public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT-cu130-ubuntu2404 public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT-x86_64-cu130-ubuntu2404 public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT-aarch64-cu130-ubuntu2404 --amend" - "docker manifest push public.ecr.aws/q9t5s3a7/vllm-release-repo:$BUILDKITE_COMMIT-cu130-ubuntu2404" + - block: "Confirm publishing release images to DockerHub" + key: block-publish-release-images-dockerhub + depends_on: + - create-multi-arch-manifest + - create-multi-arch-manifest-cuda-13-0 + - build-release-image-x86-cpu + - build-release-image-arm64-cpu + - build-rocm-release-image + + - label: "Publish release images to DockerHub" + key: publish-release-images-dockerhub + depends_on: + - block-publish-release-images-dockerhub + agents: + queue: small_cpu_queue_release + commands: + - "bash .buildkite/scripts/push-release-builds.sh" + plugins: + - docker-login#v3.0.0: + username: vllmbot + password-env: DOCKERHUB_TOKEN + env: + DOCKER_BUILDKIT: "1" + DOCKERHUB_USERNAME: "vllmbot" + - label: "Publish nightly multi-arch image to DockerHub" depends_on: - create-multi-arch-manifest diff --git a/.buildkite/scripts/push-release-builds.sh b/.buildkite/scripts/push-release-builds.sh new file mode 100755 index 000000000..91f12af55 --- /dev/null +++ b/.buildkite/scripts/push-release-builds.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +set -euo pipefail + +# Ensure git tags are up-to-date (Buildkite's default fetch doesn't always include tags) +echo "Fetching latest tags from origin..." +git fetch --tags --force origin + +# Derive release version from the git tag on the current commit. +# The pipeline must be triggered on a tagged commit (e.g. v0.18.1). +RELEASE_VERSION=$(git describe --exact-match --tags "${BUILDKITE_COMMIT}" 2>/dev/null || true) +if [ -z "${RELEASE_VERSION}" ]; then + echo "[FATAL] Commit ${BUILDKITE_COMMIT} has no exact git tag. " \ + "Release images must be published from a tagged commit." + exit 1 +fi + +# Strip leading 'v' for use in Docker tags (e.g. v0.18.1 -> 0.18.1) +PURE_VERSION="${RELEASE_VERSION#v}" + +echo "========================================" +echo "Publishing release images" +echo " Commit: ${BUILDKITE_COMMIT}" +echo " Release version: ${RELEASE_VERSION}" +echo "========================================" + +set -x + +# ---- CUDA (default, CUDA 12.9) ---- +docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64" +docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64" "vllm/vllm-openai:latest-x86_64" +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64" "vllm/vllm-openai:v${PURE_VERSION}-x86_64" +docker push "vllm/vllm-openai:latest-x86_64" +docker push "vllm/vllm-openai:v${PURE_VERSION}-x86_64" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64" "vllm/vllm-openai:latest-aarch64" +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64" "vllm/vllm-openai:v${PURE_VERSION}-aarch64" +docker push "vllm/vllm-openai:latest-aarch64" +docker push "vllm/vllm-openai:v${PURE_VERSION}-aarch64" + +docker manifest rm "vllm/vllm-openai:latest" || true +docker manifest create "vllm/vllm-openai:latest" "vllm/vllm-openai:latest-x86_64" "vllm/vllm-openai:latest-aarch64" +docker manifest push "vllm/vllm-openai:latest" + +docker manifest rm "vllm/vllm-openai:v${PURE_VERSION}" || true +docker manifest create "vllm/vllm-openai:v${PURE_VERSION}" "vllm/vllm-openai:v${PURE_VERSION}-x86_64" "vllm/vllm-openai:v${PURE_VERSION}-aarch64" +docker manifest push "vllm/vllm-openai:v${PURE_VERSION}" + +# ---- CUDA 13.0 ---- +docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64-cu130" +docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64-cu130" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64-cu130" "vllm/vllm-openai:latest-x86_64-cu130" +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64-cu130" "vllm/vllm-openai:v${PURE_VERSION}-x86_64-cu130" +docker push "vllm/vllm-openai:latest-x86_64-cu130" +docker push "vllm/vllm-openai:v${PURE_VERSION}-x86_64-cu130" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64-cu130" "vllm/vllm-openai:latest-aarch64-cu130" +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64-cu130" "vllm/vllm-openai:v${PURE_VERSION}-aarch64-cu130" +docker push "vllm/vllm-openai:latest-aarch64-cu130" +docker push "vllm/vllm-openai:v${PURE_VERSION}-aarch64-cu130" + +docker manifest rm "vllm/vllm-openai:latest-cu130" || true +docker manifest create "vllm/vllm-openai:latest-cu130" "vllm/vllm-openai:latest-x86_64-cu130" "vllm/vllm-openai:latest-aarch64-cu130" +docker manifest push "vllm/vllm-openai:latest-cu130" + +docker manifest rm "vllm/vllm-openai:v${PURE_VERSION}-cu130" || true +docker manifest create "vllm/vllm-openai:v${PURE_VERSION}-cu130" "vllm/vllm-openai:v${PURE_VERSION}-x86_64-cu130" "vllm/vllm-openai:v${PURE_VERSION}-aarch64-cu130" +docker manifest push "vllm/vllm-openai:v${PURE_VERSION}-cu130" + +# ---- ROCm ---- +docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm" +docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm-base" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm" "vllm/vllm-openai-rocm:latest" +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm" "vllm/vllm-openai-rocm:v${PURE_VERSION}" +docker push "vllm/vllm-openai-rocm:latest" +docker push "vllm/vllm-openai-rocm:v${PURE_VERSION}" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm-base" "vllm/vllm-openai-rocm:latest-base" +docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm-base" "vllm/vllm-openai-rocm:v${PURE_VERSION}-base" +docker push "vllm/vllm-openai-rocm:latest-base" +docker push "vllm/vllm-openai-rocm:v${PURE_VERSION}-base" + +# ---- CPU ---- +# CPU images in ECR are tagged with the full version including 'v' (e.g. v0.18.1), +# matching the value from the Buildkite release-version metadata input. +docker pull "public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:${RELEASE_VERSION}" +docker pull "public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:${RELEASE_VERSION}" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:${RELEASE_VERSION}" "vllm/vllm-openai-cpu:latest-x86_64" +docker tag "public.ecr.aws/q9t5s3a7/vllm-cpu-release-repo:${RELEASE_VERSION}" "vllm/vllm-openai-cpu:v${PURE_VERSION}-x86_64" +docker push "vllm/vllm-openai-cpu:latest-x86_64" +docker push "vllm/vllm-openai-cpu:v${PURE_VERSION}-x86_64" + +docker tag "public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:${RELEASE_VERSION}" "vllm/vllm-openai-cpu:latest-arm64" +docker tag "public.ecr.aws/q9t5s3a7/vllm-arm64-cpu-release-repo:${RELEASE_VERSION}" "vllm/vllm-openai-cpu:v${PURE_VERSION}-arm64" +docker push "vllm/vllm-openai-cpu:latest-arm64" +docker push "vllm/vllm-openai-cpu:v${PURE_VERSION}-arm64" + +docker manifest rm "vllm/vllm-openai-cpu:latest" || true +docker manifest create "vllm/vllm-openai-cpu:latest" "vllm/vllm-openai-cpu:latest-x86_64" "vllm/vllm-openai-cpu:latest-arm64" +docker manifest push "vllm/vllm-openai-cpu:latest" + +docker manifest rm "vllm/vllm-openai-cpu:v${PURE_VERSION}" || true +docker manifest create "vllm/vllm-openai-cpu:v${PURE_VERSION}" "vllm/vllm-openai-cpu:v${PURE_VERSION}-x86_64" "vllm/vllm-openai-cpu:v${PURE_VERSION}-arm64" +docker manifest push "vllm/vllm-openai-cpu:v${PURE_VERSION}" + +echo "========================================" +echo "Successfully published release images for ${RELEASE_VERSION}" +echo "========================================"