| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| |
| |
| ISSUE=$(jq -r '.issue.number // .inputs.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=() |
|
|
| |
| 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 |
|
|
| |
| VALID_LABELS=$(gh label list --limit 500 --json name --jq '.[].name') |
|
|
| |
| 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 |
|
|
| |
| 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 |
|
|