main
sh 109 lines 4.27 KB
Raw
1 #!/bin/bash
2 # SPDX-License-Identifier: Apache-2.0
3 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
4 #
5 # Push a ROCm-family nightly base image and nightly image from ECR to Docker Hub
6 # under vllm/vllm-openai-rocm, as base-nightly[-<variant>], nightly[-<variant>]
7 # and their -<commit> forms.
8 # Run when NIGHTLY=1 after the matching build-*-release-image step has pushed to ECR.
9 #
10 # Usage: push-nightly-builds-rocm.sh [ECR_TAG_SUFFIX TAG_VARIANT]
11 # Pass both arguments or neither. With none, the default ROCm apt build is
12 # published as :nightly. The TheRock build passes "rock" (the source ECR tag
13 # suffix) and "rocm714" (the Docker Hub tag flavor), giving :nightly-rocm714.
14 #
15 # Local testing (no push to Docker Hub):
16 # BASE_ECR_IMAGE=<full-base-image-reference> \
17 # BUILDKITE_COMMIT=<commit-with-image-in-ecr> DRY_RUN=1 \
18 # bash .buildkite/scripts/push-nightly-builds-rocm.sh
19 # Requires: AWS CLI configured (for ECR public login), Docker. For full run: Docker Hub login.
20
21 set -euxo pipefail
22
23 usage() {
24 echo "Usage: $0 [ECR_TAG_SUFFIX TAG_VARIANT]" >&2
25 }
26
27 DOCKERHUB_REPO="vllm/vllm-openai-rocm"
28
29 case "$#" in
30 0)
31 ECR_TAG_SUFFIX="rocm"
32 TAG_VARIANT=""
33 ;;
34 2)
35 if [[ -z "$1" || -z "$2" ]]; then
36 usage
37 exit 2
38 fi
39 ECR_TAG_SUFFIX="$1"
40 TAG_VARIANT="$2"
41 ;;
42 *)
43 usage
44 exit 2
45 ;;
46 esac
47
48 # Use BUILDKITE_COMMIT from env (required; set to a commit that has the image in ECR for local test)
49 BUILDKITE_COMMIT="${BUILDKITE_COMMIT:?Set BUILDKITE_COMMIT to the commit SHA that has the image in ECR (e.g. from a previous release pipeline run)}"
50 DRY_RUN="${DRY_RUN:-0}"
51
52 ECR_REPO="public.ecr.aws/q9t5s3a7/vllm-release-repo"
53
54 # Get the base image ECR tag (set by the build-*-release-image pipeline step)
55 BASE_METADATA_KEY="${ECR_TAG_SUFFIX}-base-ecr-tag"
56 if [[ -n "${BASE_ECR_IMAGE:-}" ]]; then
57 if [[ "$DRY_RUN" != "1" ]]; then
58 echo "ERROR: BASE_ECR_IMAGE may only be used with DRY_RUN=1" >&2
59 exit 1
60 fi
61 BASE_ORIG_TAG="$BASE_ECR_IMAGE"
62 elif ! BASE_ORIG_TAG="$(buildkite-agent meta-data get "$BASE_METADATA_KEY")"; then
63 echo "ERROR: Failed to read required Buildkite metadata '$BASE_METADATA_KEY'" >&2
64 exit 1
65 fi
66 if [[ -z "$BASE_ORIG_TAG" ]]; then
67 echo "ERROR: Required Buildkite metadata '$BASE_METADATA_KEY' is empty" >&2
68 echo "Set BASE_ECR_IMAGE to the full ECR base image reference for local testing" >&2
69 exit 1
70 fi
71
72 ORIG_TAG="${BUILDKITE_COMMIT}-${ECR_TAG_SUFFIX}"
73 VARIANT_SUFFIX=""
74 [[ -n "$TAG_VARIANT" ]] && VARIANT_SUFFIX="-$TAG_VARIANT"
75 BASE_TAG_NAME="base-nightly${VARIANT_SUFFIX}"
76 TAG_NAME="nightly${VARIANT_SUFFIX}"
77 BASE_TAG_NAME_COMMIT="base-nightly${VARIANT_SUFFIX}-${BUILDKITE_COMMIT}"
78 TAG_NAME_COMMIT="nightly${VARIANT_SUFFIX}-${BUILDKITE_COMMIT}"
79
80 echo "Pushing base image from ECR: $BASE_ORIG_TAG"
81 echo "Pushing release image from ECR tag: $ORIG_TAG to Docker Hub as $DOCKERHUB_REPO:$TAG_NAME and $DOCKERHUB_REPO:$TAG_NAME_COMMIT"
82 [[ "$DRY_RUN" == "1" ]] && echo "[DRY_RUN] Skipping push to Docker Hub"
83
84 # Login to ECR and pull the images built by build-*-release-image
85 aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/q9t5s3a7
86 docker pull "$BASE_ORIG_TAG"
87 docker pull "${ECR_REPO}:${ORIG_TAG}"
88
89 # Tag for Docker Hub (base-nightly and base-nightly-<commit>, nightly and nightly-<commit>)
90 docker tag "$BASE_ORIG_TAG" "$DOCKERHUB_REPO":"$BASE_TAG_NAME"
91 docker tag "$BASE_ORIG_TAG" "$DOCKERHUB_REPO":"$BASE_TAG_NAME_COMMIT"
92 docker tag "${ECR_REPO}:${ORIG_TAG}" "$DOCKERHUB_REPO":"$TAG_NAME"
93 docker tag "${ECR_REPO}:${ORIG_TAG}" "$DOCKERHUB_REPO":"$TAG_NAME_COMMIT"
94
95 if [[ "$DRY_RUN" == "1" ]]; then
96 echo "[DRY_RUN] Would push $DOCKERHUB_REPO:$BASE_TAG_NAME and $DOCKERHUB_REPO:$BASE_TAG_NAME_COMMIT"
97 echo "[DRY_RUN] Would push $DOCKERHUB_REPO:$TAG_NAME and $DOCKERHUB_REPO:$TAG_NAME_COMMIT"
98 echo "[DRY_RUN] Local tags created. Exiting without push."
99 exit 0
100 fi
101
102 # Push to Docker Hub (docker-login plugin runs before this step in CI)
103 docker push "$DOCKERHUB_REPO":"$BASE_TAG_NAME"
104 docker push "$DOCKERHUB_REPO":"$BASE_TAG_NAME_COMMIT"
105 docker push "$DOCKERHUB_REPO":"$TAG_NAME"
106 docker push "$DOCKERHUB_REPO":"$TAG_NAME_COMMIT"
107
108 echo "Pushed $DOCKERHUB_REPO:$BASE_TAG_NAME and $DOCKERHUB_REPO:$BASE_TAG_NAME_COMMIT"
109 echo "Pushed $DOCKERHUB_REPO:$TAG_NAME and $DOCKERHUB_REPO:$TAG_NAME_COMMIT"