- Add optional bubblewrap setup step for Linux subprocess isolation
when allowed_non_write_users is configured
- Use git credential helper instead of embedding token in remote URL
- edit-issue-labels.sh: read issue number from workflow event payload
instead of CLI arg
- Add CLAUDE_CODE_SCRIPT_CAPS env for per-script call limit config
- docs/security.md: note recommended github_token configuration
🏠 Remote-Dev: homespace
84 lines
1.9 KiB
Bash
Executable File
84 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Edits labels on a GitHub issue.
|
|
# Usage: ./scripts/edit-issue-labels.sh --add-label bug --add-label needs-triage --remove-label untriaged
|
|
#
|
|
# The issue number is read from the workflow event payload.
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
# Read from event payload so the issue number is bound to the triggering event
|
|
ISSUE=$(jq -r '.issue.number // empty' "${GITHUB_EVENT_PATH:?GITHUB_EVENT_PATH not set}")
|
|
if ! [[ "$ISSUE" =~ ^[0-9]+$ ]]; then
|
|
echo "Error: no issue number in event payload" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ADD_LABELS=()
|
|
REMOVE_LABELS=()
|
|
|
|
# Parse arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--add-label)
|
|
ADD_LABELS+=("$2")
|
|
shift 2
|
|
;;
|
|
--remove-label)
|
|
REMOVE_LABELS+=("$2")
|
|
shift 2
|
|
;;
|
|
*)
|
|
echo "Error: unknown argument (only --add-label and --remove-label are accepted)" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ ${#ADD_LABELS[@]} -eq 0 && ${#REMOVE_LABELS[@]} -eq 0 ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
# Fetch valid labels from the repo
|
|
VALID_LABELS=$(gh label list --limit 500 --json name --jq '.[].name')
|
|
|
|
# Filter to only labels that exist in the repo
|
|
FILTERED_ADD=()
|
|
for label in "${ADD_LABELS[@]}"; do
|
|
if echo "$VALID_LABELS" | grep -qxF "$label"; then
|
|
FILTERED_ADD+=("$label")
|
|
fi
|
|
done
|
|
|
|
FILTERED_REMOVE=()
|
|
for label in "${REMOVE_LABELS[@]}"; do
|
|
if echo "$VALID_LABELS" | grep -qxF "$label"; then
|
|
FILTERED_REMOVE+=("$label")
|
|
fi
|
|
done
|
|
|
|
if [[ ${#FILTERED_ADD[@]} -eq 0 && ${#FILTERED_REMOVE[@]} -eq 0 ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Build gh command arguments
|
|
GH_ARGS=("issue" "edit" "$ISSUE")
|
|
|
|
for label in "${FILTERED_ADD[@]}"; do
|
|
GH_ARGS+=("--add-label" "$label")
|
|
done
|
|
|
|
for label in "${FILTERED_REMOVE[@]}"; do
|
|
GH_ARGS+=("--remove-label" "$label")
|
|
done
|
|
|
|
gh "${GH_ARGS[@]}"
|
|
|
|
if [[ ${#FILTERED_ADD[@]} -gt 0 ]]; then
|
|
echo "Added: ${FILTERED_ADD[*]}"
|
|
fi
|
|
if [[ ${#FILTERED_REMOVE[@]} -gt 0 ]]; then
|
|
echo "Removed: ${FILTERED_REMOVE[*]}"
|
|
fi
|