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
|
||||
# (inherited from base ENV) so user-installed packages land on the named
|
||||
# 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 ; \
|
||||
else \
|
||||
NPM_CONFIG_PREFIX=/usr npm install -g @earendil-works/pi-coding-agent@${PI_VERSION} ; \
|
||||
fi && \
|
||||
pi --version && \
|
||||
git clone --depth 1 --branch "${PI_TOOLKIT_REF}" \
|
||||
https://gitea.jordbo.se/joakimp/pi-toolkit.git /opt/pi-toolkit && \
|
||||
git clone --depth 1 --branch "${PI_EXTENSIONS_REF}" \
|
||||
https://gitea.jordbo.se/joakimp/pi-extensions.git /opt/pi-extensions && \
|
||||
git_clone_retry https://gitea.jordbo.se/joakimp/pi-toolkit.git "${PI_TOOLKIT_REF}" /opt/pi-toolkit && \
|
||||
git_clone_retry https://gitea.jordbo.se/joakimp/pi-extensions.git "${PI_EXTENSIONS_REF}" /opt/pi-extensions && \
|
||||
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)"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user