#!/bin/bash # issue-close.sh - Close an issue on GitHub or Gitea # Usage: issue-close.sh -i [-c ] set -e # Source platform detection SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/detect-platform.sh" # Parse arguments ISSUE_NUMBER="" COMMENT="" while [[ $# -gt 0 ]]; do case $1 in -i|--issue) ISSUE_NUMBER="$2" shift 2 ;; -c|--comment) COMMENT="$2" shift 2 ;; -h|--help) echo "Usage: issue-close.sh -i [-c ]" echo "" echo "Options:" echo " -i, --issue Issue number (required)" echo " -c, --comment Comment to add before closing (optional)" echo " -h, --help Show this help" exit 0 ;; *) echo "Unknown option: $1" exit 1 ;; esac done if [[ -z "$ISSUE_NUMBER" ]]; then echo "Error: Issue number is required (-i)" exit 1 fi # Detect platform and close issue detect_platform >/dev/null OWNER=$(get_repo_owner) REPO=$(get_repo_name) gitea_issue_comment_api() { local host token url payload host=$(get_remote_host) || return 1 token=$(get_gitea_token "$host") || return 1 url="https://${host}/api/v1/repos/${OWNER}/${REPO}/issues/${ISSUE_NUMBER}/comments" payload=$(COMMENT="$COMMENT" python3 - <<'PY' import json import os print(json.dumps({"body": os.environ["COMMENT"]})) PY ) curl -fsS -X POST \ -H "User-Agent: curl/8" \ -H "Authorization: token ${token}" \ -H "Content-Type: application/json" \ -d "$payload" \ "$url" >/dev/null } gitea_issue_close_api() { local host token url host=$(get_remote_host) || return 1 token=$(get_gitea_token "$host") || return 1 url="https://${host}/api/v1/repos/${OWNER}/${REPO}/issues/${ISSUE_NUMBER}" curl -fsS -X PATCH \ -H "User-Agent: curl/8" \ -H "Authorization: token ${token}" \ -H "Content-Type: application/json" \ -d '{"state":"closed"}' \ "$url" >/dev/null } if [[ "$PLATFORM" == "github" ]]; then if [[ -n "$COMMENT" ]]; then gh issue comment "$ISSUE_NUMBER" --body "$COMMENT" fi gh issue close "$ISSUE_NUMBER" echo "Closed GitHub issue #$ISSUE_NUMBER" elif [[ "$PLATFORM" == "gitea" ]]; then GITEA_LOGIN_NAME=$(get_gitea_login || true) if [[ -n "$GITEA_LOGIN_NAME" ]]; then if [[ -n "$COMMENT" ]]; then tea issue comment "$ISSUE_NUMBER" "$COMMENT" --repo "$OWNER/$REPO" --login "$GITEA_LOGIN_NAME" fi tea issue close "$ISSUE_NUMBER" --repo "$OWNER/$REPO" --login "$GITEA_LOGIN_NAME" else echo "No tea login configured for $(get_remote_host); using authenticated Gitea API fallback." >&2 if [[ -n "$COMMENT" ]]; then gitea_issue_comment_api fi gitea_issue_close_api fi echo "Closed Gitea issue #$ISSUE_NUMBER" else echo "Error: Unknown platform" exit 1 fi