diff --git a/Dockerfile b/Dockerfile index 79d090d..746e58d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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)"