Skip to content

Commit

Permalink
chore(ci): fix workflow webhook notification and use "Kong/github-sla…
Browse files Browse the repository at this point in the history
…ck-mapping" file based mapping instead of variables for easier update (#12021)

FTI-5564
  • Loading branch information
outsinre committed Nov 30, 2023
1 parent b65123b commit 53465cb
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 0 deletions.
51 changes: 51 additions & 0 deletions .github/workflows/backport-fail-bot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Forward failed backport alert to Slack

on:
issue_comment:
types: [created]

jobs:
check_comment:
runs-on: ubuntu-latest
if: github.event.issue.pull_request != null && contains(github.event.comment.body, 'To backport manually, run these commands in your terminal')

steps:
- name: Fetch mapping file
id: fetch_mapping
uses: actions/github-script@v6
env:
ACCESS_TOKEN: ${{ secrets.PAT }}
with:
script: |
const url = 'https://raw.githubusercontent.com/Kong/github-slack-mapping/main/mapping.json';
const headers = {Authorization: `token ${process.env.ACCESS_TOKEN}`};
const response = await fetch(url, {headers});
const mapping = await response.json();
return mapping;
- name: Generate Slack Payload
id: generate-payload
uses: actions/github-script@v6
env:
SLACK_CHANNEL: gateway-notifications
SLACK_MAPPING: "${{ steps.fetch_mapping.outputs.result }}"
with:
script: |
const pr_url = ${{ github.event.issue.pull_request.html_url }};
const slack_mapping = JSON.parse(process.env.SLACK_MAPPING);
const pr_author_github_id = ${{ github.event.issue.user.login }};
const pr_author_slack_id = slack_mapping[pr_author_github_id];
const author = pr_author_slack_id ? `<@${pr_author_slack_id}>` : pr_author_github_id;
const payload = {
text: `${pr_url} from ${author} failed to backport.`,
channel: process.env.SLACK_CHANNEL,
};
return JSON.stringify(payload);
result-encoding: string

- name: Send Slack Message
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0
with:
payload: ${{ steps.generate-payload.outputs.result }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GATEWAY_NOTIFICATIONS_WEBHOOK }}
59 changes: 59 additions & 0 deletions .github/workflows/release-and-tests-fail-bot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Notify Slack user on workflow failure

on:
workflow_run:
workflows: ["Package & Release", "Build & Test"]
types:
- completed
branches:
- master
- release/*
- next/*

jobs:
notify_failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.event != 'schedule' }}
steps:
- name: Fetch mapping file
id: fetch_mapping
uses: actions/github-script@v6
env:
ACCESS_TOKEN: ${{ secrets.PAT }}
with:
script: |
const url = 'https://raw.githubusercontent.com/Kong/github-slack-mapping/main/mapping.json';
const headers = {Authorization: `token ${process.env.ACCESS_TOKEN}`};
const response = await fetch(url, {headers});
const mapping = await response.json();
return mapping;
- name: Generate Slack Payload
id: generate-payload
env:
SLACK_CHANNEL: gateway-notifications
SLACK_MAPPING: "${{ steps.fetch_mapping.outputs.result }}"
uses: actions/github-script@v6
with:
script: |
const workflow_name = "${{ github.event.workflow_run.name }}";
const repo_name = "${{ github.event.workflow_run.repository.full_name }}";
const branch_name = "${{ github.event.workflow_run.head_branch }}";
const run_url = "${{ github.event.workflow_run.html_url }}";
const slack_mapping = JSON.parse(process.env.SLACK_MAPPING);
const actor_github_id = "${{ github.event.workflow_run.actor.login }}";
const actor_slack_id = slack_mapping[actor_github_id];
const actor = actor_slack_id ? `<@${actor_slack_id}>` : actor_github_id;
const payload = {
text: `Hello ${actor} , workflow “${workflow_name}” failed in repo: "${repo_name}", branch: "${branch_name}". Please check it: ${run_url}.`,
channel: process.env.SLACK_CHANNEL,
};
return JSON.stringify(payload);
result-encoding: string

- name: Send Slack Message
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0
with:
payload: ${{ steps.generate-payload.outputs.result }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GATEWAY_NOTIFICATIONS_WEBHOOK }}

0 comments on commit 53465cb

Please sign in to comment.