From ce31cb18531365edffb3fdb134008393a44fad81 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Mon, 23 Mar 2026 06:52:27 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20bun.lock=20is=20gitignored=20=E2=80=94?= =?UTF-8?q?=20use=20package.json=20only=20for=20Docker=20cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bun.lock is in .gitignore so it doesn't exist after checkout. Dockerfile and workflows now use package.json only for deps caching. Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/docker/Dockerfile.ci | 8 +++++--- .github/workflows/ci-image.yml | 10 +--------- .github/workflows/evals.yml | 8 ++++---- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/.github/docker/Dockerfile.ci b/.github/docker/Dockerfile.ci index 1c136a8b..c1fcec68 100644 --- a/.github/docker/Dockerfile.ci +++ b/.github/docker/Dockerfile.ci @@ -30,8 +30,8 @@ ENV PATH="$BUN_INSTALL/bin:$PATH" # Claude CLI RUN npm i -g @anthropic-ai/claude-code -# Pre-install dependencies (cached layer — only rebuilds when lockfile changes) -COPY bun.lock package.json /workspace/ +# Pre-install dependencies (cached layer — only rebuilds when package.json changes) +COPY package.json /workspace/ WORKDIR /workspace RUN bun install && rm -rf /tmp/* @@ -40,4 +40,6 @@ RUN bun --version && node --version && claude --version && jq --version && gh -- # At runtime: checkout overwrites /workspace, but node_modules persists # if we move it out of the way and symlink back -RUN mv /workspace/node_modules /opt/node_modules_cache +# Save node_modules + package.json snapshot for cache validation at runtime +RUN mv /workspace/node_modules /opt/node_modules_cache \ + && cp /workspace/package.json /opt/node_modules_cache/.package.json diff --git a/.github/workflows/ci-image.yml b/.github/workflows/ci-image.yml index 19099334..00d38637 100644 --- a/.github/workflows/ci-image.yml +++ b/.github/workflows/ci-image.yml @@ -8,14 +8,6 @@ on: branches: [main] paths: - '.github/docker/Dockerfile.ci' - - 'bun.lock' - - 'package.json' - # Build on PRs that change the image (so first PR run has it) - pull_request: - branches: [main] - paths: - - '.github/docker/Dockerfile.ci' - - 'bun.lock' - 'package.json' # Manual trigger workflow_dispatch: @@ -30,7 +22,7 @@ jobs: - uses: actions/checkout@v4 # Copy lockfile + package.json into Docker build context - - run: cp bun.lock package.json .github/docker/ + - run: cp package.json .github/docker/ - uses: docker/login-action@v3 with: diff --git a/.github/workflows/evals.yml b/.github/workflows/evals.yml index 5a05b4ea..2a7009d5 100644 --- a/.github/workflows/evals.yml +++ b/.github/workflows/evals.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v4 - id: meta - run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'bun.lock', 'package.json') }}" >> "$GITHUB_OUTPUT" + run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'package.json') }}" >> "$GITHUB_OUTPUT" - uses: docker/login-action@v3 with: @@ -41,7 +41,7 @@ jobs: fi - if: steps.check.outputs.exists == 'false' - run: cp bun.lock package.json .github/docker/ + run: cp package.json .github/docker/ - if: steps.check.outputs.exists == 'false' uses: docker/build-push-action@v6 @@ -96,10 +96,10 @@ jobs: fetch-depth: 0 # Restore pre-installed node_modules from Docker image (~1s vs ~15s install) - # If lockfile changed since image was built, fall back to fresh install + # If package.json changed since image was built, fall back to fresh install - name: Restore deps run: | - if diff -q /opt/node_modules_cache/.package-lock.json package.json >/dev/null 2>&1; then + if [ -d /opt/node_modules_cache ] && diff -q /opt/node_modules_cache/.package.json package.json >/dev/null 2>&1; then cp -al /opt/node_modules_cache node_modules else bun install