diff --git a/.github/workflows/discord.yaml b/.github/workflows/discord.yaml index 0ce2f610..b82febc8 100644 --- a/.github/workflows/discord.yaml +++ b/.github/workflows/discord.yaml @@ -36,17 +36,21 @@ jobs: PR_USER: ${{ github.event.pull_request.user.login }} PR_BODY: ${{ github.event.pull_request.body }} run: | + # escape markdown special chars + esc() { sed 's/[\\*_[\]()~`>]/\\&/g'; } + if [ "$ACTION" = "opened" ]; then ICON="๐Ÿ”€"; LABEL="New PR" elif [ "$ACTION" = "closed" ] && [ "$MERGED" = "true" ]; then ICON="๐ŸŽ‰"; LABEL="Merged" elif [ "$ACTION" = "closed" ]; then ICON="โŒ"; LABEL="Closed" elif [ "$ACTION" = "reopened" ]; then ICON="๐Ÿ”„"; LABEL="Reopened" else ICON="๐Ÿ“‹"; LABEL="Ready"; fi - BODY=$(echo "$PR_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH) + TITLE=$(echo "$PR_TITLE" | esc) + BODY=$(echo "$PR_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH | esc) [ ${#PR_BODY} -gt $MAX_BODY_LENGTH ] && BODY="${BODY}..." [ -n "$BODY" ] && BODY=" ยท $BODY" - MSG=$(printf '%s **[%s #%s: %s](<%s>)**\nby @%s%s' "$ICON" "$LABEL" "$PR_NUM" "$PR_TITLE" "$PR_URL" "$PR_USER" "$BODY") + MSG="$ICON **[$LABEL #$PR_NUM: $TITLE](<$PR_URL>)**"$'\n'"by @$PR_USER$BODY" jq -n --arg content "$MSG" '{content: $content}' | curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @- # Issue events @@ -64,15 +68,19 @@ jobs: ISSUE_USER: ${{ github.event.issue.user.login }} ISSUE_BODY: ${{ github.event.issue.body }} run: | + # escape markdown special chars + esc() { sed 's/[\\*_[\]()~`>]/\\&/g'; } + if [ "$ACTION" = "opened" ]; then ICON="๐Ÿ›"; LABEL="New Issue" elif [ "$ACTION" = "closed" ]; then ICON="โœ…"; LABEL="Closed" else ICON="๐Ÿ”„"; LABEL="Reopened"; fi - BODY=$(echo "$ISSUE_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH) + TITLE=$(echo "$ISSUE_TITLE" | esc) + BODY=$(echo "$ISSUE_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH | esc) [ ${#ISSUE_BODY} -gt $MAX_BODY_LENGTH ] && BODY="${BODY}..." [ -n "$BODY" ] && BODY=" ยท $BODY" - MSG=$(printf '%s **[%s #%s: %s](<%s>)**\nby @%s%s' "$ICON" "$LABEL" "$ISSUE_NUM" "$ISSUE_TITLE" "$ISSUE_URL" "$ISSUE_USER" "$BODY") + MSG="$ICON **[$LABEL #$ISSUE_NUM: $TITLE](<$ISSUE_URL>)**"$'\n'"by @$ISSUE_USER$BODY" jq -n --arg content "$MSG" '{content: $content}' | curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @- # Issue comment @@ -90,12 +98,16 @@ jobs: COMMENT_USER: ${{ github.event.comment.user.login }} COMMENT_BODY: ${{ github.event.comment.body }} run: | + # escape markdown special chars + esc() { sed 's/[\\*_[\]()~`>]/\\&/g'; } + [ "$IS_PR" = "true" ] && TYPE="PR" || TYPE="Issue" - BODY=$(echo "$COMMENT_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH) + TITLE=$(echo "$ISSUE_TITLE" | esc) + BODY=$(echo "$COMMENT_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH | esc) [ ${#COMMENT_BODY} -gt $MAX_BODY_LENGTH ] && BODY="${BODY}..." - MSG=$(printf '๐Ÿ’ฌ **[Comment on %s #%s: %s](<%s>)**\n@%s: %s' "$TYPE" "$ISSUE_NUM" "$ISSUE_TITLE" "$COMMENT_URL" "$COMMENT_USER" "$BODY") + MSG="๐Ÿ’ฌ **[Comment on $TYPE #$ISSUE_NUM: $TITLE](<$COMMENT_URL>)**"$'\n'"@$COMMENT_USER: $BODY" jq -n --arg content "$MSG" '{content: $content}' | curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @- # PR Review @@ -113,15 +125,19 @@ jobs: REVIEW_USER: ${{ github.event.review.user.login }} REVIEW_BODY: ${{ github.event.review.body }} run: | + # escape markdown special chars + esc() { sed 's/[\\*_[\]()~`>]/\\&/g'; } + if [ "$STATE" = "approved" ]; then ICON="โœ…"; LABEL="Approved" elif [ "$STATE" = "changes_requested" ]; then ICON="๐Ÿ”ง"; LABEL="Changes Requested" else ICON="๐Ÿ‘€"; LABEL="Reviewed"; fi - BODY=$(echo "$REVIEW_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH) + TITLE=$(echo "$PR_TITLE" | esc) + BODY=$(echo "$REVIEW_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH | esc) [ ${#REVIEW_BODY} -gt $MAX_BODY_LENGTH ] && BODY="${BODY}..." [ -n "$BODY" ] && BODY=": $BODY" - MSG=$(printf '%s **[%s PR #%s: %s](<%s>)**\n@%s%s' "$ICON" "$LABEL" "$PR_NUM" "$PR_TITLE" "$REVIEW_URL" "$REVIEW_USER" "$BODY") + MSG="$ICON **[$LABEL PR #$PR_NUM: $TITLE](<$REVIEW_URL>)**"$'\n'"@$REVIEW_USER$BODY" jq -n --arg content "$MSG" '{content: $content}' | curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @- # PR Review comment @@ -138,10 +154,14 @@ jobs: COMMENT_USER: ${{ github.event.comment.user.login }} COMMENT_BODY: ${{ github.event.comment.body }} run: | - BODY=$(echo "$COMMENT_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH) + # escape markdown special chars + esc() { sed 's/[\\*_[\]()~`>]/\\&/g'; } + + TITLE=$(echo "$PR_TITLE" | esc) + BODY=$(echo "$COMMENT_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH | esc) [ ${#COMMENT_BODY} -gt $MAX_BODY_LENGTH ] && BODY="${BODY}..." - MSG=$(printf '๐Ÿ’ญ **[Review Comment PR #%s: %s](<%s>)**\n@%s: %s' "$PR_NUM" "$PR_TITLE" "$COMMENT_URL" "$COMMENT_USER" "$BODY") + MSG="๐Ÿ’ญ **[Review Comment PR #$PR_NUM: $TITLE](<$COMMENT_URL>)**"$'\n'"@$COMMENT_USER: $BODY" jq -n --arg content "$MSG" '{content: $content}' | curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @- # Release @@ -157,11 +177,15 @@ jobs: URL: ${{ github.event.release.html_url }} RELEASE_BODY: ${{ github.event.release.body }} run: | - BODY=$(echo "$RELEASE_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH) + # escape markdown special chars + esc() { sed 's/[\\*_[\]()~`>]/\\&/g'; } + + REL_NAME=$(echo "$NAME" | esc) + BODY=$(echo "$RELEASE_BODY" | tr '\n\r' ' ' | head -c $MAX_BODY_LENGTH | esc) [ ${#RELEASE_BODY} -gt $MAX_BODY_LENGTH ] && BODY="${BODY}..." [ -n "$BODY" ] && BODY=" ยท $BODY" - MSG=$(printf '๐Ÿš€ **[Release %s: %s](<%s>)**\n%s' "$TAG" "$NAME" "$URL" "$BODY") + MSG="๐Ÿš€ **[Release $TAG: $REL_NAME](<$URL>)**"$'\n'"$BODY" jq -n --arg content "$MSG" '{content: $content}' | curl -X POST "$WEBHOOK" -H "Content-Type: application/json" -d @- # Branch/tag created