1
0
Fork 0

feat(docker): implement retry logic for Bun installation to handle flaky downloads

This commit is contained in:
Jason Fraley 2026-08-15 16:57:31 -04:00
parent 3685644c74
commit 9dd3226c0a

View file

@ -44,7 +44,19 @@ RUN curl -fsSL https://bun.sh/install | bash -s "bun-v1.3.11" \
FROM base AS prod-deps FROM base AS prod-deps
WORKDIR /app WORKDIR /app
COPY package.json bun.lock ./ COPY package.json bun.lock ./
RUN bun install --production --frozen-lockfile # Retry with a fresh cache dir per attempt: a corrupt tarball download
# (flaky registry/proxy → "Integrity check failed for tarball: drizzle-kit")
# must never be reused from a bun cache, across attempts or cached layers.
RUN for i in 1 2 3; do \
rm -rf /tmp/bun-cache; \
if bun install --production --frozen-lockfile --cache-dir=/tmp/bun-cache; then \
exit 0; \
fi; \
echo "bun install (production) attempt $i/3 failed, retrying in 5s..."; \
sleep 5; \
done; \
echo "bun install (production) failed after 3 attempts"; \
exit 1
# ─────────────────────────── builder ───────────────────────────── # ─────────────────────────── builder ─────────────────────────────
# Full install (incl. devDeps) + Next.js standalone build. # Full install (incl. devDeps) + Next.js standalone build.
@ -56,7 +68,18 @@ FROM base AS builder
RUN apk add --no-cache git RUN apk add --no-cache git
WORKDIR /app WORKDIR /app
COPY package.json bun.lock ./ COPY package.json bun.lock ./
RUN bun install --frozen-lockfile # Same retry + fresh-cache pattern as prod-deps (corrupt tarball downloads
# fail bun's integrity check; a fresh --cache-dir per attempt prevents reuse).
RUN for i in 1 2 3; do \
rm -rf /tmp/bun-cache; \
if bun install --frozen-lockfile --cache-dir=/tmp/bun-cache; then \
exit 0; \
fi; \
echo "bun install attempt $i/3 failed, retrying in 5s..."; \
sleep 5; \
done; \
echo "bun install failed after 3 attempts"; \
exit 1
COPY . . COPY . .
# next.config.mjs requires `output: "standalone"` (already set). # next.config.mjs requires `output: "standalone"` (already set).
# `bun run build` == `bun run generate:version-info && next build --webpack`. # `bun run build` == `bun run generate:version-info && next build --webpack`.