anthropics / anthropics/claude-code-action

Bug: `setupBranch()` calls `process.exit(1)`, bypassing top-level error handling, comment updates, and resource cleanup

Abierto
#1,747 3 comentarios 0 reacciones 0 asignados Ver en GitHub
bug p3
Lenguaje dominante
TypeScript
Estrellas
8.9k
Forks
2.1k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

#### Description

In [`src/github/operations/branch.ts`](file:///src/github/operations/branch.ts), the `setupBranch()` function wraps its execution in a `try ... catch` block that logs the error and immediately invokes `process.exit(1)`:

```typescript
// src/github/operations/branch.ts:348-351
} catch (error) {
console.error("Error in branch setup:", error);
process.exit(1);
}
```

`setupBranch()` is called by `prepareTagMode()` during Phase 1 (Prepare) in the orchestrator [`src/entrypoints/run.ts`](file:///src/entrypoints/run.ts).

`run.ts` was designed to orchestrate the entire lifecycle inside a top-level `try ... catch ... finally` block:

- **`catch`**: Sets `prepareSuccess = false`, records `prepareError`, and reports `core.setFailed(...)`.
- **`finally`**:
1. Calls `workloadIdentity?.stop()` to delete temporary credentials.
2. Calls `updateCommentLink()` to update the tracking comment on GitHub with the actual error reason.
3. Writes step summaries and exposes outputs (`branch_name`, `github_token`) for downstream workflow cleanup steps (e.g. OIDC app token revocation).

Because `setupBranch()` invokes `process.exit(1)` directly:

1. The `catch` block in `run.ts` is never executed.
2. The `finally` block in `run.ts` is never executed.
3. The initial tracking comment posted to the issue/PR (e.g. `"Claude Code is working..."`) is never updated with failure details, leaving users with a permanently spinning/incomplete status.
4. Active background handles (like Workload Identity refresh timers) and post-action cleanup steps are bypassed.

#### Steps to Reproduce

1. Trigger the action in tag mode on an issue or PR where branch setup fails (e.g. triggering an invalid branch name from a template, an invalid base ref, or a git checkout conflict).
2. The branch setup error is logged to stdout, but the process exits immediately with code 1.
3. Observe that the GitHub issue/PR tracking comment is never updated to indicate failure, and remains in the pending "working..." state.

#### Expected Behavior

`setupBranch()` should rethrow the error (`throw error;`) rather than exiting the process, allowing `run.ts` to catch the failure, update the tracking comment with the error details, clean up tokens/handles in `finally`, and fail cleanly via `@actions/core`.

#### Proposed Fix

In [`src/github/operations/branch.ts`](file:///src/github/operations/branch.ts):

```diff
} catch (error) {
console.error("Error in branch setup:", error);
- process.exit(1);
+ throw error;
}
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.