@@ -92,21 +92,38 @@ if [ -f "$docker_dir/$image/Dockerfile" ]; then
92
92
# Print docker version
93
93
docker --version
94
94
95
- # On non-CI or PR jobs, we don't have permissions to write to the registry cache, so we should
96
- # not use `docker login` nor caching.
97
- if [[ " $CI " == " " ]] || [[ " $PR_CI_JOB " == " 1" ]];
95
+ REGISTRY=ghcr.io
96
+ # PR CI runs on rust-lang, but we want to use the cache from rust-lang-ci
97
+ REGISTRY_USERNAME=rust-lang-ci
98
+ # Tag used to push the final Docker image, so that it can be pulled by e.g. rustup
99
+ IMAGE_TAG=${REGISTRY} /${REGISTRY_USERNAME} /rust-ci:${cksum}
100
+ # Tag used to cache the Docker build
101
+ # It seems that it cannot be the same as $IMAGE_TAG, otherwise it overwrites the cache
102
+ CACHE_IMAGE_TAG=${REGISTRY} /${REGISTRY_USERNAME} /rust-ci-cache:${cksum}
103
+
104
+ # On non-CI jobs, we don't do any caching.
105
+ if [[ " $CI " == " " ]];
98
106
then
99
107
retry docker build --rm -t rust-ci -f " $dockerfile " " $context "
100
- else
101
- REGISTRY=ghcr.io
102
- # Most probably rust-lang-ci, but in general the owner of the repository where CI runs
103
- REGISTRY_USERNAME=${GITHUB_REPOSITORY_OWNER}
104
- # Tag used to push the final Docker image, so that it can be pulled by e.g. rustup
105
- IMAGE_TAG=${REGISTRY} /${REGISTRY_USERNAME} /rust-ci:${cksum}
106
- # Tag used to cache the Docker build
107
- # It seems that it cannot be the same as $IMAGE_TAG, otherwise it overwrites the cache
108
- CACHE_IMAGE_TAG=${REGISTRY} /${REGISTRY_USERNAME} /rust-ci-cache:${cksum}
108
+ # On PR CI jobs, we don't have permissions to write to the registry cache,
109
+ # but we can still read from it.
110
+ elif [[ " $PR_CI_JOB " == " 1" ]];
111
+ then
112
+ # Enable a new Docker driver so that --cache-from works with a registry backend
113
+ docker buildx create --use --driver docker-container
109
114
115
+ # Build the image using registry caching backend
116
+ retry docker \
117
+ buildx \
118
+ build \
119
+ --rm \
120
+ -t rust-ci \
121
+ -f " $dockerfile " \
122
+ --cache-from type=registry,ref=${CACHE_IMAGE_TAG} \
123
+ --output=type=docker \
124
+ " $context "
125
+ # On auto/try builds, we can also write to the cache.
126
+ else
110
127
# Log into the Docker registry, so that we can read/write cache and the final image
111
128
echo ${DOCKER_TOKEN} | docker login ${REGISTRY} \
112
129
--username ${REGISTRY_USERNAME} \
0 commit comments