Dockerfile: retry git clone on transient gitea HTTP 500s
gitea.jordbo.se occasionally returns Internal Server Error (HTTP 500) on the first request after idle, breaking pi-toolkit/pi-extensions clone during build. Wrap clones in a 5-attempt retry with linear backoff (5s, 10s, 15s, 20s, 25s = up to ~75s total). Same fix should be applied to opencode-devbox/Dockerfile.variant.
This commit is contained in:
+17
-5
@@ -26,16 +26,28 @@ ARG PI_EXTENSIONS_REF=main
|
|||||||
# At runtime, NPM_CONFIG_PREFIX is reset to /home/developer/.pi/npm-global
|
# At runtime, NPM_CONFIG_PREFIX is reset to /home/developer/.pi/npm-global
|
||||||
# (inherited from base ENV) so user-installed packages land on the named
|
# (inherited from base ENV) so user-installed packages land on the named
|
||||||
# volume and survive container recreate.
|
# volume and survive container recreate.
|
||||||
RUN if [ "${PI_VERSION}" = "latest" ]; then \
|
#
|
||||||
|
# git clone is wrapped in a retry loop because gitea.jordbo.se occasionally
|
||||||
|
# returns transient HTTP 500s on the first request after idle.
|
||||||
|
RUN set -e && \
|
||||||
|
git_clone_retry() { \
|
||||||
|
url="$1"; ref="$2"; dest="$3"; \
|
||||||
|
for i in 1 2 3 4 5; do \
|
||||||
|
if git clone --depth 1 --branch "$ref" "$url" "$dest"; then return 0; fi; \
|
||||||
|
rm -rf "$dest"; \
|
||||||
|
echo "git clone $url failed (attempt $i/5), retrying in $((i*5))s..."; \
|
||||||
|
sleep $((i*5)); \
|
||||||
|
done; \
|
||||||
|
return 1; \
|
||||||
|
} && \
|
||||||
|
if [ "${PI_VERSION}" = "latest" ]; then \
|
||||||
NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent ; \
|
NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent ; \
|
||||||
else \
|
else \
|
||||||
NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent@${PI_VERSION} ; \
|
NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent@${PI_VERSION} ; \
|
||||||
fi && \
|
fi && \
|
||||||
pi --version && \
|
pi --version && \
|
||||||
git clone --depth 1 --branch "${PI_TOOLKIT_REF}" \
|
git_clone_retry https://gitea.jordbo.se/joakimp/pi-toolkit.git "${PI_TOOLKIT_REF}" /opt/pi-toolkit && \
|
||||||
https://gitea.jordbo.se/joakimp/pi-toolkit.git /opt/pi-toolkit && \
|
git_clone_retry https://gitea.jordbo.se/joakimp/pi-extensions.git "${PI_EXTENSIONS_REF}" /opt/pi-extensions && \
|
||||||
git clone --depth 1 --branch "${PI_EXTENSIONS_REF}" \
|
|
||||||
https://gitea.jordbo.se/joakimp/pi-extensions.git /opt/pi-extensions && \
|
|
||||||
echo "pi-toolkit at $(cd /opt/pi-toolkit && git rev-parse --short HEAD)" && \
|
echo "pi-toolkit at $(cd /opt/pi-toolkit && git rev-parse --short HEAD)" && \
|
||||||
echo "pi-extensions at $(cd /opt/pi-extensions && git rev-parse --short HEAD)"
|
echo "pi-extensions at $(cd /opt/pi-extensions && git rev-parse --short HEAD)"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user