Skip to content

Commit 22841e9

Browse files
committed
Attempt to retry if docker.io timesout
This won't fix network outages, but it may self heal for smaller network transient outages. Signed-off-by: Russell McGuire <russell.w.mcguire@intel.com>
1 parent cf405bd commit 22841e9

2 files changed

Lines changed: 50 additions & 18 deletions

File tree

.github/workflows/build-multi-static.yml

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,33 @@ jobs:
108108
docker login -u sys-lzdev --password-stdin ghcr.io
109109
- name: Build image
110110
if: matrix.os.name != 'windows'
111+
# Retry the build to ride out transient Docker Hub registry timeouts
112+
# (e.g. `dial tcp ...:443: i/o timeout` resolving docker/dockerfile:1.4).
111113
run: |
112114
docker info
113-
docker build \
114-
--platform linux/amd64 \
115-
${{ matrix.os.vmaj != '' && format(' \
116-
--build-arg VMAJ={0} \
117-
--build-arg VMIN={1} ', matrix.os.vmaj, matrix.os.vmin) || ' '
118-
}}\
119-
--pull \
120-
--tag ${DOCKER_IMAGE}:${{ needs.config.outputs.ref-slug }} \
121-
- < .github/docker/${{ matrix.os.name }}.Dockerfile
115+
build_image() {
116+
docker build \
117+
--platform linux/amd64 \
118+
${{ matrix.os.vmaj != '' && format(' \
119+
--build-arg VMAJ={0} \
120+
--build-arg VMIN={1} ', matrix.os.vmaj, matrix.os.vmin) || ' '
121+
}}\
122+
--pull \
123+
--tag ${DOCKER_IMAGE}:${{ needs.config.outputs.ref-slug }} \
124+
- < .github/docker/${{ matrix.os.name }}.Dockerfile
125+
}
126+
attempt=0
127+
max_attempts=3
128+
until build_image; do
129+
attempt=$((attempt+1))
130+
if [ "$attempt" -ge "$max_attempts" ]; then
131+
echo "docker build failed after ${attempt} attempts" >&2
132+
exit 1
133+
fi
134+
delay=$((attempt*15))
135+
echo "docker build attempt ${attempt} failed; retrying in ${delay}s" >&2
136+
sleep "$delay"
137+
done
122138
- name: Setup Windows build environment
123139
if: matrix.os.name == 'windows'
124140
uses: ilammy/msvc-dev-cmd@v1

.github/workflows/build-multi.yml

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,33 @@ jobs:
133133
docker info
134134
- name: Build image
135135
if: matrix.os.name != 'windows'
136+
# Retry the build to ride out transient Docker Hub registry timeouts
137+
# (e.g. `dial tcp ...:443: i/o timeout` resolving docker/dockerfile:1.4).
136138
run: |
137139
docker info
138-
docker build \
139-
--platform linux/amd64 \
140-
${{ matrix.os.vmaj != '' && format(' \
141-
--build-arg VMAJ={0} \
142-
--build-arg VMIN={1} ', matrix.os.vmaj, matrix.os.vmin) || ' '
143-
}}\
144-
--pull \
145-
--tag ${DOCKER_IMAGE}:${{ needs.config.outputs.ref-slug }} \
146-
- < .github/docker/${{ matrix.os.name }}.Dockerfile
140+
build_image() {
141+
docker build \
142+
--platform linux/amd64 \
143+
${{ matrix.os.vmaj != '' && format(' \
144+
--build-arg VMAJ={0} \
145+
--build-arg VMIN={1} ', matrix.os.vmaj, matrix.os.vmin) || ' '
146+
}}\
147+
--pull \
148+
--tag ${DOCKER_IMAGE}:${{ needs.config.outputs.ref-slug }} \
149+
- < .github/docker/${{ matrix.os.name }}.Dockerfile
150+
}
151+
attempt=0
152+
max_attempts=3
153+
until build_image; do
154+
attempt=$((attempt+1))
155+
if [ "$attempt" -ge "$max_attempts" ]; then
156+
echo "docker build failed after ${attempt} attempts" >&2
157+
exit 1
158+
fi
159+
delay=$((attempt*15))
160+
echo "docker build attempt ${attempt} failed; retrying in ${delay}s" >&2
161+
sleep "$delay"
162+
done
147163
- name: Setup Windows build environment
148164
if: matrix.os.name == 'windows'
149165
uses: ilammy/msvc-dev-cmd@v1

0 commit comments

Comments
 (0)