1111 type : string
1212
1313env :
14- SEMVER_REF : ${{ inputs.ref || github.ref }}
14+ SEMVER_REF : ${{ inputs.ref || github.ref_name }}
1515
1616jobs :
1717 build-amd64 :
1818 if : github.repository == 'Project-OSRM/osrm-backend'
1919 strategy : &docker-base-image-matrix
2020 matrix :
21- docker-base-image : ["debian", "alpine" ]
21+ docker-base-image : ["debian"]
2222 runs-on : ubuntu-latest
2323 steps :
24+ - name : Configure DNS servers
25+ if : runner.os == 'Linux'
26+ run : |
27+ sudo rm -f /etc/resolv.conf
28+ {
29+ echo "nameserver 1.1.1.1"
30+ echo "nameserver 8.8.8.8"
31+ } | sudo tee /etc/resolv.conf > /dev/null
2432 - name : Check out the repo
25- uses : actions/checkout@v6
33+ uses : actions/checkout@v7
2634 with :
2735 ref : ${{ inputs.ref || github.ref }}
2836
3442 uses : docker/metadata-action@v6
3543 with :
3644 images : ghcr.io/${{ github.repository }}
45+ flavor : |
46+ latest=false
3747 tags : |
48+ type=raw,value=latest,suffix=-amd64-${{ matrix.docker-base-image }}
3849 type=semver,pattern=v{{version}},value=${{ env.SEMVER_REF }},suffix=-amd64-${{ matrix.docker-base-image }}
3950 type=semver,pattern={{version}},value=${{ env.SEMVER_REF }},suffix=-amd64-${{ matrix.docker-base-image }}
4051 type=semver,pattern={{major}}.{{minor}},value=${{ env.SEMVER_REF }},suffix=-amd64-${{ matrix.docker-base-image }}
8697 file : ./docker/Dockerfile-${{ matrix.docker-base-image }}
8798 tags : ${{ steps.metadebug.outputs.tags }}
8899 labels : ${{ steps.metadebug.outputs.labels }}
100+ cache-from : type=gha,scope=docker-${{ matrix.docker-base-image }}
89101 build-args : |
90102 DOCKER_TAG=${{ join(steps.metadebug.outputs.tags ) }}-${{ matrix.docker-base-image }}
91103
97109 file : ./docker/Dockerfile-${{ matrix.docker-base-image }}
98110 tags : ${{ steps.metaassertions.outputs.tags }}
99111 labels : ${{ steps.metaassertions.outputs.labels }}
112+ cache-from : type=gha,scope=docker-${{ matrix.docker-base-image }}
100113 build-args : |
101114 DOCKER_TAG=${{ join(steps.metaassertions.outputs.tags ) }}-${{ matrix.docker-base-image }}
102115
@@ -108,6 +121,7 @@ jobs:
108121 file : ./docker/Dockerfile-${{ matrix.docker-base-image }}
109122 tags : ${{ steps.meta.outputs.tags }}
110123 labels : ${{ steps.meta.outputs.labels }}
124+ cache-from : type=gha,scope=docker-${{ matrix.docker-base-image }}
111125 build-args : |
112126 DOCKER_TAG=${{ join(steps.meta.outputs.tags ) }}-${{ matrix.docker-base-image }}
113127
@@ -116,8 +130,16 @@ jobs:
116130 strategy : *docker-base-image-matrix
117131 runs-on : ubuntu-24.04-arm
118132 steps :
133+ - name : Configure DNS servers
134+ if : runner.os == 'Linux'
135+ run : |
136+ sudo rm -f /etc/resolv.conf
137+ {
138+ echo "nameserver 1.1.1.1"
139+ echo "nameserver 8.8.8.8"
140+ } | sudo tee /etc/resolv.conf > /dev/null
119141 - name : Check out the repo
120- uses : actions/checkout@v6
142+ uses : actions/checkout@v7
121143 with :
122144 ref : ${{ inputs.ref || github.ref }}
123145
@@ -129,7 +151,10 @@ jobs:
129151 uses : docker/metadata-action@v6
130152 with :
131153 images : ghcr.io/${{ github.repository }}
154+ flavor : |
155+ latest=false
132156 tags : |
157+ type=raw,value=latest,suffix=-arm64-${{ matrix.docker-base-image }}
133158 type=semver,pattern=v{{version}},value=${{ env.SEMVER_REF }},suffix=-arm64-${{ matrix.docker-base-image }}
134159 type=semver,pattern={{version}},value=${{ env.SEMVER_REF }},suffix=-arm64-${{ matrix.docker-base-image }}
135160 type=semver,pattern={{major}}.{{minor}},value=${{ env.SEMVER_REF }},suffix=-arm64-${{ matrix.docker-base-image }}
@@ -181,6 +206,7 @@ jobs:
181206 file : ./docker/Dockerfile-${{ matrix.docker-base-image }}
182207 tags : ${{ steps.metadebug.outputs.tags }}
183208 labels : ${{ steps.metadebug.outputs.labels }}
209+ cache-from : type=gha,scope=docker-${{ matrix.docker-base-image }}
184210 build-args : |
185211 DOCKER_TAG=${{ join(steps.metadebug.outputs.tags ) }}-${{ matrix.docker-base-image }}
186212
@@ -192,6 +218,7 @@ jobs:
192218 file : ./docker/Dockerfile-${{ matrix.docker-base-image }}
193219 tags : ${{ steps.metaassertions.outputs.tags }}
194220 labels : ${{ steps.metaassertions.outputs.labels }}
221+ cache-from : type=gha,scope=docker-${{ matrix.docker-base-image }}
195222 build-args : |
196223 DOCKER_TAG=${{ join(steps.metaassertions.outputs.tags ) }}-${{ matrix.docker-base-image }}
197224
@@ -203,6 +230,7 @@ jobs:
203230 file : ./docker/Dockerfile-${{ matrix.docker-base-image }}
204231 tags : ${{ steps.meta.outputs.tags }}
205232 labels : ${{ steps.meta.outputs.labels }}
233+ cache-from : type=gha,scope=docker-${{ matrix.docker-base-image }}
206234 build-args : |
207235 DOCKER_TAG=${{ join(steps.meta.outputs.tags ) }}-${{ matrix.docker-base-image }}
208236
@@ -212,6 +240,14 @@ jobs:
212240 strategy : *docker-base-image-matrix
213241 runs-on : ubuntu-latest
214242 steps :
243+ - name : Configure DNS servers
244+ if : runner.os == 'Linux'
245+ run : |
246+ sudo rm -f /etc/resolv.conf
247+ {
248+ echo "nameserver 1.1.1.1"
249+ echo "nameserver 8.8.8.8"
250+ } | sudo tee /etc/resolv.conf > /dev/null
215251 - name : Set up Docker Buildx
216252 uses : docker/setup-buildx-action@v4
217253
@@ -254,7 +290,11 @@ jobs:
254290 MAJOR_MINOR="${VERSION%.*}"
255291 TAGS+=("$VERSION" "$MAJOR_MINOR")
256292 fi
257-
293+
294+ # Always include latest so the multi-arch manifest serves as the
295+ # default image for docker pull without an explicit version tag.
296+ TAGS+=("latest")
297+
258298 # Deduplicate tags while preserving order
259299 MANIFEST_TAGS=()
260300 declare -A SEEN_TAGS=()
@@ -269,8 +309,21 @@ jobs:
269309
270310 for IMAGE_SUFFIX in "" "-debug" "-assertions"; do
271311 for TAG in "${MANIFEST_TAGS[@]}"; do
312+ # The "latest" tag only applies to the base image, not to
313+ # -debug or -assertions variant suffixes.
314+ if [ "$TAG" = "latest" ] && [ -n "$IMAGE_SUFFIX" ]; then
315+ continue
316+ fi
272317 docker buildx imagetools create -t "$REGISTRY:${TAG}${IMAGE_SUFFIX}-${{ matrix.docker-base-image }}" \
273318 "$REGISTRY:${TAG}${IMAGE_SUFFIX}-amd64-${{ matrix.docker-base-image }}" \
274319 "$REGISTRY:${TAG}${IMAGE_SUFFIX}-arm64-${{ matrix.docker-base-image }}"
320+
321+ # Additionally create a bare "latest" multi-arch manifest (no
322+ # -debian suffix) so that "docker pull …:latest" works as expected.
323+ if [ "$TAG" = "latest" ] && [ -z "$IMAGE_SUFFIX" ]; then
324+ docker buildx imagetools create -t "$REGISTRY:latest" \
325+ "$REGISTRY:latest-amd64-${{ matrix.docker-base-image }}" \
326+ "$REGISTRY:latest-arm64-${{ matrix.docker-base-image }}"
327+ fi
275328 done
276329 done
0 commit comments