diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml deleted file mode 100644 index 5ddb3c00a..000000000 --- a/.github/workflows/claude-code-review.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Claude Code Review - -on: - pull_request: - types: [opened, synchronize, ready_for_review, reopened] - -jobs: - claude-review: - # Only run for PRs submitted by organization members or owners - if: | - github.repository == 'netbox-community/netbox' && - (github.event.pull_request.author_association == 'MEMBER' || - github.event.pull_request.author_association == 'OWNER') - - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: read - issues: read - id-token: write - - steps: - - name: Checkout repository - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - fetch-depth: 1 - - - name: Run Claude Code Review - id: claude-review - uses: anthropics/claude-code-action@e763fe78de2db7389e04818a00b5ff8ba13d1360 # v1 - with: - claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - plugin_marketplaces: 'https://github.com/anthropics/claude-code.git' - plugins: 'code-review@claude-code-plugins' - prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}' - # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md - # or https://code.claude.com/docs/en/cli-reference for available options diff --git a/.github/workflows/claude-issue-triage.yml b/.github/workflows/claude-issue-triage.yml index 66c61e68c..ac5781d32 100644 --- a/.github/workflows/claude-issue-triage.yml +++ b/.github/workflows/claude-issue-triage.yml @@ -11,13 +11,11 @@ jobs: permissions: contents: read issues: write - steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 1 - - name: Run Claude Issue Triage id: claude-triage uses: anthropics/claude-code-action@11a9dadd198803a0cea6bd53da3e0e8a762fc6ea # v1.0.108 @@ -130,6 +128,8 @@ jobs: - Reference the specific problem(s) and clearly explain what the submitter can do to move the issue forward (e.g. "please edit the issue to include reproduction steps" or "this appears to duplicate #12345 — could you confirm?"). + - Never direct the submitter to proceed with a pull request immediately: A + maintainer will decide when that is appropriate. - Sign off noting that you are an automated triage assistant and a human maintainer will follow up. - Paraphrase rather than quoting issue content verbatim. Do not echo back links, diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index ca8b8ce97..6feaa0dce 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -5,76 +5,35 @@ on: types: [created] pull_request_review_comment: types: [created] - issues: - types: [opened, assigned] pull_request_review: types: [submitted] +concurrency: + group: claude-${{ github.event.pull_request.number || github.event.issue.number }} + cancel-in-progress: true + jobs: claude: if: | - (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' && contains(github.event.review.body, '@claude')) || - (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) + (github.event_name != 'issue_comment' || github.event.issue.pull_request != null) + && contains(github.event.comment.body || github.event.review.body, '@claude') + && (github.event.comment.user.type || github.event.review.user.type) != 'Bot' + && contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association || github.event.review.author_association) runs-on: ubuntu-latest + timeout-minutes: 15 permissions: contents: read - pull-requests: read - issues: read - id-token: write + issues: write + pull-requests: write actions: read # Required for Claude to read CI results on PRs steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 1 - - # Workaround for claude-code-action bug with fork PRs: The action fetches by branch name - # (git fetch origin --depth=N ), but fork PR branches don't exist on origin. - # Fix: redirect origin to the fork's URL so the action can fetch the branch directly. - - name: Configure git remote for fork PRs - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - # Determine PR number based on event type - if [ "${{ github.event_name }}" = "issue_comment" ]; then - PR_NUMBER="${{ github.event.issue.number }}" - elif [ "${{ github.event_name }}" = "pull_request_review_comment" ] || [ "${{ github.event_name }}" = "pull_request_review" ]; then - PR_NUMBER="${{ github.event.pull_request.number }}" - else - exit 0 # issues event — no PR branch to worry about - fi - - # Fetch fork info in one API call; silently skip if this is not a PR - PR_INFO=$(gh pr view "${PR_NUMBER}" --json isCrossRepository,headRepositoryOwner,headRepository 2>/dev/null || echo "") - if [ -z "$PR_INFO" ]; then - exit 0 - fi - - IS_FORK=$(echo "$PR_INFO" | jq -r '.isCrossRepository') - if [ "$IS_FORK" = "true" ]; then - FORK_OWNER=$(echo "$PR_INFO" | jq -r '.headRepositoryOwner.login') - FORK_REPO=$(echo "$PR_INFO" | jq -r '.headRepository.name') - echo "Fork PR detected from ${FORK_OWNER}/${FORK_REPO}: updating origin to fork URL" - git remote set-url origin "https://github.com/${FORK_OWNER}/${FORK_REPO}.git" - fi - - name: Run Claude Code id: claude - uses: anthropics/claude-code-action@e763fe78de2db7389e04818a00b5ff8ba13d1360 # v1 + uses: anthropics/claude-code-action@11a9dadd198803a0cea6bd53da3e0e8a762fc6ea # v1.0.108 with: - claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} - - # This is an optional setting that allows Claude to read CI results on PRs - additional_permissions: | - actions: read - - # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. - # prompt: 'Update the pull request description to include a summary of changes.' - - # Optional: Add claude_args to customize behavior and configuration - # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md - # or https://code.claude.com/docs/en/cli-reference for available options - # claude_args: '--allowed-tools Bash(gh pr:*)' - + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + github_token: ${{ secrets.GITHUB_TOKEN }}