diff --git a/.github/docker/Dockerfile.ci b/.github/docker/Dockerfile.ci index 9dff7c0a..ebf4a4d1 100644 --- a/.github/docker/Dockerfile.ci +++ b/.github/docker/Dockerfile.ci @@ -89,10 +89,14 @@ RUN for i in 1 2 3; do \ && fc-cache -f \ && rm -rf /var/lib/apt/lists/* -# Pre-install dependencies (cached layer — only rebuilds when package.json changes) -COPY package.json /workspace/ +# Pre-install dependencies (cached layer — only rebuilds when package.json or +# bun.lock changes). Copy BOTH so install is deterministic and matches local +# resolution. Without bun.lock here, bun install resolved transitive deps +# differently in CI vs local (observed on v1.28.0.0: socks landed but +# smart-buffer + ip-address didn't make it into the cached node_modules). +COPY package.json bun.lock /workspace/ WORKDIR /workspace -RUN bun install && rm -rf /tmp/* +RUN bun install --frozen-lockfile && rm -rf /tmp/* # Install Playwright Chromium to a shared location accessible by all users ENV PLAYWRIGHT_BROWSERS_PATH=/opt/playwright-browsers diff --git a/.github/workflows/ci-image.yml b/.github/workflows/ci-image.yml index 00d38637..1ca283ad 100644 --- a/.github/workflows/ci-image.yml +++ b/.github/workflows/ci-image.yml @@ -9,6 +9,7 @@ on: paths: - '.github/docker/Dockerfile.ci' - 'package.json' + - 'bun.lock' # Manual trigger workflow_dispatch: @@ -22,7 +23,7 @@ jobs: - uses: actions/checkout@v4 # Copy lockfile + package.json into Docker build context - - run: cp package.json .github/docker/ + - run: cp package.json bun.lock .github/docker/ - uses: docker/login-action@v3 with: diff --git a/.github/workflows/evals-periodic.yml b/.github/workflows/evals-periodic.yml index 20035c45..df16bcbc 100644 --- a/.github/workflows/evals-periodic.yml +++ b/.github/workflows/evals-periodic.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v4 - id: meta - run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'package.json') }}" >> "$GITHUB_OUTPUT" + run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'package.json', 'bun.lock') }}" >> "$GITHUB_OUTPUT" - uses: docker/login-action@v3 with: @@ -43,7 +43,7 @@ jobs: fi - if: steps.check.outputs.exists == 'false' - run: cp package.json .github/docker/ + run: cp package.json bun.lock .github/docker/ - if: steps.check.outputs.exists == 'false' uses: docker/build-push-action@v6 diff --git a/.github/workflows/evals.yml b/.github/workflows/evals.yml index a7b1fd99..45d4b693 100644 --- a/.github/workflows/evals.yml +++ b/.github/workflows/evals.yml @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v4 - id: meta - run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'package.json') }}" >> "$GITHUB_OUTPUT" + run: echo "tag=${{ env.IMAGE }}:${{ hashFiles('.github/docker/Dockerfile.ci', 'package.json', 'bun.lock') }}" >> "$GITHUB_OUTPUT" - uses: docker/login-action@v3 with: @@ -43,7 +43,7 @@ jobs: fi - if: steps.check.outputs.exists == 'false' - run: cp package.json .github/docker/ + run: cp package.json bun.lock .github/docker/ - if: steps.check.outputs.exists == 'false' uses: docker/build-push-action@v6