From 9bfe78850d1f6cbd39e4b08ca7c148ae5ad069a1 Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 9 Sep 2026 02:00:32 +0300 Subject: [PATCH] ci: install Claude Code binary ourselves before the review action (#503) claude-code-action v1.0.218 (Claude Code 2.1.265) runs `claude install`, which on ubuntu-latest sometimes leaves no launcher at ~/.local/bin/claude while still reporting success; the action trusts the exit code and the SDK then fails with ENOENT (anthropics/claude-code-action#1817). Four review runs in a row died this way after 22:27 UTC 08.09. Add a step that fetches the exact version the action pins (read from its run.ts, fallback 2.1.265) from downloads.claude.ai, verifies the sha256 from the release manifest, checks `--version`, and hands the path to the action via `path_to_claude_code_executable`, which makes the action skip its own installer entirely. Issue: #503 User-Visible: no --- .github/workflows/process.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 19fee6a4..c6f3fed0 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -534,6 +534,29 @@ jobs: # внятной ошибкой — тогда флаг вернуть. run: npx playwright install chromium + # Action ревью ставит Claude Code через `claude install`, и с его + # v1.0.218 (Claude Code 2.1.265) лаунчер ~/.local/bin/claude на + # ubuntu-latest иногда не появляется, хотя установщик рапортует об успехе; + # action верит рапорту и падает на ENOENT (anthropics, issue 1817). + # Кладём бинарник сами: версию берём ту, что пинит сам action (он уже + # скачан в _actions к началу job), контрольную сумму — из манифеста релиза. + - name: Установить Claude Code детерминированно + id: claude_bin + if: steps.rebase.outputs.conflict != 'true' && steps.reuse.outputs.reuse != 'true' + run: | + src=$(ls "$RUNNER_WORKSPACE"/../_actions/anthropics/claude-code-*/v1/src/entrypoints/run.ts 2>/dev/null | head -1) + ver=$(grep -oE 'claudeCodeVersion = "[0-9]+\.[0-9]+\.[0-9]+"' "$src" 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || true) + ver="${ver:-2.1.265}" + base=https://downloads.claude.ai/claude-code-releases + bin="$HOME/.local/bin/claude" + mkdir -p "$(dirname "$bin")" + curl -fsSL --retry 3 "$base/$ver/linux-x64/claude" -o "$bin" + sum=$(curl -fsSL --retry 3 "$base/$ver/manifest.json" | jq -r '.platforms["linux-x64"].checksum') + echo "$sum $bin" | sha256sum -c - + chmod +x "$bin" + "$bin" --version + echo "path=$bin" >> "$GITHUB_OUTPUT" + - name: Review id: review if: steps.rebase.outputs.conflict != 'true' && steps.reuse.outputs.reuse != 'true' @@ -546,6 +569,7 @@ jobs: # Подписка, а не отдельный счёт API: токен выпускается через # `claude setup-token` (Pro/Max). Действуют лимиты подписки. claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} + path_to_claude_code_executable: ${{ steps.claude_bin.outputs.path }} prompt: | Ты ревьюер проекта House Plan. Язык ответа — русский.