Files
tf-pr-commenter/tf-pr-comment.sh
T
2025-11-08 08:45:44 -05:00

95 lines
2.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# === Inputs via ENV ===================================================
COMMENTER_TYPE="${COMMENTER_TYPE:-}"
COMMENTER_INPUT="${COMMENTER_INPUT:-}"
COMMENTER_EXITCODE="${COMMENTER_EXITCODE:-0}"
WORKING_DIR="${WORKING_DIR:-}"
PR_COMMENTS_URL="${PR_COMMENTS_URL:-}"
PR_COMMENT_ID="${PR_COMMENT_ID:-}"
PR_COMMENT_URI="${PR_COMMENT_URI:-}"
GITHUB_TOKEN="${GITHUB_TOKEN:-}"
# === Validate inputs =================================================
if [[ -z "$COMMENTER_TYPE" ]]; then
echo "❌ commenter_type is required."
exit 1
fi
if [[ -z "$GITHUB_TOKEN" ]]; then
echo "❌ GITHUB_TOKEN is required to post PR comments."
exit 1
fi
# === Move into working directory if specified ========================
if [[ -n "$WORKING_DIR" ]]; then
TARGET_DIR="${GITHUB_WORKSPACE}/${WORKING_DIR}"
if [[ ! -d "$TARGET_DIR" ]]; then
echo "❌ Error: Cannot change to working directory '${WORKING_DIR}'"
exit 1
fi
echo "🔹 Changing to working directory: $WORKING_DIR"
cd "$TARGET_DIR"
else
cd "${GITHUB_WORKSPACE:-.}"
fi
echo "📁 Current working directory: $(pwd)"
echo "📦 Repository root: ${GITHUB_WORKSPACE:-N/A}"
# === Detect IaC command ==============================================
if command -v tofu &>/dev/null; then
TOFU_CMD="tofu"
elif command -v terraform &>/dev/null; then
TOFU_CMD="terraform"
else
echo "❌ Neither 'tofu' nor 'terraform' found in PATH."
echo "PATH: $PATH"
exit 1
fi
echo "🧰 Using IaC command: $TOFU_CMD ($(command -v $TOFU_CMD))"
# === Prepare comment body ===========================================
EXIT_STATUS_MSG=""
if [[ "$COMMENTER_EXITCODE" =~ ^[0-9]+$ && "$COMMENTER_EXITCODE" -eq 0 ]]; then
EXIT_STATUS_MSG="${COMMENTER_TYPE^} succeeded."
else
EXIT_STATUS_MSG="${COMMENTER_TYPE^} failed with exit code ${COMMENTER_EXITCODE}."
fi
COMMENT_BODY="### ${COMMENTER_TYPE^} Results
\`\`\`
${COMMENTER_INPUT}
\`\`\`
${EXIT_STATUS_MSG}
"
# === Post Comment ====================================================
if [[ -z "$PR_COMMENTS_URL" ]]; then
echo "❌ Missing PR_COMMENTS_URL environment variable."
exit 1
fi
if [[ -n "$PR_COMMENT_ID" && -n "$PR_COMMENT_URI" ]]; then
echo "🌀 Updating existing comment (ID: ${PR_COMMENT_ID})"
curl -sS -X PATCH \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg body "$COMMENT_BODY" '{body: $body}')" \
"${PR_COMMENT_URI}" \
|| echo "⚠️ Failed to update existing comment."
else
echo "🆕 Creating a new PR comment"
curl -sS -X POST \
-H "Authorization: token ${GITHUB_TOKEN}" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg body "$COMMENT_BODY" '{body: $body}')" \
"${PR_COMMENTS_URL}" \
|| echo "⚠️ Failed to create PR comment."
fi
echo "✅ Comment posted successfully."