Split author and reviewer tokens

This commit is contained in:
2026-09-13 22:58:24 +09:00
parent e173c11cac
commit 7182a6f8f4
5 changed files with 93 additions and 55 deletions
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Shared by the run-*.sh scripts. Everything the scripts post goes through the
# reviewer token, so it appears as the bot account. The agent only ever sees the
# author token as GITEA_TOKEN, which is what pushes and opens pull requests.
ISSUE_URL="${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/issues/${ISSUE_INDEX}"
PULL_URL="${GITEA_API_URL}/repos/${GITEA_REPOSITORY}/pulls/${ISSUE_INDEX}"
COMMENT_FILE="$(mktemp)"
gitea_api() {
curl --fail-with-body --silent --show-error \
-H "Authorization: token ${1}" \
-H "Content-Type: application/json" \
"${@:2}"
}
# Commits are made by the author account so the pull request and its commits
# belong to the same person.
configure_git_author() {
AUTHOR="$(gitea_api "${GITEA_TOKEN}" "${GITEA_API_URL}/user")"
git config --global user.name "$(jq -r '.login' <<< "${AUTHOR}")"
git config --global user.email \
"$(jq -r '.email // empty' <<< "${AUTHOR}")"
}
post_comment() {
gitea_api "${REVIEWER_TOKEN}" -X POST \
--data "$(jq -n --rawfile body "${COMMENT_FILE}" '{body: $body}')" \
"${ISSUE_URL}/comments"
}
# A pull request event is a review request, so the response becomes a review
# rather than a comment: it requests changes when the agent asked @bot to fix
# something, only comments when the run failed, and approves otherwise.
post_result() {
if [ "${EVENT_NAME}" != pull_request ]; then
post_comment
return
fi
local event=APPROVED
if grep -q '@bot' "${COMMENT_FILE}"; then
event=REQUEST_CHANGES
elif grep -q '^Bot failed:' "${COMMENT_FILE}"; then
event=COMMENT
fi
gitea_api "${REVIEWER_TOKEN}" -X POST \
--data "$(jq -n --rawfile body "${COMMENT_FILE}" --arg event "${event}" \
'{body: $body, event: $event}')" \
"${PULL_URL}/reviews"
}
render_prompt() {
export ISSUE_COMMENTS="$(
gitea_api "${REVIEWER_TOKEN}" "${ISSUE_URL}/comments?limit=100" \
| jq -r '.[] | "## " + .user.login + " at " + .created_at + "\n\n" + .body + "\n"'
)"
envsubst < "${ACTION_PATH}/scripts/prompt.md"
}