v0.6.3-beta #55
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Discord Release Notification | |
| on: | |
| release: | |
| types: [published] | |
| workflow_dispatch: | |
| jobs: | |
| notify: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Get Release Information | |
| id: get_release | |
| run: | | |
| # 1. Define a random delimiter to prevent the text "EOF" inside release notes from breaking the script | |
| DELIMITER="EOF_$(date +%s)" | |
| if [ "${{ github.event_name }}" == "release" ]; then | |
| # --- AUTOMATIC TRIGGER (Read from Event Path for safety) --- | |
| # Read name/tag safely using jq from the event file | |
| echo "RELEASE_NAME=$(jq -r .release.name "$GITHUB_EVENT_PATH")" >> $GITHUB_ENV | |
| echo "RELEASE_TAG=$(jq -r .release.tag_name "$GITHUB_EVENT_PATH")" >> $GITHUB_ENV | |
| # Read Body safely | |
| echo "RELEASE_BODY<<$DELIMITER" >> $GITHUB_ENV | |
| jq -r .release.body "$GITHUB_EVENT_PATH" >> $GITHUB_ENV | |
| echo "$DELIMITER" >> $GITHUB_ENV | |
| # URLs and Author | |
| echo "RELEASE_URL=$(jq -r .release.html_url "$GITHUB_EVENT_PATH")" >> $GITHUB_ENV | |
| echo "RELEASE_AUTHOR=$(jq -r .release.author.login "$GITHUB_EVENT_PATH")" >> $GITHUB_ENV | |
| echo "RELEASE_AUTHOR_AVATAR=$(jq -r .release.author.avatar_url "$GITHUB_EVENT_PATH")" >> $GITHUB_ENV | |
| # Assets | |
| echo "ASSETS<<$DELIMITER" >> $GITHUB_ENV | |
| jq -r '.release.assets | map("[\(.name)](\(.browser_download_url))") | join("\n")' "$GITHUB_EVENT_PATH" >> $GITHUB_ENV | |
| echo "$DELIMITER" >> $GITHUB_ENV | |
| else | |
| # --- MANUAL TRIGGER (Fetch via CURL) --- | |
| RELEASE_DATA=$(curl -s -H "Authorization: token ${{ github.token }}" \ | |
| "https://api.github.com/repos/${{ github.repository }}/releases/latest") | |
| echo "RELEASE_NAME=$(echo "$RELEASE_DATA" | jq -r '.name')" >> $GITHUB_ENV | |
| echo "RELEASE_TAG=$(echo "$RELEASE_DATA" | jq -r '.tag_name')" >> $GITHUB_ENV | |
| echo "RELEASE_BODY<<$DELIMITER" >> $GITHUB_ENV | |
| echo "$RELEASE_DATA" | jq -r '.body' >> $GITHUB_ENV | |
| echo "$DELIMITER" >> $GITHUB_ENV | |
| echo "RELEASE_URL=$(echo "$RELEASE_DATA" | jq -r '.html_url')" >> $GITHUB_ENV | |
| echo "RELEASE_AUTHOR=$(echo "$RELEASE_DATA" | jq -r '.author.login')" >> $GITHUB_ENV | |
| echo "RELEASE_AUTHOR_AVATAR=$(echo "$RELEASE_DATA" | jq -r '.author.avatar_url')" >> $GITHUB_ENV | |
| echo "ASSETS<<$DELIMITER" >> $GITHUB_ENV | |
| echo "$RELEASE_DATA" | jq -r '.assets | map("[\(.name)](\(.browser_download_url))") | join("\n")' >> $GITHUB_ENV | |
| echo "$DELIMITER" >> $GITHUB_ENV | |
| fi | |
| - name: Send Discord Notification | |
| env: | |
| DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} | |
| RELEASE_BODY: ${{ env.RELEASE_BODY }} | |
| RELEASE_URL: ${{ env.RELEASE_URL }} | |
| RELEASE_NAME: ${{ env.RELEASE_NAME }} | |
| RELEASE_TAG: ${{ env.RELEASE_TAG }} | |
| RELEASE_AUTHOR: ${{ env.RELEASE_AUTHOR }} | |
| RELEASE_AUTHOR_AVATAR: ${{ env.RELEASE_AUTHOR_AVATAR }} | |
| ASSETS: ${{ env.ASSETS }} | |
| run: | | |
| REPO_NAME="${{ github.repository }}" | |
| REPO_URL="https://github.com/${{ github.repository }}" | |
| TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
| if [ -z "$ASSETS" ]; then | |
| ASSETS="No downloadable assets" | |
| fi | |
| # Truncate release body if it exceeds Discord's limit | |
| MAX_DESC_LENGTH=4000 | |
| if [ ${#RELEASE_BODY} -gt $MAX_DESC_LENGTH ]; then | |
| echo "Release body is ${#RELEASE_BODY} characters, truncating..." | |
| RELEASE_BODY_TRUNCATED="${RELEASE_BODY:0:$MAX_DESC_LENGTH}... [Read full release notes]($RELEASE_URL)" | |
| else | |
| RELEASE_BODY_TRUNCATED="$RELEASE_BODY" | |
| fi | |
| # Create Discord payload | |
| DISCORD_PAYLOAD=$(jq -n \ | |
| --arg title "🚀 New Release: $RELEASE_NAME" \ | |
| --arg description "$RELEASE_BODY_TRUNCATED" \ | |
| --arg url "$RELEASE_URL" \ | |
| --arg tag "$RELEASE_TAG" \ | |
| --arg author "$RELEASE_AUTHOR" \ | |
| --arg avatar "$RELEASE_AUTHOR_AVATAR" \ | |
| --arg assets "$ASSETS" \ | |
| --arg timestamp "$TIMESTAMP" \ | |
| --arg repo "$REPO_NAME" \ | |
| --arg repo_url "$REPO_URL" \ | |
| '{ | |
| embeds: [{ | |
| title: $title, | |
| description: $description, | |
| url: $url, | |
| color: 3066993, | |
| fields: [ | |
| { name: "📦 Version", value: ("`" + $tag + "`"), inline: true }, | |
| { name: "👤 Author", value: ("[" + $author + "](https://github.com/" + $author + ")"), inline: true }, | |
| { name: "📂 Repository", value: ("[" + $repo + "](" + $repo_url + ")"), inline: false }, | |
| { name: "⬇️ Downloads", value: $assets, inline: false } | |
| ], | |
| author: { name: $author, icon_url: $avatar, url: ("https://github.com/" + $author) }, | |
| timestamp: $timestamp, | |
| footer: { text: ("Released from " + $repo) } | |
| }] | |
| }') | |
| echo "Sending notification to Discord..." | |
| RESPONSE=$(curl -s -w "\n%{http_code}" -H "Content-Type: application/json" \ | |
| -d "$DISCORD_PAYLOAD" \ | |
| "$DISCORD_WEBHOOK_URL") | |
| HTTP_CODE=$(echo "$RESPONSE" | tail -n1) | |
| if [ "$HTTP_CODE" -eq 204 ] || [ "$HTTP_CODE" -eq 200 ]; then | |
| echo "Success: $HTTP_CODE" | |
| else | |
| echo "Failed: $HTTP_CODE" | |
| exit 1 | |
| fi |