Skip to content

Notify Slack channel about upcoming releases #8

Notify Slack channel about upcoming releases

Notify Slack channel about upcoming releases #8

Workflow file for this run

# 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 is created 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 }}