Files
deploy-notify/notify.sh

95 lines
2.1 KiB
Bash

#!/usr/bin/env bash
set -e
# Determine Icon based on Status
ICON="🚀"
if [ "$STATUS" = "failure" ]; then
ICON="❌"
fi
# Prepare Text for Telegram (Markdown)
TEXT="$ICON *$TITLE*%0A%0A$MESSAGE"
echo "Starting notifications..."
# Function: Send to Ntfy
send_ntfy() {
if [ -n "$NTFY_URL" ] && [ -n "$NTFY_TOPIC" ]; then
local click_url="$GIT_URL/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
local auth_args=""
# Check for Basic Auth
if [ -n "$NTFY_USERNAME" ] && [ -n "$NTFY_PASSWORD" ]; then
auth_args="-u $NTFY_USERNAME:$NTFY_PASSWORD"
fi
echo "[Ntfy] Sending..."
if curl -s $auth_args -X POST "$NTFY_URL/$NTFY_TOPIC" \
-H "Title: $ICON $TITLE" \
-H "Priority: 4" \
-H "Click: $click_url" \
-H "Actions: view, Open Logs, $click_url" \
-d "$MESSAGE"; then
echo "[Ntfy] Sent."
else
echo "[Ntfy] Failed."
fi
fi
}
# Function: Send to Gmail
send_gmail() {
if [ -n "$GMAIL_USER" ] && [ -n "$GMAIL_TO" ] && [ -n "$GMAIL_PASS" ]; then
echo "[Gmail] Sending..."
# Send via curl (portable, no sendmail needed)
if curl -s --url "smtps://smtp.gmail.com:465" --ssl-reqd \
--user "$GMAIL_USER:$GMAIL_PASS" \
--mail-from "$GMAIL_USER" \
--mail-rcpt "$GMAIL_TO" \
--upload-file - <<EOF
From: $GMAIL_USER
To: $GMAIL_TO
Subject: $ICON $TITLE
$MESSAGE
EOF
then
echo "[Gmail] Sent."
else
echo "[Gmail] Failed."
fi
fi
}
# Function: Send to Telegram
send_telegram() {
if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then
echo "[Telegram] Sending..."
if curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="$TELEGRAM_CHAT_ID" \
-d parse_mode="Markdown" \
-d text="$TEXT"; then
echo "[Telegram] Sent."
else
echo "[Telegram] Failed."
fi
fi
}
# Execute in parallel
send_gmail &
PID_GMAIL=$!
send_telegram &
PID_TG=$!
send_ntfy &
PID_NTFY=$!
# Wait for completion
wait $PID_GMAIL
wait $PID_TG
wait $PID_NTFY
echo "All notifications processed."