90 lines
2.8 KiB
Bash
Executable File
90 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Required environment variables:
|
|
# GITEA_TOKEN
|
|
# GITHUB_REPOSITORY
|
|
# GITHUB_EVENT_PATH
|
|
# GITHUB_SERVER_URL
|
|
# GITHUB_RUN_ID
|
|
|
|
if [ -z "$GITEA_TOKEN" ]; then
|
|
echo "GITEA_TOKEN is not set. Skipping PR comment."
|
|
exit 0
|
|
fi
|
|
|
|
# Extract PR number from the event JSON
|
|
if [ -f "$GITHUB_EVENT_PATH" ]; then
|
|
PR_NUMBER=$(jq -r '.pull_request.number' "$GITHUB_EVENT_PATH")
|
|
else
|
|
echo "GITHUB_EVENT_PATH not found. Skipping."
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$PR_NUMBER" == "null" ] || [ -z "$PR_NUMBER" ]; then
|
|
echo "Not a pull request. Skipping."
|
|
exit 0
|
|
fi
|
|
|
|
REPORT_TYPE=$1
|
|
INPUT_FILE=${2:-ci_results.txt}
|
|
|
|
if [ ! -f "$INPUT_FILE" ]; then
|
|
echo "$INPUT_FILE not found. Nothing to post."
|
|
exit 0
|
|
fi
|
|
|
|
RUN_URL="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
|
|
|
|
# Clean up ANSI escape sequences (colors) from the output
|
|
# This makes the markdown output readable
|
|
sed -i 's/\x1b\[[0-9;]*[mK]//g' "$INPUT_FILE"
|
|
|
|
if [ "$REPORT_TYPE" == "bench" ]; then
|
|
HEADER="### Benchmark Summary (automated report)"
|
|
# Extract from summary start to the end, removing progress lines
|
|
# We look for the start of the benchmark summary table
|
|
RESULTS=$(sed -n '/==================== BENCHMARK SUMMARY ====================/,$p' "$INPUT_FILE" | grep -v "Progress:")
|
|
else
|
|
HEADER="### CI Status Report: $REPORT_TYPE"
|
|
# Check for failures
|
|
if grep -qiE "FAILED|error|❌|exit status|failure" "$INPUT_FILE"; then
|
|
# Try to find a meaningful summary
|
|
if grep -q "short test summary info" "$INPUT_FILE"; then
|
|
RESULTS=$(sed -n '/=========================== short test summary info ============================/,$p' "$INPUT_FILE")
|
|
elif grep -q "Found [0-9]* error" "$INPUT_FILE"; then
|
|
# Ruff/Lint style errors
|
|
RESULTS=$(grep -A 20 -B 2 -E "Found [0-9]* error|::error|❌" "$INPUT_FILE")
|
|
else
|
|
# Extract lines that look like errors, with some context, limited to avoid too long comments
|
|
RESULTS=$(grep -Ci 1 -E "FAILED|::error|❌|exit status|failure" "$INPUT_FILE" | tail -n 40)
|
|
fi
|
|
HEADER="### ❌ CI Failure: $REPORT_TYPE"
|
|
else
|
|
RESULTS="All checks passed! ✅"
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$RESULTS" ]; then
|
|
RESULTS="No detailed results found in $INPUT_FILE"
|
|
fi
|
|
|
|
# Construct the message
|
|
# Note: Gitea/GitHub PR reviews use a JSON body where \n is a literal newline
|
|
BODY="${HEADER}\n\n"
|
|
BODY="${BODY}\`\`\`text\n${RESULTS}\n\`\`\`\n\n"
|
|
BODY="${BODY}🔗 [View Full Run](${RUN_URL})"
|
|
|
|
# Use jq to construct the JSON payload safely
|
|
JSON_PAYLOAD=$(jq -n \
|
|
--arg body "$BODY" \
|
|
'{body: $body, event: "COMMENT"}')
|
|
|
|
# Post to Gitea
|
|
curl -f -X POST \
|
|
-H "Authorization: token $GITEA_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$JSON_PAYLOAD" \
|
|
"https://git.quad4.io/api/v1/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/reviews"
|
|
|