diff --git a/.github/workflows/discord-notification.yml b/.github/workflows/discord-notification.yml index 5eb48570e7..d731faafd9 100644 --- a/.github/workflows/discord-notification.yml +++ b/.github/workflows/discord-notification.yml @@ -9,9 +9,7 @@ on: issue_comment: types: - created - pull_request_review_comment: - types: - - created + - edited jobs: notify_discord_when_pr_opened: @@ -53,23 +51,7 @@ jobs: COMMENT_BODY: ${{ github.event.comment.body }} COMMENT_AUTHOR: ${{ github.event.comment.user.login }} COMMENT_URL: ${{ github.event.comment.html_url }} - DISCORD_CHANNEL_ID: "1372204995868491786" - DISCORD_GUILD_ID: "930051556043276338" - secrets: - DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_AI_BOT_TOKEN }} - - notify_discord_on_review_comment: - if: > - github.event_name == 'pull_request_review_comment' - && github.event.comment.user.login != 'cloudflare-workers-and-pages[bot]' - && github.event.comment.user.login != 'ellipsis-dev[bot]' - uses: ./.github/workflows/shareable-discord-notification.yml - with: - PR_STATUS: "comment" - PR_NUMBER: ${{ github.event.pull_request.number }} - COMMENT_BODY: ${{ github.event.comment.body }} - COMMENT_AUTHOR: ${{ github.event.comment.user.login }} - COMMENT_URL: ${{ github.event.comment.html_url }} + COMMENT_IS_EDIT: ${{ github.event.action == 'edited' }} DISCORD_CHANNEL_ID: "1372204995868491786" DISCORD_GUILD_ID: "930051556043276338" secrets: diff --git a/.github/workflows/shareable-discord-notification.yml b/.github/workflows/shareable-discord-notification.yml index cf8c7d9078..b0d3fed549 100644 --- a/.github/workflows/shareable-discord-notification.yml +++ b/.github/workflows/shareable-discord-notification.yml @@ -36,6 +36,10 @@ on: description: "The comment URL" type: string default: "" + COMMENT_IS_EDIT: + description: "Whether this is an edit of an existing comment" + type: string + default: "false" secrets: DISCORD_WEBHOOK_URL: description: "Discord Webhook URL" @@ -135,7 +139,7 @@ jobs: runs-on: ubuntu-latest if: ${{ inputs.PR_STATUS == 'comment' }} steps: - - name: Post comment to Discord thread + - name: Post or update comment in Discord thread env: BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }} CHANNEL_ID: ${{ inputs.DISCORD_CHANNEL_ID }} @@ -144,6 +148,7 @@ jobs: COMMENT_BODY: ${{ inputs.COMMENT_BODY }} COMMENT_AUTHOR: ${{ inputs.COMMENT_AUTHOR }} COMMENT_URL: ${{ inputs.COMMENT_URL }} + COMMENT_IS_EDIT: ${{ inputs.COMMENT_IS_EDIT }} run: | # 1) Find the thread by PR number threads=$(curl -s -H "Authorization: Bot $BOT_TOKEN" \ @@ -172,10 +177,36 @@ jobs: truncated_body="$COMMENT_BODY" fi - # 3) Post the comment to the thread - message=$(printf '**%s** [commented](%s):\n%s' "$COMMENT_AUTHOR" "$COMMENT_URL" "$truncated_body") + # 3) Build the message content + if [ "$COMMENT_IS_EDIT" = "true" ]; then + message=$(printf '**%s** [edited comment](%s):\n%s' "$COMMENT_AUTHOR" "$COMMENT_URL" "$truncated_body") + else + message=$(printf '**%s** [commented](%s):\n%s' "$COMMENT_AUTHOR" "$COMMENT_URL" "$truncated_body") + fi payload=$(jq -n --arg content "$message" '{content: $content, flags: 4, allowed_mentions: {parse: []}}') + # 4) If this is an edit, try to find and update the existing Discord message + if [ "$COMMENT_IS_EDIT" = "true" ]; then + # Search recent messages in the thread for one containing the comment URL + messages=$(curl -s -H "Authorization: Bot $BOT_TOKEN" \ + "https://discord.com/api/v10/channels/${thread_id}/messages?limit=100") + existing_msg_id=$(echo "$messages" | jq -r \ + --arg url "$COMMENT_URL" \ + '[.[] | select(.content | contains($url))] | first | .id // empty') + + if [ -n "$existing_msg_id" ]; then + echo "Updating existing Discord message $existing_msg_id" + curl -s -X PATCH \ + -H "Authorization: Bot $BOT_TOKEN" \ + -H "Content-Type: application/json" \ + -d "$payload" \ + "https://discord.com/api/v10/channels/${thread_id}/messages/${existing_msg_id}" + exit 0 + fi + echo "Original Discord message not found, posting as new message" + fi + + # 5) Post a new message to the thread curl -s -X POST \ -H "Authorization: Bot $BOT_TOKEN" \ -H "Content-Type: application/json" \