#!/bin/bash # issue-view.sh - View issue details on GitHub or Gitea # Usage: issue-view.sh -i set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/detect-platform.sh" # Parse arguments ISSUE_NUMBER="" get_remote_host() { local remote_url remote_url=$(git remote get-url origin 2>/dev/null || true) if [[ -z "$remote_url" ]]; then return 1 fi if [[ "$remote_url" =~ ^https?://([^/]+)/ ]]; then echo "${BASH_REMATCH[1]}" return 0 fi if [[ "$remote_url" =~ ^git@([^:]+): ]]; then echo "${BASH_REMATCH[1]}" return 0 fi return 1 } get_gitea_token() { local host="$1" if [[ -n "${GITEA_TOKEN:-}" ]]; then echo "$GITEA_TOKEN" return 0 fi local creds="$HOME/.git-credentials" if [[ -f "$creds" ]]; then local token token=$(grep -F "$host" "$creds" 2>/dev/null | sed -n 's#https\?://[^@]*:\([^@/]*\)@.*#\1#p' | head -n 1) if [[ -n "$token" ]]; then echo "$token" return 0 fi fi return 1 } gitea_issue_view_api() { local host repo token url host=$(get_remote_host) || { echo "Error: could not determine remote host for API fallback" >&2 return 1 } repo=$(get_repo_info) || { echo "Error: could not determine repo owner/name for API fallback" >&2 return 1 } token=$(get_gitea_token "$host") || { echo "Error: Gitea token not found for API fallback (set GITEA_TOKEN or configure ~/.git-credentials)" >&2 return 1 } url="https://${host}/api/v1/repos/${repo}/issues/${ISSUE_NUMBER}" if command -v python3 >/dev/null 2>&1; then curl -fsS -H "Authorization: token ${token}" "$url" | python3 -m json.tool else curl -fsS -H "Authorization: token ${token}" "$url" fi } while [[ $# -gt 0 ]]; do case $1 in -i|--issue) ISSUE_NUMBER="$2" shift 2 ;; -h|--help) echo "Usage: issue-view.sh -i " echo "" echo "Options:" echo " -i, --issue Issue number (required)" 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 if [[ "$PLATFORM" == "github" ]]; then gh issue view "$ISSUE_NUMBER" elif [[ "$PLATFORM" == "gitea" ]]; then if command -v tea >/dev/null 2>&1; then if tea issue "$ISSUE_NUMBER"; then exit 0 fi echo "Warning: tea issue view failed, trying Gitea API fallback..." >&2 fi gitea_issue_view_api else echo "Error: Unknown platform" exit 1 fi