๐ฎ Slack Message Broker #13016
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 is triggered whenever any of the workflows listed in on.workflow_run.workflows | |
# has been cancelled or has failed, and will send a message to the plutus-ci channel. | |
name: "๐ฎ Slack Message Broker" | |
on: | |
workflow_dispatch: # Only used for testing | |
status: | |
check_run: | |
workflow_run: | |
types: [completed, requested, in_progress] | |
workflows: | |
- "๐ Broken Links" | |
- "๐ฝ Cardano Constitution Tests" | |
- "๐ฐ Cost Model Benchmark" | |
- "๐ฆ Docusaurus Site" | |
- "๐ Haddock Site" | |
- "๐ฉบ Longitudinal Benchmark" | |
- "๐ Manual Benchmark" | |
- "๐ฎ Metatheory Site" | |
- "๐ Nightly Testsuite" | |
- "๐ Papers & Specs" | |
- "๐๏ธ PlutusTx Template" | |
jobs: | |
Send: | |
runs-on: [ubuntu-latest] | |
steps: | |
- name: Prepare Slack Message | |
uses: actions/github-script@main | |
id: prepare-slack-message | |
with: | |
script: | | |
const event = context.payload; | |
console.log(github); | |
let message = "<unknown>"; | |
let shouldSendMessage = true; | |
function handleWorkflowDispatchEvent() { | |
} | |
function handleStatusEvent() { | |
} | |
function handleCheckRunEvent() { | |
} | |
function handleWorkflowRunEvent() { | |
const actor = context.actor; | |
const name = event.workflow_run.name; | |
const url = event.workflow_run.html_url; | |
const status = event.workflow_run.status; | |
const conclusion = event.workflow_run.conclusion; | |
const failureConclusions = [ "failure", "null", "cancelled", "action_required", "neutral", "timed_out" ]; | |
if (conclusion == "") { | |
message = `${name} \`${status}\` โณ <${url}|View Logs>`; | |
shouldSendMessage = false; | |
} | |
else if (conclusion == "success") { | |
message = `${name} \`${conclusion}\` โ <${url}|View Logs>`; | |
shouldSendMessage = false; | |
} | |
else if (conclusion == "skipped") { | |
message = `${name} \`${conclusion}\` โฉ <${url}|View Logs>`; | |
shouldSendMessage = false; | |
} | |
else if (failureConclusions.includes(conclusion)) { | |
message = `${name} \`${conclusion}\` โ <${url}|View Logs> @${actor}`; | |
shouldSendMessage = true; | |
} | |
else { | |
message = `${name} \`${conclusion}\` โ๏ธ <${url}|View Logs> Unknown Conclusion @${actor}`; | |
shouldSendMessage = true; | |
} | |
} | |
if (event.eventName == 'workflow_dispatch') { | |
handleWorkflowDispatchEvent(); | |
} | |
else if (event.eventName == 'status') { | |
handleStatusEvent(); | |
} | |
else if (event.eventName == 'check_run') { | |
handleCheckRunEvent(); | |
} | |
else if (event.eventName == 'workflow_run') { | |
handleWorkflowRunEvent(); | |
} | |
else { | |
core.setFailed(`Unknown Event: ${event.eventName}`); | |
} | |
console.log(`message: ${message}`); | |
console.log(`shouldSendMessage: ${shouldSendMessage}`); | |
core.setOutput("message", message); | |
core.setOutput("shouldSendMessage", shouldSendMessage); | |
- name: Notify Slack | |
uses: slackapi/[email protected] | |
if: ${{ success() && steps.prepare-slack-message.outputs.shouldSendMessage == 'true' }} | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
with: | |
# channel-id: C07A1GSNZEE # plutus-ci | |
channel-id: C07PZQW3CA2 # plutus-ci-test | |
payload: | | |
{ | |
"text": "${{ steps.prepare-slack-message.outputs.message }}", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "${{ steps.prepare-slack-message.outputs.message }}" | |
} | |
} | |
] | |
} | |