mirror of
https://github.com/anthropics/claude-code.git
synced 2026-04-16 16:07:50 +00:00
Updates edit-issue-labels.sh and comment-on-duplicates.sh to read the
issue number from GITHUB_EVENT_PATH (the workflow event payload) instead
of accepting it as a CLI argument. Simplifies the call signature and
keeps the scripts aligned with the triggering issue.
Also updates the /triage-issue and /dedupe command docs to match.
🏠 Remote-Dev: homespace
96 lines
2.5 KiB
Bash
Executable File
96 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# 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"
|