diff --git a/.github/workflows/gardener-notify-slack.yml b/.github/workflows/gardener-notify-slack.yml index 0ba3794717d..56fa94f01bc 100644 --- a/.github/workflows/gardener-notify-slack.yml +++ b/.github/workflows/gardener-notify-slack.yml @@ -1,5 +1,5 @@ name: Gardener - Notify Slack -# Runs after `Gardener - Notify Event` completes. Posts a summary to Slack, +# Runs after `Gardener - Notify Event` completes. Posts a linked title to Slack, # and for Dependabot-opened PRs also applies the `devtools-gardener` label # (so Dependabot PRs show up in the gardener flow without a human having # to label them). @@ -61,57 +61,16 @@ jobs: SLACK_BOT_TOKEN: ${{ secrets.SLACK_GARDENER_BOT_TOKEN }} SLACK_CHANNEL_ID: ${{ vars.GARDENER_SLACK_CHANNEL_ID }} run: | - KIND=$(jq -r 'if has("pull_request") then "PR" else "Issue" end' event.json) - # Pull the body out, truncate, then convert GitHub Markdown to - # Slack mrkdwn. Links and fenced code blocks are stashed before - # the HTML-escape pass so their contents survive verbatim (a `&` - # inside a URL must stay raw, and code content shouldn't be - # mangled). Blockquote `> ` markers are also stashed so the - # `>` → `>` escape doesn't break them. Everything else is - # HTML-escaped so user-supplied `<`, `>`, `&` can't collide - # with Slack link syntax or injected mentions like . - BODY=$(jq -r '(.issue // .pull_request).body // ""' event.json) - if [ ${#BODY} -gt 1000 ]; then - BODY="${BODY:0:1000}…" - fi - BODY=$(printf '%s' "$BODY" | perl -0777 -pe ' - my @u; - s{\[([^\]]+)\]\(([^)]+)\)}{push @u, $2; "\x01$#u\x02$1\x03"}ge; - my @c; - s{^```[^\n]*\n(.*?)\n```$}{push @c, $1; "\x04$#c\x05"}gems; - s/^> /\x06/gm; - s/^#{1,6}\s+(.+)$/*$1*/gm; - s/\*\*(.+?)\*\*/*$1*/g; - s/^(\s*)- \[x\]\s+/$1✓ /gm; - s/^(\s*)[-*]\s+/$1• /gm; - s/&/&/g; - s//>/g; - s/\x06/> /g; - s{\x01(\d+)\x02(.*?)\x03}{"<$u[$1]|$2>"}ge; - s{\x04(\d+)\x05}{"```\n$c[$1]\n```"}ge; - ') jq \ --arg channel "$SLACK_CHANNEL_ID" \ - --arg kind "$KIND" \ - --arg body "$BODY" \ ' def escape: gsub("&";"&") | gsub("<";"<") | gsub(">";">"); (.issue // .pull_request) as $i - | ([$i.labels[]?.name | select(. != "devtools-gardener")] - | map("`\(.)`") | join(" ")) as $labels - | (if $kind == "PR" - then " · \($i.changed_files) files, +\($i.additions)/-\($i.deletions)" - + (if $i.draft then " · draft" else "" end) - else "" end) as $meta - | [ "*<\($i.html_url)|\($kind) #\($i.number)>* — \(($i.title | escape))", - "_opened by \($i.user.login)\($meta)_" ] - + (if $body != "" then [$body] else [] end) - + (if $labels != "" then [$labels] else [] end) - | join("\n") as $msg - | { channel: $channel, text: "\($kind) #\($i.number): \($i.title)", - blocks: [{ type: "section", text: { type: "mrkdwn", text: $msg } }] } + | { channel: $channel, + text: "<\($i.html_url)|\($i.title | escape)>", + unfurl_links: false, + unfurl_media: false } ' event.json | curl -sf -X POST \ -H "Authorization: Bearer $SLACK_BOT_TOKEN" \ -H 'Content-type: application/json; charset=utf-8' \