Notify Slack channel about upcoming releases #7
Workflow file for this run
This file contains 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
# This workflow notifies Slack channel about upcoming releases. | |
name: Notify Slack channel about upcoming release | |
on: | |
pull_request: | |
# branches: | |
# - release | |
jobs: | |
notify: | |
runs-on: [ ubuntu-latest ] | |
steps: | |
- uses: actions/github-script@v6 | |
id: commitlist | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
retries: 5 | |
result-encoding: string | |
script: | | |
# Slack Message layout craeted with https://app.slack.com/block-kit-builder | |
const linkify = function (text) { | |
return text.replace(/#(\d+)/g, (match, prNumber) => { return `<${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/pulls/${prNumber}|#${prNumber}>` }) | |
} | |
const { data: pullRequest } = await github.rest.pulls.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
// pull_number: context.payload.number, | |
// Try real release PR | |
pull_number: 5202 | |
}); | |
const header = `"${pullRequest.title}" is coming :tada:` | |
const { data: commits } = await github.rest.pulls.listCommits({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
// pull_number: context.payload.number, | |
// Try real release PR | |
pull_number: 5202 | |
}); | |
const blocks = [] | |
blocks.push({ | |
type: "header", | |
text: { | |
type: "plain_text", | |
text: header, | |
}, | |
}) | |
blocks.push({ | |
type: "context", | |
elements: [ | |
{ | |
type: "mrkdwn", | |
text: "<${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/pulls/${context.payload.number}|Release PR>", | |
}, | |
], | |
}) | |
for (const commit of commits) { | |
const message = commit.commit.message.replace(/\r\n/g, "\n") | |
const title = message.split("\n\n", 1)[0] | |
blocks.push({ | |
type: "section", | |
text: { | |
type: "mrkdwn", | |
text: `- ${linkify(title)}`, | |
}, | |
}) | |
} | |
const slackMessage = { | |
text: header, | |
blocks, | |
} | |
console.log(JSON.stringify(slackMessage, null, 2)) | |
return JSON.stringify(slackMessage) | |
- uses: slackapi/slack-github-action@v1 | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
with: | |
channel-id: "C05QQ9J1BRC" # #test-release-notifications | |
payload: ${{ steps.commitlist.outputs.result }} |