ci: add telegram and matrix bot notifications

This commit is contained in:
Zane Schepke
2025-10-07 18:46:31 -04:00
parent 954d0c1c88
commit 3612cbda08
+56 -17
View File
@@ -1,4 +1,4 @@
name: Send Notifications to Telegram and Matrix
name: notifications
on:
issues:
@@ -11,24 +11,63 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Send to Telegram
env:
MESSAGE: |
${{ github.event_name == 'issues' && github.event.action == 'opened' && format('🆕 New Issue #%s: *%s* by %s\n\n%s\n\n[View Issue](%s)', github.event.issue.number, github.event.issue.title, github.event.issue.user.login, (github.event.issue.body || 'No body provided')[:200], github.event.issue.html_url) ||
github.event_name == 'issues' && github.event.action == 'closed' && format('✅ Issue Closed #%s: *%s* by %s\n\n[View Issue](%s)', github.event.issue.number, github.event.issue.title, github.event.issue.user.login, github.event.issue.html_url) ||
github.event_name == 'release' && github.event.action == 'published' && format('🚀 New Release *%s* (%s)\n\n%s\n\n[View Release](%s)', github.event.release.name, github.event.release.tag_name, (github.event.release.body || 'No notes provided')[:200], github.event.release.html_url) }}
run: |
if [[ "${{ github.event_name }}" == "issues" && "${{ github.event.action }}" == "opened" ]]; then
TITLE="${{ github.event.issue.title }}"
NUMBER=${{ github.event.issue.number }}
USER="${{ github.event.issue.user.login }}"
BODY="${{ github.event.issue.body || 'No body provided' }}"
BODY_TRUNC="${BODY:0:200}" # Truncate to avoid spam
URL="${{ github.event.issue.html_url }}"
TEXT=$(echo -e "🆕 New Issue #$NUMBER: *$TITLE* by $USER\n\n$BODY_TRUNC\n\n[View Issue]($URL)")
elif [[ "${{ github.event_name }}" == "issues" && "${{ github.event.action }}" == "closed" ]]; then
TITLE="${{ github.event.issue.title }}"
NUMBER=${{ github.event.issue.number }}
USER="${{ github.event.issue.user.login }}"
URL="${{ github.event.issue.html_url }}"
TEXT=$(echo -e "✅ Issue Closed #$NUMBER: *$TITLE* by $USER\n\n[View Issue]($URL)")
elif [[ "${{ github.event_name }}" == "release" && "${{ github.event.action }}" == "published" ]]; then
NAME="${{ github.event.release.name }}"
TAG="${{ github.event.release.tag_name }}"
BODY="${{ github.event.release.body || 'No notes provided' }}"
BODY_TRUNC="${BODY:0:200}" # Truncate to avoid spam
URL="${{ github.event.release.html_url }}"
TEXT=$(echo -e "🚀 New Release *$NAME* ($TAG)\n\n$BODY_TRUNC\n\n[View Release]($URL)")
fi
curl -s -X POST "https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendMessage" \
-d chat_id="${{ vars.TELEGRAM_CHAT_ID }}" \
${{ vars.TELEGRAM_THREAD_ID && format('-d message_thread_id=\"%s\"', vars.TELEGRAM_THREAD_ID) || '' }} \
${{ vars.TELEGRAM_THREAD_ID && format('-d message_thread_id="{0}"', vars.TELEGRAM_THREAD_ID) || '' }} \
-d parse_mode="Markdown" \
-d text="$MESSAGE"
--data-urlencode "text=$TEXT"
- name: Send to Matrix
uses: s3krit/matrix-message-action@v0.0.3
with:
room_id: ${{ vars.MATRIX_ROOM_ID }}
access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }}
server: ${{ vars.MATRIX_HOMESERVER }}
message: |
${{ github.event_name == 'issues' && github.event.action == 'opened' && format('🆕 New Issue #{0}: **{1}** by {2}\n\n{3}\n\n[View Issue]({4})', github.event.issue.number, github.event.issue.title, github.event.issue.user.login, (github.event.issue.body || 'No body provided')[:200], github.event.issue.html_url) ||
github.event_name == 'issues' && github.event.action == 'closed' && format('✅ Issue Closed #{0}: **{1}** by {2}\n\n[View Issue]({3})', github.event.issue.number, github.event.issue.title, github.event.issue.user.login, github.event.issue.html_url) ||
github.event_name == 'release' && github.event.action == 'published' && format('🚀 New Release **{0}** ({1})\n\n{2}\n\n[View Release]({3})', github.event.release.name, github.event.release.tag_name, (github.event.release.body || 'No notes provided')[:200], github.event.release.html_url) }}
run: |
PLAIN_MESSAGE=""
HTML_MESSAGE=""
if [[ "${{ github.event_name }}" == "issues" && "${{ github.event.action }}" == "opened" ]]; then
PLAIN_MESSAGE=$(echo -e "🆕 New Issue #${{ github.event.issue.number }}: ${{ github.event.issue.title }} by ${{ github.event.issue.user.login }}\n\n${{ github.event.issue.body || 'No body provided' }}\n\nView Issue: ${{ github.event.issue.html_url }}")
HTML_MESSAGE=$(echo -e "<p>🆕 New Issue #${{ github.event.issue.number }}: <strong>${{ github.event.issue.title }}</strong> by ${{ github.event.issue.user.login }}</p><p>${{ github.event.issue.body || 'No body provided' }}</p><p><a href=\"${{ github.event.issue.html_url }}\">View Issue</a></p>")
elif [[ "${{ github.event_name }}" == "issues" && "${{ github.event.action }}" == "closed" ]]; then
PLAIN_MESSAGE=$(echo -e "✅ Issue Closed #${{ github.event.issue.number }}: ${{ github.event.issue.title }} by ${{ github.event.issue.user.login }}\n\nView Issue: ${{ github.event.issue.html_url }}")
HTML_MESSAGE=$(echo -e "<p>✅ Issue Closed #${{ github.event.issue.number }}: <strong>${{ github.event.issue.title }}</strong> by ${{ github.event.issue.user.login }}</p><p><a href=\"${{ github.event.issue.html_url }}\">View Issue</a></p>")
elif [[ "${{ github.event_name }}" == "release" && "${{ github.event.action }}" == "published" ]]; then
PLAIN_MESSAGE=$(echo -e "🚀 New Release ${{ github.event.release.name }} (${{ github.event.release.tag_name }})\n\n${{ github.event.release.body || 'No notes provided' }}\n\nView Release: ${{ github.event.release.html_url }}")
HTML_MESSAGE=$(echo -e "<p>🚀 New Release <strong>${{ github.event.release.name }}</strong> (${{ github.event.release.tag_name }})</p><p>${{ github.event.release.body || 'No notes provided' }}</p><p><a href=\"${{ github.event.release.html_url }}\">View Release</a></p>")
fi
PLAIN_MESSAGE="${PLAIN_MESSAGE:0:220}"
PAYLOAD=$(jq -n --arg body "$PLAIN_MESSAGE" --arg formatted "$HTML_MESSAGE" '{
"msgtype": "m.text",
"body": $body,
"format": "org.matrix.custom.html",
"formatted_body": $formatted
}')
TXN_ID="${{ github.run_id }}-${{ github.run_attempt }}"
curl -s -X PUT "https://${{ vars.MATRIX_HOMESERVER }}/_matrix/client/v3/rooms/${{ vars.MATRIX_ROOM_ID }}/send/m.room.message/$TXN_ID" \
-H "Authorization: Bearer ${{ secrets.MATRIX_ACCESS_TOKEN }}" \
-H "Content-Type: application/json" \
-d "$PAYLOAD"