Files
cursor-gitea-agent/scripts/check-comment.sh
T
Frank Schwenk 6b6943262d feat: trigger on issues opened when @cursor in title or body
Extend check-comment.sh to parse issues event payloads; document
issue_comment + issues opened as supported workflow triggers.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 16:50:21 +02:00

107 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Parse Gitea webhook payload and decide whether to run the Cursor agent.
set -euo pipefail
if ! command -v jq >/dev/null 2>&1; then
echo "Error: jq is required"
exit 1
fi
EVENT_FILE="${GITHUB_EVENT_PATH:-}"
if [ -z "$EVENT_FILE" ] || [ ! -f "$EVENT_FILE" ]; then
echo "Error: GITHUB_EVENT_PATH is not set or file is missing"
exit 1
fi
OUTPUT_FILE="${GITHUB_OUTPUT:?GITHUB_OUTPUT is not set}"
COMMENT_BODY=$(jq -r \
--arg event_name "${GITHUB_EVENT_NAME:-}" \
'
if .comment?.body? then .comment.body
elif .review?.body? then .review.body
elif $event_name == "issues" then
((.issue.title // "") + "\n" + (.issue.body // ""))
else empty end
' "$EVENT_FILE")
if [ -z "$COMMENT_BODY" ]; then
echo "No @cursor trigger text in event payload — skipping."
echo "run_cursor=false" >> "$OUTPUT_FILE"
exit 0
fi
COMMENT_USER=$(jq -r '
if .comment?.user?.login? then .comment.user.login
elif .sender?.login? then .sender.login
else "unknown" end
' "$EVENT_FILE")
printf '%s' "$COMMENT_BODY" > comment.txt
if echo "$COMMENT_USER" | grep -qiE '^cursor$'; then
echo "Comment from cursor bot — skipping to avoid loops."
echo "run_cursor=false" >> "$OUTPUT_FILE"
exit 0
fi
if ! echo "$COMMENT_BODY" | grep -qiE '@cursor([^a-zA-Z0-9_]|$)'; then
echo "No @cursor mention — skipping."
echo "run_cursor=false" >> "$OUTPUT_FILE"
exit 0
fi
jq \
--arg event_name "${GITHUB_EVENT_NAME:-unknown}" \
'
{
event_name: $event_name,
comment: (
if .comment then {
body: .comment.body,
id: .comment.id,
user: (.comment.user.login // "unknown")
}
elif .review then {
body: .review.body,
id: .review.id,
user: (.sender.login // "unknown")
}
elif ($event_name == "issues") and .issue then {
body: ((.issue.title // "") + "\n" + (.issue.body // "")),
id: null,
user: (.sender.login // .issue.user.login // "unknown")
}
else null end
),
issue: {
number: (
.issue.number // .pull_request.number // .number // null
),
title: (.issue.title // .pull_request.title // ""),
body: (.issue.body // .pull_request.body // ""),
state: (.issue.state // .pull_request.state // ""),
user: (.issue.user.login // .pull_request.user.login // ""),
html_url: (.issue.html_url // .pull_request.html_url // ""),
is_pull_request: (
(.pull_request != null)
or (.issue.pull_request != null)
or (.is_pull == true)
)
},
repository: {
name: .repository.name,
owner: .repository.owner.login,
full_name: .repository.full_name,
html_url: .repository.html_url,
default_branch: .repository.default_branch
},
sender: (.sender.login // "")
}
' "$EVENT_FILE" > context.json
ISSUE_NUMBER=$(jq -r '.issue.number' context.json)
echo "run_cursor=true" >> "$OUTPUT_FILE"
echo "Triggered for ${COMMENT_USER} on issue/PR #${ISSUE_NUMBER} (event: ${GITHUB_EVENT_NAME:-unknown})"