velxio/.github/workflows/discord-issues.yml

87 lines
3.1 KiB
YAML

name: Discord — New Issue Notification
on:
issues:
types: [opened]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Build Discord payload
env:
ISSUE_NUMBER: ${{ github.event.issue.number }}
ISSUE_TITLE: ${{ github.event.issue.title }}
ISSUE_URL: ${{ github.event.issue.html_url }}
ISSUE_BODY: ${{ github.event.issue.body }}
ISSUE_USER: ${{ github.event.issue.user.login }}
ISSUE_AVATAR: ${{ github.event.issue.user.avatar_url }}
ISSUE_CREATED_AT: ${{ github.event.issue.created_at }}
REPO: ${{ github.repository }}
LABELS_JSON: ${{ toJson(github.event.issue.labels) }}
run: |
python3 - <<'PYEOF'
import json, os
number = os.environ["ISSUE_NUMBER"]
title = os.environ["ISSUE_TITLE"]
url = os.environ["ISSUE_URL"]
body = os.environ.get("ISSUE_BODY") or ""
user = os.environ["ISSUE_USER"]
avatar = os.environ["ISSUE_AVATAR"]
repo = os.environ["REPO"]
created_at = os.environ["ISSUE_CREATED_AT"]
short_body = body[:300] + ("..." if len(body) > 300 else "")
if not short_body.strip():
short_body = "*(no description)*"
try:
labels_raw = json.loads(os.environ.get("LABELS_JSON", "[]"))
labels = ", ".join(f"`{l['name']}`" for l in labels_raw) if labels_raw else "*(none)*"
except Exception:
labels = "*(none)*"
payload = {
"content": "@everyone 📢 **New issue reported on Velxio!**",
"embeds": [{
"title": f"🐛 Issue #{number}: {title}",
"url": url,
"description": short_body,
"color": 0xE74C3C,
"fields": [
{"name": "📦 Repository", "value": f"[`{repo}`](https://github.com/{repo})", "inline": True},
{"name": "🏷️ Labels", "value": labels, "inline": True}
],
"author": {
"name": user,
"url": f"https://github.com/{user}",
"icon_url": avatar
},
"footer": {"text": "Velxio · GitHub Issues"},
"timestamp": created_at
}]
}
with open("/tmp/discord_payload.json", "w") as f:
json.dump(payload, f)
PYEOF
- name: Send to Discord
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_ISSUES }}
run: |
HTTP_STATUS=$(curl -s -o /tmp/discord_response.txt -w "%{http_code}" \
-X POST \
-H "Content-Type: application/json" \
--data @/tmp/discord_payload.json \
"$DISCORD_WEBHOOK")
echo "Discord response: $HTTP_STATUS"
cat /tmp/discord_response.txt
if [ "$HTTP_STATUS" -ne 204 ]; then
echo "::error::Discord webhook failed with status $HTTP_STATUS"
exit 1
fi