@@ -73,56 +73,42 @@ resolve_ecr_cache_vars() {
7373 # - BUILDKITE_BRANCH
7474 # - BUILDKITE_PULL_REQUEST
7575 # - BUILDKITE_PULL_REQUEST_BASE_BRANCH
76+ # Export environment variables:
77+ # - CACHE_FROM: primary cache source
78+ # - CACHE_FROM_BASE_BRANCH: secondary cache source
79+ # - CACHE_FROM_MAIN: fallback cache source
80+ # - CACHE_TO: cache destination
81+ # Note: CACHE_FROM, CACHE_FROM_BASE_BRANCH, CACHE_FROM_MAIN could be the same.
82+ # This is intended behavior to allow BuildKit to merge all possible cache source
83+ # to maximize cache hit potential, see https://docs.docker.com/build/cache/backends/#multiple-caches
7684
7785 # Define ECR repository URLs for test and main cache
7886 local TEST_CACHE_ECR=" 936637512419.dkr.ecr.us-east-1.amazonaws.com/vllm-ci-test-cache"
7987 local MAIN_CACHE_ECR=" 936637512419.dkr.ecr.us-east-1.amazonaws.com/vllm-ci-postmerge-cache"
8088
81- # login to ECR to check ceche availability
82- aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 936637512419.dkr.ecr.us-east-1.amazonaws.com
83-
8489 if [[ " $BUILDKITE_PULL_REQUEST " == " false" ]]; then
85- # For non-PR builds
8690 if [[ " $BUILDKITE_BRANCH " == " main" ]]; then
87- # For main branch: use main cache for both source and destination
88- CACHE_TO=" ${MAIN_CACHE_ECR} :latest"
89- CACHE_FROM=" ${MAIN_CACHE_ECR} :latest"
91+ local cache=" ${MAIN_CACHE_ECR} :latest"
9092 else
91- # For other branches: use branch-specific cache if it exists
9293 local clean_branch=$( clean_docker_tag " $BUILDKITE_BRANCH " )
93- CACHE_TO=" ${TEST_CACHE_ECR} :${clean_branch} "
94- if docker manifest inspect " ${TEST_CACHE_ECR} :${clean_branch} " & > /dev/null; then
95- # Use branch-specific cache if available
96- CACHE_FROM=" ${TEST_CACHE_ECR} :${clean_branch} "
97- else
98- # Fallback to main cache if branch cache doesn't exist
99- CACHE_FROM=" ${MAIN_CACHE_ECR} :latest"
100- fi
94+ local cache=" ${TEST_CACHE_ECR} :${clean_branch} "
10195 fi
96+ CACHE_TO=" $cache "
97+ CACHE_FROM=" $cache "
98+ CACHE_FROM_BASE_BRANCH=" $cache "
10299 else
103- # For PR builds
104- # Always set cache destination to PR-specific tag
105100 CACHE_TO=" ${TEST_CACHE_ECR} :pr-${BUILDKITE_PULL_REQUEST} "
106-
107- if docker manifest inspect " ${TEST_CACHE_ECR} :pr-${BUILDKITE_PULL_REQUEST} " & > /dev/null; then
108- # Use PR-specific cache if it exists
109- CACHE_FROM=" ${TEST_CACHE_ECR} :pr-${BUILDKITE_PULL_REQUEST} "
110- elif [[ " $BUILDKITE_PULL_REQUEST_BASE_BRANCH " != " main" ]]; then
111- # For PRs targeting non-main branches, try using base branch cache
112- local clean_base=$( clean_docker_tag " $BUILDKITE_PULL_REQUEST_BASE_BRANCH " )
113- if docker manifest inspect " ${TEST_CACHE_ECR} :${clean_base} " & > /dev/null; then
114- CACHE_FROM=" ${TEST_CACHE_ECR} :${clean_base} "
115- else
116- # Fallback to main cache if base branch cache doesn't exist
117- CACHE_FROM=" ${MAIN_CACHE_ECR} :latest"
118- fi
101+ CACHE_FROM=" ${TEST_CACHE_ECR} :pr-${BUILDKITE_PULL_REQUEST} "
102+ if [[ " $BUILDKITE_PULL_REQUEST_BASE_BRANCH " == " main" ]]; then
103+ CACHE_FROM_BASE_BRANCH=" ${MAIN_CACHE_ECR} :latest"
119104 else
120- # Fallback to main cache for PRs targeting main branch
121- CACHE_FROM =" ${MAIN_CACHE_ECR} :latest "
105+ local clean_base= $( clean_docker_tag " $BUILDKITE_PULL_REQUEST_BASE_BRANCH " )
106+ CACHE_FROM_BASE_BRANCH =" ${TEST_CACHE_ECR} : ${clean_base} "
122107 fi
123108 fi
124- # Export variables
125- export CACHE_FROM CACHE_TO
109+
110+ CACHE_FROM_MAIN=" ${MAIN_CACHE_ECR} :latest"
111+ export CACHE_FROM CACHE_FROM_BASE_BRANCH CACHE_FROM_MAIN CACHE_TO
126112}
127113
128114upload_pipeline () {
@@ -157,11 +143,13 @@ upload_pipeline() {
157143
158144 # Resolve CACHE_FROM and CACHE_TO for ECR Registry Caching
159145 resolve_ecr_cache_vars
160- if [[ -z " ${CACHE_FROM:- } " ]] || [[ -z " ${CACHE_TO:- } " ]]; then
161- echo " Error: CACHE_FROM or CACHE_TO not set after resolve_ecr_cache_vars"
146+ if [[ -z " ${CACHE_FROM:- } " ]] || [[ -z " ${CACHE_FROM_BASE_BRANCH :- } " ]] || [[ -z " ${CACHE_FROM_MAIN :- } " ]] || [[ -z " ${ CACHE_TO:- }" ]]; then
147+ echo " Error: CACHE_FROM, CACHE_FROM_BASE_BRANCH, CACHE_FROM_MAIN, or CACHE_TO not set after resolve_ecr_cache_vars"
162148 exit 1
163149 else
164150 echo " Resolved CACHE_FROM: ${CACHE_FROM} "
151+ echo " Resolved CACHE_FROM_BASE_BRANCH: ${CACHE_FROM_BASE_BRANCH} "
152+ echo " Resolved CACHE_FROM_MAIN: ${CACHE_FROM_MAIN} "
165153 echo " Resolved CACHE_TO: ${CACHE_TO} "
166154 fi
167155
@@ -181,6 +169,8 @@ upload_pipeline() {
181169 -D cov_enabled=" $COV_ENABLED " \
182170 -D vllm_ci_branch=" $VLLM_CI_BRANCH " \
183171 -D cache_from=" $CACHE_FROM " \
172+ -D cache_from_base_branch=" $CACHE_FROM_BASE_BRANCH " \
173+ -D cache_from_main=" $CACHE_FROM_MAIN " \
184174 -D cache_to=" $CACHE_TO " \
185175 | sed ' /^[[:space:]]*$/d' \
186176 > pipeline.yaml
0 commit comments