From 6bd015fe25ce304ba9f054158ab9fb2bb94ab81f Mon Sep 17 00:00:00 2001 From: Brad Anderson Date: Sun, 12 Jul 2026 18:35:39 -0700 Subject: [PATCH] Make GITEA_SSH_HOST/GITEA_API required env vars, fetch inline review comments Addresses PR #1 feedback: host config should live in the environment (~/.profile.local), not be hardcoded in the script, with a clear error if unset. Also fixes gitea-pr comments to surface inline diff comments from reviews, not just issue comments and top-level review bodies -- the review that requested this change would have been invisible to gitea-pr comments without this fix. --- bin/gitea-pr | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/bin/gitea-pr b/bin/gitea-pr index 498d73d..f79e09c 100755 --- a/bin/gitea-pr +++ b/bin/gitea-pr @@ -1,13 +1,26 @@ #!/bin/bash set -euo pipefail -GITEA_SSH_HOST="gitbox.bradina.localdomain" -GITEA_API="https://gitbox.branderson.io/api/v1" - function usage() { echo "Usage: gitea-pr create [--title TITLE] [--body BODY] [--base BRANCH]" echo " gitea-pr comments PR_NUMBER" echo " gitea-pr merge PR_NUMBER" + echo "" + echo "Requires GITEA_SSH_HOST, GITEA_API, and GITEA_TOKEN set in the environment" \ + "(e.g. in ~/.profile.local)." +} + +function require_config() { + if [ -z "${GITEA_SSH_HOST:-}" ]; then + echo "GITEA_SSH_HOST is not set. Add 'export GITEA_SSH_HOST='" \ + "(e.g. gitbox.bradina.localdomain) to ~/.profile.local" >&2 + exit 1 + fi + if [ -z "${GITEA_API:-}" ]; then + echo "GITEA_API is not set. Add 'export GITEA_API=https:///api/v1'" \ + "(e.g. https://gitbox.branderson.io/api/v1) to ~/.profile.local" >&2 + exit 1 + fi } function require_token() { @@ -44,6 +57,7 @@ shift case "$subcommand" in create|comments|merge) + require_config require_token owner_repo=$(gitea_owner_repo) owner="${owner_repo%%/*}" @@ -120,13 +134,29 @@ case "$subcommand" in response=$(curl -sS -w '\n%{http_code}' "${GITEA_API}/repos/${owner}/${repo}/pulls/${pr_number}/reviews" \ -H "Authorization: token ${GITEA_TOKEN}") http_code=$(echo "$response" | tail -1) - json=$(echo "$response" | sed '$d') + reviews_json=$(echo "$response" | sed '$d') if [ "$http_code" -lt 200 ] || [ "$http_code" -ge 300 ]; then echo "Failed to fetch reviews (HTTP $http_code):" >&2 - echo "$json" >&2 + echo "$reviews_json" >&2 exit 1 fi - echo "$json" | jq -r '.[] | select(.body != "") | "[\(.user.login) @ \(.submitted_at) — \(.state)]\n\(.body)\n"' + echo "$reviews_json" | jq -r '.[] | select(.body != "") | "[\(.user.login) @ \(.submitted_at) — \(.state)]\n\(.body)\n"' + + echo "=== Inline review comments ===" + review_ids=$(echo "$reviews_json" | jq -r '.[] | select(.comments_count > 0) | .id') + for review_id in $review_ids; do + response=$(curl -sS -w '\n%{http_code}' \ + "${GITEA_API}/repos/${owner}/${repo}/pulls/${pr_number}/reviews/${review_id}/comments" \ + -H "Authorization: token ${GITEA_TOKEN}") + http_code=$(echo "$response" | tail -1) + json=$(echo "$response" | sed '$d') + if [ "$http_code" -lt 200 ] || [ "$http_code" -ge 300 ]; then + echo "Failed to fetch comments for review ${review_id} (HTTP $http_code):" >&2 + echo "$json" >&2 + exit 1 + fi + echo "$json" | jq -r '.[] | "[\(.user.login) @ \(.path):\(.line // "?")]\n\(.body)\n"' + done ;; merge) pr_number="${1:-}"