Compare commits

..

12 Commits

Author SHA1 Message Date
Ashwin Bhat
27a26b2e53 fetch 50 commits for PRs 2025-05-27 16:19:44 -07:00
claude[bot]
416f74d525 Add shallow fetch to improve performance for large repositories
This change adds `--depth=1` to git fetch operations to perform shallow
fetches instead of full history downloads. This significantly reduces
checkout time for large repositories as reported in issue #52.

Changes:
- Line 55: Added --depth=1 to PR branch fetch
- Line 102: Added --depth=1 to new branch fetch

Fixes #52

Co-authored-by: ashwin-ant <ashwin-ant@users.noreply.github.com>
2025-05-26 02:52:30 +00:00
Ashwin Bhat
3c6a85b54b Improve error messages for GitHub Action authentication failures (#50)
- Add helpful hint about workflow permissions when OIDC token is not found
- Include response body in app token exchange failure errors for better debugging

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-05-25 18:43:54 -07:00
Lina Tawfik
cbc3ca285d Merge pull request #39 from anthropics/fix-mcp-undefined-error
Fix MCP file operations server errors
2025-05-23 12:30:01 -07:00
Lina Tawfik
f3bfb2a9ad Merge pull request #34 from anthropics/update-claude-workflow-v2
Update Claude workflow
2025-05-22 21:51:16 -07:00
Lina Tawfik
36c5ee33cd Update Claude workflow
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-22 21:43:54 -07:00
Lina Tawfik
8e84799f37 Merge pull request #25 from anthropics/update-to-use-model-parameter
Udpate claude model to default -p model
2025-05-22 11:02:14 -07:00
Lina Tawfik
b129b800c5 Merge pull request #23 from anthropics/np-anthropic-patch-1
Add graphic to readme
2025-05-22 09:26:50 -07:00
Lina Tawfik
80dbb4a5aa Merge pull request #24 from anthropics/update-to-use-model-parameter
Update to use model parameter in claude-code-base-action
2025-05-22 09:19:03 -07:00
Nate Parrott
be7f75d65a fix formatting 2025-05-22 11:12:51 -04:00
np-anthropic
e3d126d058 Add graphic to readme 2025-05-22 10:57:20 -04:00
Lina Tawfik
11f5812e28 Merge pull request #22 from anthropics/lina/rename-anthropic-model-to-model
Rename anthropic_model input to model with backward compatibility
2025-05-22 07:26:42 -07:00
4 changed files with 28 additions and 25 deletions

View File

@@ -1,4 +1,4 @@
name: Claude name: Claude Code
on: on:
issue_comment: issue_comment:
@@ -11,12 +11,12 @@ on:
types: [submitted] types: [submitted]
jobs: jobs:
claude-pr: claude:
if: | if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: read contents: read
@@ -29,10 +29,8 @@ jobs:
with: with:
fetch-depth: 1 fetch-depth: 1
- name: Run Claude PR Agent - name: Run Claude Code
uses: anthropics/claude-code-action@main id: claude
uses: anthropics/claude-code-action@beta
with: with:
timeout_minutes: "60"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
allowed_tools: "Bash(bun install),Bash(bun test:*),Bash(bun run format),Bash(bun typecheck)"
custom_instructions: "You have also been granted tools for editing files and running bun commands (install, run, test) for testing your changes."

View File

@@ -1,3 +1,5 @@
![Claude Code Action responding to a comment](https://github.com/user-attachments/assets/1d60c2e9-82ed-4ee5-b749-f9e021c85f4d)
# Claude Code Action # Claude Code Action
A general-purpose [Claude Code](https://claude.ai/code) action for GitHub PRs and issues that can answer questions and implement code changes. This action listens for a trigger phrase in comments and activates Claude act on the request. It supports multiple authentication methods including Anthropic direct API, Amazon Bedrock, and Google Vertex AI. A general-purpose [Claude Code](https://claude.ai/code) action for GitHub PRs and issues that can answer questions and implement code changes. This action listens for a trigger phrase in comments and activates Claude act on the request. It supports multiple authentication methods including Anthropic direct API, Amazon Bedrock, and Google Vertex AI.

View File

@@ -51,8 +51,9 @@ export async function setupBranch(
const branchName = prData.headRefName; const branchName = prData.headRefName;
// Execute git commands to checkout PR branch // Execute git commands to checkout PR branch (shallow fetch for performance)
await $`git fetch origin ${branchName}`; // Fetch the branch with a depth of 20 to avoid fetching too much history, while still allowing for some context
await $`git fetch origin --depth=20 ${branchName}`;
await $`git checkout ${branchName}`; await $`git checkout ${branchName}`;
console.log(`Successfully checked out PR branch for PR #${entityNumber}`); console.log(`Successfully checked out PR branch for PR #${entityNumber}`);
@@ -98,8 +99,8 @@ export async function setupBranch(
sha: currentSHA, sha: currentSHA,
}); });
// Checkout the new branch // Checkout the new branch (shallow fetch for performance)
await $`git fetch origin ${newBranch}`; await $`git fetch origin --depth=1 ${newBranch}`;
await $`git checkout ${newBranch}`; await $`git checkout ${newBranch}`;
console.log( console.log(

View File

@@ -39,25 +39,19 @@ async function retryWithBackoff<T>(
} }
} }
throw new Error( console.error(`Operation failed after ${maxAttempts} attempts`);
`Operation failed after ${maxAttempts} attempts. Last error: ${ throw lastError;
lastError?.message ?? "Unknown error"
}`,
);
} }
async function getOidcToken(): Promise<string> { async function getOidcToken(): Promise<string> {
try { try {
const oidcToken = await core.getIDToken("claude-code-github-action"); const oidcToken = await core.getIDToken("claude-code-github-action");
if (!oidcToken) {
throw new Error("OIDC token not found");
}
return oidcToken; return oidcToken;
} catch (error) { } catch (error) {
console.error("Failed to get OIDC token:", error);
throw new Error( throw new Error(
`Failed to get OIDC token: ${error instanceof Error ? error.message : String(error)}`, "Could not fetch an OIDC token. Did you remember to add `id-token: write` to your workflow permissions?",
); );
} }
} }
@@ -74,9 +68,15 @@ async function exchangeForAppToken(oidcToken: string): Promise<string> {
); );
if (!response.ok) { if (!response.ok) {
throw new Error( const responseJson = (await response.json()) as {
`App token exchange failed: ${response.status} ${response.statusText}`, error?: {
message?: string;
};
};
console.error(
`App token exchange failed: ${response.status} ${response.statusText} - ${responseJson?.error?.message ?? "Unknown error"}`,
); );
throw new Error(`${responseJson?.error?.message ?? "Unknown error"}`);
} }
const appTokenData = (await response.json()) as { const appTokenData = (await response.json()) as {
@@ -117,7 +117,9 @@ export async function setupGitHubToken(): Promise<string> {
core.setOutput("GITHUB_TOKEN", appToken); core.setOutput("GITHUB_TOKEN", appToken);
return appToken; return appToken;
} catch (error) { } catch (error) {
core.setFailed(`Failed to setup GitHub token: ${error}`); core.setFailed(
`Failed to setup GitHub token: ${error}.\n\nIf you instead wish to use this action with a custom GitHub token or custom GitHub app, provide a \`github_token\` in the \`uses\` section of the app in your workflow yml file.`,
);
process.exit(1); process.exit(1);
} }
} }