From 49afe9d31ef177a79c08e028909a8bffc440cffd Mon Sep 17 00:00:00 2001 From: khluu Date: Thu, 7 May 2026 16:14:14 -0700 Subject: [PATCH] [CI/Build] Add x86_64 and aarch64 docker image builds to release pipeline Add release Docker image build steps to the nightly release pipeline that build per-arch images from docker/Dockerfile.cuda, push them to ECR, create a multi-arch manifest, and publish it to Docker Hub under the nightly tag at vllm/vllm-omni. Mirrors the pattern used by vllm-project/vllm's release pipeline. Co-Authored-By: Claude Opus 4.7 (1M context) --- .buildkite/nightly-release-pipeline.yaml | 67 +++++++++++++++++++++++ .buildkite/scripts/push-nightly-builds.sh | 30 ++++++++++ 2 files changed, 97 insertions(+) create mode 100755 .buildkite/scripts/push-nightly-builds.sh diff --git a/.buildkite/nightly-release-pipeline.yaml b/.buildkite/nightly-release-pipeline.yaml index 25c52ba3b..10d89457e 100644 --- a/.buildkite/nightly-release-pipeline.yaml +++ b/.buildkite/nightly-release-pipeline.yaml @@ -18,3 +18,70 @@ steps: queue: small_cpu_queue_release commands: - "bash .buildkite/scripts/generate-and-upload-nightly-index.sh" + + - group: "Build release Docker images" + key: "build-release-images" + steps: + - label: "Build release image - x86_64" + key: build-release-image-x86 + depends_on: ~ + agents: + queue: cpu_queue_release + commands: + - "aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7" + - | + DOCKER_BUILDKIT=1 docker build \ + --build-arg max_jobs=16 \ + --tag public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-$(uname -m) \ + --progress plain \ + -f docker/Dockerfile.cuda . + - "docker push public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-$(uname -m)" + # re-tag to default image tag and push, just in case arm64 build fails + - "docker tag public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-$(uname -m) public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT" + - "docker push public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT" + env: + DOCKER_BUILDKIT: "1" + + - label: "Build release image - aarch64" + key: build-release-image-arm64 + depends_on: ~ + agents: + queue: arm64_cpu_queue_release + commands: + - "aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7" + - | + DOCKER_BUILDKIT=1 docker build \ + --build-arg max_jobs=16 \ + --tag public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-$(uname -m) \ + --progress plain \ + -f docker/Dockerfile.cuda . + - "docker push public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-$(uname -m)" + env: + DOCKER_BUILDKIT: "1" + + - label: "Create multi-arch manifest" + key: create-multi-arch-manifest + depends_on: + - build-release-image-x86 + - build-release-image-arm64 + agents: + queue: small_cpu_queue_release + commands: + - "aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7" + - "docker manifest create public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-x86_64 public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT-aarch64 --amend" + - "docker manifest push public.ecr.aws/q9t5s3a7/vllm-omni-release-repo:$BUILDKITE_COMMIT" + + - label: "Publish nightly multi-arch image to DockerHub" + depends_on: + - create-multi-arch-manifest + agents: + queue: small_cpu_queue_release + commands: + - "bash .buildkite/scripts/push-nightly-builds.sh" + plugins: + - docker-login#v3.0.0: + username: vllmbot + password-env: DOCKERHUB_TOKEN + env: + DOCKER_BUILDKIT: "1" + DOCKERHUB_USERNAME: "vllmbot" diff --git a/.buildkite/scripts/push-nightly-builds.sh b/.buildkite/scripts/push-nightly-builds.sh new file mode 100755 index 000000000..6dbaf3e4b --- /dev/null +++ b/.buildkite/scripts/push-nightly-builds.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -ex + +# Pull per-arch images from ECR (built earlier in the pipeline) and re-publish +# them to Docker Hub under a nightly tag, then create and push a multi-arch +# manifest pointing at both per-arch tags. + +ORIG_TAG_NAME="$BUILDKITE_COMMIT" +TAG_NAME="nightly" +DOCKERHUB_REPO="vllm/vllm-omni" +ECR_REPO="public.ecr.aws/q9t5s3a7/vllm-omni-release-repo" + +echo "Pushing original tag $ORIG_TAG_NAME to new nightly tag name: $TAG_NAME" + +# pull original arch-dependent images from AWS ECR Public +aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7 +docker pull "$ECR_REPO:$ORIG_TAG_NAME-x86_64" +docker pull "$ECR_REPO:$ORIG_TAG_NAME-aarch64" +# tag arch-dependent images +docker tag "$ECR_REPO:$ORIG_TAG_NAME-x86_64" "$DOCKERHUB_REPO:$TAG_NAME-x86_64" +docker tag "$ECR_REPO:$ORIG_TAG_NAME-aarch64" "$DOCKERHUB_REPO:$TAG_NAME-aarch64" +# push arch-dependent images to DockerHub +docker push "$DOCKERHUB_REPO:$TAG_NAME-x86_64" +docker push "$DOCKERHUB_REPO:$TAG_NAME-aarch64" +# push arch-independent manifest to DockerHub +docker manifest create "$DOCKERHUB_REPO:$TAG_NAME" "$DOCKERHUB_REPO:$TAG_NAME-x86_64" "$DOCKERHUB_REPO:$TAG_NAME-aarch64" --amend +docker manifest create "$DOCKERHUB_REPO:$TAG_NAME-$BUILDKITE_COMMIT" "$DOCKERHUB_REPO:$TAG_NAME-x86_64" "$DOCKERHUB_REPO:$TAG_NAME-aarch64" --amend +docker manifest push "$DOCKERHUB_REPO:$TAG_NAME" +docker manifest push "$DOCKERHUB_REPO:$TAG_NAME-$BUILDKITE_COMMIT"