fix(tools): use top-level tea comment invocation and formalize --login passthrough (#865)
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
issue-comment.sh called the non-existent `tea issue comment` subcommand form; tea 0.11.1 silently no-ops and exits 0 instead of erroring, producing a false-success write. Switch to the top-level `tea comment <index> <body>` form and add fail-closed REST read-back verification so the wrapper no longer trusts tea's exit code alone. pr-review.sh's comment path was already fixed for this bug by #812/#835 (routes through a read-back-verified REST comment API instead of any tea comment subcommand); this change formalizes an explicit --login override flag there too and documents the after-detection last-wins --login ordering, consistent with issue-comment.sh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,17 @@
|
||||
#!/bin/bash
|
||||
# pr-review.sh - Review a pull request on GitHub or Gitea
|
||||
# Usage: pr-review.sh -n <pr_number> -a <action> [-c <comment>]
|
||||
# Usage: pr-review.sh -n <pr_number> -a <action> [-c <comment>] [--login <name>]
|
||||
#
|
||||
# --login override: approve/request-changes on Gitea invoke `tea pr
|
||||
# approve`/`tea pr reject` with a `--login` resolved from the local tea
|
||||
# login list for this repo's host (get_gitea_login_for_host). Pass
|
||||
# --login <name> to override that default for this invocation only. The
|
||||
# override is appended to the tea command line AFTER the detected default
|
||||
# (get_gitea_repo_args()-equivalent resolution happens first), because tea
|
||||
# honors only the LAST `--login` flag on its command line — a flag placed
|
||||
# before the default would be silently clobbered by it. The `comment`
|
||||
# action does not shell out to `tea` at all (see gitea_post_verified_comment
|
||||
# below), so --login has no effect on it.
|
||||
|
||||
set -e
|
||||
|
||||
@@ -12,6 +23,7 @@ source "$SCRIPT_DIR/detect-platform.sh"
|
||||
PR_NUMBER=""
|
||||
ACTION=""
|
||||
COMMENT=""
|
||||
LOGIN_OVERRIDE=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
@@ -27,13 +39,18 @@ while [[ $# -gt 0 ]]; do
|
||||
COMMENT="$2"
|
||||
shift 2
|
||||
;;
|
||||
-l|--login)
|
||||
LOGIN_OVERRIDE="$2"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: pr-review.sh -n <pr_number> -a <action> [-c <comment>]"
|
||||
echo "Usage: pr-review.sh -n <pr_number> -a <action> [-c <comment>] [--login <name>]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -n, --number PR number (required)"
|
||||
echo " -a, --action Review action: approve, request-changes, comment (required)"
|
||||
echo " -c, --comment Review comment (required for request-changes)"
|
||||
echo " -l, --login Override the detected Gitea tea login (approve/request-changes only)"
|
||||
echo " -h, --help Show this help"
|
||||
exit 0
|
||||
;;
|
||||
@@ -210,8 +227,22 @@ elif [[ "$PLATFORM" == "gitea" ]]; then
|
||||
login=$(get_gitea_login_for_host "$host")
|
||||
# tea v0.11.1 defines no --comment/-comment flag on `pr approve`;
|
||||
# route any review body via the durable comment API instead (#835).
|
||||
tea pr approve "$PR_NUMBER" --repo "$repo" --login "$login"
|
||||
TEA_ARGS=(pr approve "$PR_NUMBER" --repo "$repo" --login "$login")
|
||||
# --login override goes LAST: tea honors only the final --login on
|
||||
# its command line, so an override placed before the detected
|
||||
# default above would be silently clobbered by it.
|
||||
if [[ -n "$LOGIN_OVERRIDE" ]]; then
|
||||
TEA_ARGS+=(--login "$LOGIN_OVERRIDE")
|
||||
fi
|
||||
tea "${TEA_ARGS[@]}"
|
||||
echo "Approved Gitea PR #$PR_NUMBER"
|
||||
# TODO(#865): this trusts tea's exit code for the approval STATE
|
||||
# itself (no read-back of the review's approved status via the
|
||||
# Gitea REST API). Only the optional accompanying COMMENT text
|
||||
# below is independently read-back verified. Add a review-state
|
||||
# read-back (e.g. GET /repos/{repo}/pulls/{pr}/reviews) if the
|
||||
# approval state itself needs the same durable-provenance
|
||||
# guarantee as comments.
|
||||
if [[ -n "$COMMENT" ]]; then
|
||||
comment_id=$(gitea_post_verified_comment "$PR_NUMBER" "$COMMENT") || exit 1
|
||||
echo "Added and verified review comment on Gitea PR #$PR_NUMBER (comment ID $comment_id)"
|
||||
@@ -227,8 +258,19 @@ elif [[ "$PLATFORM" == "gitea" ]]; then
|
||||
login=$(get_gitea_login_for_host "$host")
|
||||
# tea v0.11.1 defines no --comment/-comment flag on `pr reject`;
|
||||
# route the review body via the durable comment API instead (#835).
|
||||
tea pr reject "$PR_NUMBER" --repo "$repo" --login "$login"
|
||||
TEA_ARGS=(pr reject "$PR_NUMBER" --repo "$repo" --login "$login")
|
||||
# --login override goes LAST: tea honors only the final --login on
|
||||
# its command line, so an override placed before the detected
|
||||
# default above would be silently clobbered by it.
|
||||
if [[ -n "$LOGIN_OVERRIDE" ]]; then
|
||||
TEA_ARGS+=(--login "$LOGIN_OVERRIDE")
|
||||
fi
|
||||
tea "${TEA_ARGS[@]}"
|
||||
echo "Requested changes on Gitea PR #$PR_NUMBER"
|
||||
# TODO(#865): this trusts tea's exit code for the rejection STATE
|
||||
# itself (no read-back of the review's rejected/changes-requested
|
||||
# status via the Gitea REST API). Only the required accompanying
|
||||
# COMMENT text below is independently read-back verified.
|
||||
comment_id=$(gitea_post_verified_comment "$PR_NUMBER" "$COMMENT") || exit 1
|
||||
echo "Added and verified review comment on Gitea PR #$PR_NUMBER (comment ID $comment_id)"
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user