Download scripts/comment-on-duplicates.sh from SaylorTwift/claude-code: direct link, hf CLI and curl.
- Browser
- Download file 2.6 kB
-
https://huggingface.co/SaylorTwift/claude-code/resolve/main/scripts/comment-on-duplicates.sh
- Command line
-
hf download hf://SaylorTwift/claude-code/scripts/comment-on-duplicates.sh
-
curl -L -o comment-on-duplicates.sh https://huggingface.co/SaylorTwift/claude-code/resolve/main/scripts/comment-on-duplicates.sh
2.6 kB
| # | |
| # Comments on a GitHub issue with a list of potential duplicates. | |
| # Usage: ./comment-on-duplicates.sh --potential-duplicates 456 789 101 | |
| # | |
| # The base issue number is read from the workflow event payload. | |
| # | |
| set -euo pipefail | |
| REPO="anthropics/claude-code" | |
| # Read from event payload so the issue number is bound to the triggering event. | |
| # Falls back to workflow_dispatch inputs for manual runs. | |
| BASE_ISSUE=$(jq -r '.issue.number // .inputs.issue_number // empty' "${GITHUB_EVENT_PATH:?GITHUB_EVENT_PATH not set}") | |
| if ! [[ "$BASE_ISSUE" =~ ^[0-9]+$ ]]; then | |
| echo "Error: no issue number in event payload" >&2 | |
| exit 1 | |
| fi | |
| DUPLICATES=() | |
| # Parse arguments | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| --potential-duplicates) | |
| shift | |
| while [[ $# -gt 0 && ! "$1" =~ ^-- ]]; do | |
| DUPLICATES+=("$1") | |
| shift | |
| done | |
| ;; | |
| *) | |
| echo "Error: unknown argument (only --potential-duplicates is accepted)" >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| # Validate duplicates | |
| if [[ ${#DUPLICATES[@]} -eq 0 ]]; then | |
| echo "Error: --potential-duplicates requires at least one issue number" >&2 | |
| exit 1 | |
| fi | |
| if [[ ${#DUPLICATES[@]} -gt 3 ]]; then | |
| echo "Error: --potential-duplicates accepts at most 3 issues" >&2 | |
| exit 1 | |
| fi | |
| for dup in "${DUPLICATES[@]}"; do | |
| if ! [[ "$dup" =~ ^[0-9]+$ ]]; then | |
| echo "Error: duplicate issue must be a number, got: $dup" >&2 | |
| exit 1 | |
| fi | |
| done | |
| # Validate that base issue exists | |
| if ! gh issue view "$BASE_ISSUE" --repo "$REPO" &>/dev/null; then | |
| echo "Error: issue #$BASE_ISSUE does not exist in $REPO" >&2 | |
| exit 1 | |
| fi | |
| # Validate that all duplicate issues exist | |
| for dup in "${DUPLICATES[@]}"; do | |
| if ! gh issue view "$dup" --repo "$REPO" &>/dev/null; then | |
| echo "Error: issue #$dup does not exist in $REPO" >&2 | |
| exit 1 | |
| fi | |
| done | |
| # Build comment body | |
| COUNT=${#DUPLICATES[@]} | |
| if [[ $COUNT -eq 1 ]]; then | |
| HEADER="Found 1 possible duplicate issue:" | |
| else | |
| HEADER="Found $COUNT possible duplicate issues:" | |
| fi | |
| BODY="$HEADER"$'\n\n' | |
| INDEX=1 | |
| for dup in "${DUPLICATES[@]}"; do | |
| BODY+="$INDEX. https://github.com/$REPO/issues/$dup"$'\n' | |
| ((INDEX++)) | |
| done | |
| BODY+=$'\n'"This issue will be automatically closed as a duplicate in 3 days."$'\n\n' | |
| BODY+="- If your issue is a duplicate, please close it and π the existing issue instead"$'\n' | |
| BODY+="- To prevent auto-closure, add a comment or π this comment"$'\n\n' | |
| BODY+="π€ Generated with [Claude Code](https://claude.ai/code)" | |
| # Post the comment | |
| gh issue comment "$BASE_ISSUE" --repo "$REPO" --body "$BODY" | |
| echo "Posted duplicate comment on issue #$BASE_ISSUE" | |