Merge pull request #22 from stordco/webclient-json

Fix #18 - Enable passing JSON payload to Slack App Route
This commit is contained in:
Steve Gill
2021-11-08 22:37:54 -08:00
committed by GitHub
3 changed files with 79 additions and 15 deletions
@@ -0,0 +1,15 @@
on: [push]
jobs:
new_push_job:
runs-on: ubuntu-latest
name: New push to repo
steps:
- name: Send GitHub trigger payload to Slack Workflow Builder
id: slack
uses: slackapi/[email protected]
with:
channel-id: 'SLACK_CHANNEL_ID' # ID of Slack Channel you want to post to
payload: "{\"text\":\"posting from a github action\"}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
@@ -0,0 +1,47 @@
on: [push]
jobs:
new_push_job:
runs-on: ubuntu-latest
name: New push to repo
steps:
- name: Send GitHub trigger payload to Slack Workflow Builder
id: slack
uses: slackapi/[email protected]
with:
channel-id: 'SLACK_CHANNEL_ID' # ID of Slack Channel you want to post to
payload: |
{
"blocks": [
{ "type": "divider" },
{
"type": "image",
"title": {
"type": "plain_text",
"text": "Slack Slack Slack",
"emoji": true
},
"image_url": "https://media.makeameme.org/created/a-slack-this.jpg",
"alt_text": "marg"
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": $values.button_text
},
"url": $values.button_url
}
]
}
],
channel-id": "NEW_TARGET_CHANNEL_ID"
}
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
values: |
button_text: ${{ github.sha }}
button_url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
+17 -15
View File
@@ -13,35 +13,37 @@ try {
throw 'Need to provide at least one botToken or webhookUrl'
}
if(payload) {
try {
// confirm it is valid json
payload = JSON.parse(payload);
} catch (e) {
// passed in payload wasn't valid json
console.error("passed in payload was invalid JSON")
throw 'Need to provide valid JSON payload'
}
}
if (typeof botToken !== 'undefined' && botToken.length > 0) {
const message = core.getInput('slack-message');
const channelId = core.getInput('channel-id');
const web = new WebClient(botToken);
if(channelId.length > 0 && message.length > 0) {
if(channelId.length > 0 && (message.length > 0 || payload)) {
// post message
web.chat.postMessage({text: message, channel: channelId});
web.chat.postMessage({channel: channelId, text: message, ...(payload || {})});
} else {
console.log('missing either channel-id or slack-message! Did not send a message via chat.postMessage with botToken');
console.log('missing either channel-id, slack-message or payload! Did not send a message via chat.postMessage with botToken');
}
}
}
if (typeof webhookUrl !== 'undefined' && webhookUrl.length > 0) {
if (payload.length < 1) {
if (!payload) {
// No Payload was passed in
console.log('no custom payload was passed in, using default payload that triggered the GitHub Action')
// Get the JSON webhook payload for the event that triggered the workflow
payload = github.context.payload;
} else {
try {
// confirm it is valid json
payload = JSON.parse(payload);
} catch (e) {
// passed in payload wasn't valid json
console.error("passed in payload was invalid JSON")
throw 'Need to provide valid JSON payload'
}
}
// flatten JSON payload (no nested attributes)