From c3fd4f04cf1a951a06a486453e58838a2b65101a Mon Sep 17 00:00:00 2001 From: William Aaron Cheung Date: Tue, 11 Aug 2026 15:53:52 +0800 Subject: [PATCH] ci: bump anthropics/claude-code-action to 5ef2e55 (fixes Bun cpSync symlink ENOENT) The pr-review job failed with "ENOENT: no such file or directory, symlink" whenever the target repo had a symlinked sensitive path. Root cause: at the pinned c3d45e8, claude-code-action's restoreConfigFromBase() (src/github/operations/restore-config.ts) snapshots sensitive paths with cpSync(p, ".claude-pr/" + p, { recursive: true }) before ".claude-pr/" exists. Under Bun, cpSync does not mkdir the destination parent when the source is a symlink, so recreating the symlink throws ENOENT and the whole review job dies. Node does not have this bug; Bun does (reproduced on 1.3.14). This made the failure look flaky: it only triggers when the first-existing sensitive path is a symlink, e.g. CLAUDE.md (mode 120000) in stateless-validator. Upstream fixed this in anthropics/claude-code-action#1596 ("Scope the config snapshot to files inside the working tree"), which rewrote the snapshot to use cpSync(src, dest, { recursive: true, dereference: true, filter }) plus mkdirSync(dirname(dest), { recursive: true }) on every write path. Symlinks are now copied as dereferenced regular files, so Bun's symlink code path is never taken. Bumps all five pins of the action (pr-review x2, interactive, issue-triage, label-check) to 5ef2e550a465a721f4f45e4a7d3c340c873e1dcc, which is a descendant of the fix and still v1. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_013Q6FAhuNAb1z9mAXG2f7ky --- .github/actions/claude-interactive/action.yml | 2 +- .github/actions/claude-issue-triage/action.yml | 2 +- .github/actions/claude-label-check/action.yml | 2 +- .github/actions/claude-pr-review/action.yml | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/actions/claude-interactive/action.yml b/.github/actions/claude-interactive/action.yml index a150636..ae8e16a 100644 --- a/.github/actions/claude-interactive/action.yml +++ b/.github/actions/claude-interactive/action.yml @@ -31,7 +31,7 @@ runs: echo "allowed_tools=${allowed_tools}" >> "$GITHUB_OUTPUT" - - uses: anthropics/claude-code-action@c3d45e8e941e1b2ad7b278c57482d9c5bf1f35b3 # v1 + - uses: anthropics/claude-code-action@5ef2e550a465a721f4f45e4a7d3c340c873e1dcc # v1 with: claude_code_oauth_token: ${{ inputs.claude_code_oauth_token }} allowed_bots: ${{ inputs.allowed_bots }} diff --git a/.github/actions/claude-issue-triage/action.yml b/.github/actions/claude-issue-triage/action.yml index 06f8f7d..a4bd25d 100644 --- a/.github/actions/claude-issue-triage/action.yml +++ b/.github/actions/claude-issue-triage/action.yml @@ -35,7 +35,7 @@ runs: echo "allowed_tools=${allowed_tools}" >> "$GITHUB_OUTPUT" - - uses: anthropics/claude-code-action@c3d45e8e941e1b2ad7b278c57482d9c5bf1f35b3 # v1 + - uses: anthropics/claude-code-action@5ef2e550a465a721f4f45e4a7d3c340c873e1dcc # v1 with: claude_code_oauth_token: ${{ inputs.claude_code_oauth_token }} allowed_bots: ${{ inputs.allowed_bots }} diff --git a/.github/actions/claude-label-check/action.yml b/.github/actions/claude-label-check/action.yml index 35a4479..18b2700 100644 --- a/.github/actions/claude-label-check/action.yml +++ b/.github/actions/claude-label-check/action.yml @@ -35,7 +35,7 @@ runs: echo "allowed_tools=${allowed_tools}" >> "$GITHUB_OUTPUT" - - uses: anthropics/claude-code-action@c3d45e8e941e1b2ad7b278c57482d9c5bf1f35b3 # v1 + - uses: anthropics/claude-code-action@5ef2e550a465a721f4f45e4a7d3c340c873e1dcc # v1 with: claude_code_oauth_token: ${{ inputs.claude_code_oauth_token }} allowed_bots: ${{ inputs.allowed_bots }} diff --git a/.github/actions/claude-pr-review/action.yml b/.github/actions/claude-pr-review/action.yml index 0bd03a5..fb64076 100644 --- a/.github/actions/claude-pr-review/action.yml +++ b/.github/actions/claude-pr-review/action.yml @@ -145,7 +145,7 @@ runs: id: review if: steps.prepare.outputs.mode != 'skip' continue-on-error: true - uses: anthropics/claude-code-action@c3d45e8e941e1b2ad7b278c57482d9c5bf1f35b3 # v1 + uses: anthropics/claude-code-action@5ef2e550a465a721f4f45e4a7d3c340c873e1dcc # v1 with: claude_code_oauth_token: ${{ inputs.claude_code_oauth_token }} allowed_bots: ${{ inputs.allowed_bots }} @@ -268,7 +268,7 @@ runs: steps.prepare.outputs.mode != 'skip' && (steps.review.outcome == 'failure' || steps.review.outputs.structured_output == '') - uses: anthropics/claude-code-action@c3d45e8e941e1b2ad7b278c57482d9c5bf1f35b3 # v1 + uses: anthropics/claude-code-action@5ef2e550a465a721f4f45e4a7d3c340c873e1dcc # v1 with: claude_code_oauth_token: ${{ inputs.claude_code_oauth_token }} allowed_bots: ${{ inputs.allowed_bots }}