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

96 lines
2.9 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# === Inputs ===========================================================
COMMENTER_TYPE="${1:-}"
COMMENTER_INPUT="${2:-}"
COMMENTER_EXITCODE="${3:-0}"
WORKING_DIR="${4:-}"
# If WORKING_DIR is numeric (likely passed exitcode by mistake), reset it
if [[ "$WORKING_DIR" =~ ^[0-9]+$ ]]; then
echo "⚠️ Detected numeric working_dir ('$WORKING_DIR'); treating as unset."
WORKING_DIR=""
fi
# === Move into working directory if specified ========================
if [[ -n "$WORKING_DIR" ]]; then
echo "🔹 Changing to working directory: $WORKING_DIR"
cd "${GITHUB_WORKSPACE}/${WORKING_DIR}" || {
echo "❌ Error: Cannot change to working directory '${WORKING_DIR}'"
exit 1
}
else
cd "${GITHUB_WORKSPACE:-.}"
fi
# === Environment Debug Info ==========================================
echo "📁 Current working directory: $(pwd)"
echo "📦 Repository root: ${GITHUB_WORKSPACE:-N/A}"
# === Setup PATH for OpenTofu =========================================
export PATH="${PATH}:/home/runner/.opentofu/bin"
# === Detect tofu / terraform command =================================
if command -v tofu >/dev/null 2>&1; then
TOFU_CMD="tofu"
elif command -v terraform >/dev/null 2>&1; then
TOFU_CMD="terraform"
else
echo "❌ Neither 'tofu' nor 'terraform' found in PATH."
exit 1
fi
echo "🧰 Using IaC command: $TOFU_CMD"
# === Validation ======================================================
if [[ -z "${COMMENTER_TYPE}" ]]; then
echo "❌ commenter_type input is required."
exit 1
fi
# === Prepare Comment Body ============================================
EXIT_STATUS_MSG=""
if [[ "$COMMENTER_EXITCODE" -eq 0 ]]; then
EXIT_STATUS_MSG="${COMMENTER_TYPE^} succeeded."
else
EXIT_STATUS_MSG="${COMMENTER_TYPE^} failed with exit code ${COMMENTER_EXITCODE}."
fi
# Format comment body
COMMENT_BODY="### ${COMMENTER_TYPE^} Results
\`\`\`
${COMMENTER_INPUT}
\`\`\`
${EXIT_STATUS_MSG}
"
# === Post Comment ====================================================
echo "📝 Posting PR comment to: ${PR_COMMENTS_URL:-N/A}"
if [[ -z "${PR_COMMENTS_URL:-}" ]]; then
echo "❌ Missing PR_COMMENTS_URL environment variable."
exit 1
fi
# Update comment if comment_id exists, otherwise create a new one
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."