55 workflows : ["Release Build"]
66 types : [completed]
77 workflow_dispatch :
8+ inputs :
9+ mention_everyone :
10+ description : " Ping @everyone on Discord?"
11+ required : false
12+ default : false
13+ type : boolean
814
915jobs :
1016 notify :
1117 runs-on : ubuntu-latest
1218 if : ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
19+
1320 steps :
14- - name : Fetch Latest Tag and Release Notes
21+ - name : Fetch Release Data
22+ id : fetch_data
1523 run : |
16- LATEST_TAG=$(curl -s "https://api.github.com/repos/${{github.repository}}/tags" | jq -r '.[0].name')
17- RELEASE_DATA=$(curl -s "https://api.github.com/repos/${{github.repository}}/releases/tags/$LATEST_TAG")
24+ RELEASE_DATA=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
25+ "https://api.github.com/repos/${{github.repository}}/releases" | jq '.[0]')
26+
27+ TAG=$(echo "$RELEASE_DATA" | jq -r '.tag_name')
28+ echo "tag=$TAG" >> $GITHUB_OUTPUT
1829
1930 echo "$RELEASE_DATA" | jq -r '.body' > release_notes.txt
20- echo "LATEST_TAG=$LATEST_TAG " >> $GITHUB_ENV
31+ echo "$RELEASE_DATA " > release.json
2132
22- - name : Get and Categorize Assets
23- id : categorize
33+ - name : Categorize Assets
2434 run : |
25- curl -s "https://api.github.com/repos/${{github.repository}}/releases/tags/${{ env.LATEST_TAG }}" -o release.json
26-
27- jq -r '.assets[] | "\(.browser_download_url) \(.size)"' release.json | while read -r URL SIZE; do
28- NAME=$(basename "$URL")
29- SIZE_HR=$(awk -v s="$SIZE" 'BEGIN{split("B KB MB GB",u); for(i=1;s>=1024&&i<4;i++)s/=1024; printf "%.2f %s",s,u[i]}')
30-
31- if [[ "$NAME" == *"arm64-v8a"* ]]; then echo "APK_ARM64=[Download]($URL) | $SIZE_HR" >> $GITHUB_ENV
32- elif [[ "$NAME" == *"armeabi-v7a"* ]]; then echo "APK_V7A=[Download]($URL) | $SIZE_HR" >> $GITHUB_ENV
33- elif [[ "$NAME" == *"x86_64"* ]]; then echo "APK_X64=[Download]($URL) | $SIZE_HR" >> $GITHUB_ENV
34- elif [[ "$NAME" == *"-Setup.exe" ]]; then echo "WIN_EXE=[Download]($URL) | $SIZE_HR" >> $GITHUB_ENV
35- elif [[ "$NAME" == *"Windows-Portable.zip" ]]; then echo "WIN_ZIP=[Download]($URL) | $SIZE_HR" >> $GITHUB_ENV
36- elif [[ "$NAME" == *"Linux.zip" ]]; then echo "LINUX_ZIP=[Download]($URL) | $SIZE_HR" >> $GITHUB_ENV
37- fi
38- done
35+ jq -r '.assets[] | "🔹 [\(.name)](\(.browser_download_url)) | \((.size/1048576) | tonumber | round) MB"' release.json > asset_list.txt
3936
40- - name : Send Discord Embed
37+ - name : Send Discord Notification
4138 env :
4239 DISCORD_WEBHOOK : ${{ secrets.DISCORD_WEBHOOK }}
40+ MENTION : ${{ github.event.inputs.mention_everyone == 'true' && '@everyone' || '' }}
41+ TAG : ${{ steps.fetch_data.outputs.tag }}
4342 run : |
44- NOTES=$(cat release_notes.txt | sed 's/||//g')
45-
46- # Mention @everyone or specific roles
47- MENTION="@everyone"
48-
49- # Embed Data
50- PAYLOAD=$(jq -nc \
51- --arg mention "$MENTION" \
52- --arg title "🚀 New Release: ${{ env.LATEST_TAG }}" \
53- --arg desc "$NOTES" \
54- --arg color "1754309" \
55- '{
56- content: $mention,
57- embeds: [{
58- title: $title,
59- description: $desc,
60- color: ($color | tonumber),
61- timestamp: (now | strftime("%Y-%m-%dT%H:%M:%SZ"))
62- }]
63- }')
64-
65- curl -H "Content-Type: application/json" -d "$PAYLOAD" "$DISCORD_WEBHOOK"
43+ NOTES=$(cat release_notes.txt)
44+ ASSETS=$(cat asset_list.txt)
45+ FULL_DESC=$(printf "### Changelog\n%s\n\n### Downloads\n%s" "$NOTES" "$ASSETS")
6646
67- - name : Send Discord Asset Links
68- env :
69- DISCORD_WEBHOOK : ${{ secrets.DISCORD_WEBHOOK }}
70- run : |
71- MSG="📦 **Assets for ${{ env.LATEST_TAG }}**"$'\n'
72- [ -n "$WIN_EXE" ] && MSG="${MSG}🔹 **Windows Setup:** $WIN_EXE"$'\n'
73- [ -n "$WIN_ZIP" ] && MSG="${MSG}🔹 **Windows Portable:** $WIN_ZIP"$'\n'
74- [ -n "$LINUX_ZIP" ] && MSG="${MSG}🔹 **Linux Zip:** $LINUX_ZIP"$'\n'
75- [ -n "$APK_ARM64" ] && MSG="${MSG}🔹 **Android arm64:** $APK_ARM64"$'\n'
76- [ -n "$APK_V7A" ] && MSG="${MSG}🔹 **Android v7a:** $APK_V7A"$'\n'
47+ cat <<EOF > discord_payload.json
48+ {
49+ "content": "$MENTION",
50+ "embeds": [{
51+ "title": "🚀 New Release: $TAG",
52+ "description": "",
53+ "color": 1754309,
54+ "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
55+ }]
56+ }
57+ EOF
58+
59+ jq --arg desc "$FULL_DESC" '.embeds[0].description = $desc' discord_payload.json > final_payload.json
7760
78- PAYLOAD=$(jq -n --arg content "$MSG" '{content: $content}')
79- curl -H "Content-Type: application/json" -d "$PAYLOAD" "$DISCORD_WEBHOOK"
61+ curl -H "Content-Type: application/json" -X POST -d @final_payload.json "$DISCORD_WEBHOOK"
0 commit comments