Meta/CI: Remove IRC notifications
With the increased volume of PRs being opened and merged lately, multiple people have complained that the IRC is absolutely flooded with SerenityBot posts. Remove the IRC notifications from the CI scripts, and the Meta script that handles parsing the github actions context into an IRC message.
This commit is contained in:
parent
80a84f726e
commit
3ece67d62d
Notes:
sideshowbarker
2024-07-18 17:12:17 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/3ece67d62d7 Pull-request: https://github.com/SerenityOS/serenity/pull/7565
2 changed files with 0 additions and 147 deletions
30
.github/workflows/cmake.yml
vendored
30
.github/workflows/cmake.yml
vendored
|
@ -238,33 +238,3 @@ jobs:
|
|||
ASAN_OPTIONS: "strict_string_checks=1:check_initialization_order=1:strict_init_order=1"
|
||||
UBSAN_OPTIONS: "print_stacktrace=1:print_summary=1:halt_on_error=1"
|
||||
if: ${{ matrix.with-fuzzers == 'NO_FUZZ' }}
|
||||
|
||||
notify_irc:
|
||||
needs: [build_and_test_serenity, build_and_test_lagom]
|
||||
runs-on: ubuntu-20.04
|
||||
if: always() && github.repository == 'SerenityOS/serenity' && (github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref == 'refs/heads/master'))
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
# Sets environment variable env.WORKFLOW_CONCLUSION to one of [neutral, success, skipped, cancelled, timed_out, action_required, failure]
|
||||
# depending on result of all needs jobs
|
||||
- uses: technote-space/workflow-conclusion-action@v2
|
||||
|
||||
# === NOTIFICATIONS ===
|
||||
|
||||
- name: Dump event info
|
||||
if: always()
|
||||
# Usually unnecessary, but insanely useful if IRC notifications fail.
|
||||
run: |
|
||||
cat <<"EOF"
|
||||
${{ toJSON(github.event) }}
|
||||
${{ toJSON(needs) }}
|
||||
EOF
|
||||
- name: Generate IRC message
|
||||
if: always()
|
||||
run: |
|
||||
${{ github.workspace }}/Meta/notify_irc.py <<"EOF"
|
||||
["${{ github.actor }}", ${{ github.run_id }}, "${{ env.WORKFLOW_CONCLUSION }}",
|
||||
${{ toJSON(github.event) }}
|
||||
]
|
||||
EOF
|
||||
|
|
|
@ -1,117 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import sys
|
||||
import requests
|
||||
|
||||
# Must be exactly three lines each!
|
||||
# No trailing newline! (I.e. keep it as backslash-newline-tripleapostrophe.)
|
||||
TEMPLATE_PUSH = '''\
|
||||
{commit}{post_commit} (pushed master: {status}) {compare} https://github.com/SerenityOS/serenity/actions/runs/{run_id}\
|
||||
'''
|
||||
TEMPLATE_PR = '''\
|
||||
{title} ({actor} {action}: {status}) {link} https://github.com/SerenityOS/serenity/actions/runs/{run_id}\
|
||||
'''
|
||||
SERENITY_BOT = 'http://94.130.182.143:8080'
|
||||
|
||||
|
||||
def compute_lines(wrapper):
|
||||
actor, run_id, raw_status, event = wrapper
|
||||
|
||||
if raw_status == 'success':
|
||||
status = 'The build passed.'
|
||||
elif raw_status == 'failure':
|
||||
status = 'The build failed.'
|
||||
else:
|
||||
status = 'The build {}(?)'.format(raw_status)
|
||||
|
||||
if 'action' not in event:
|
||||
# This is a push.
|
||||
if 'commits' not in event or not event['commits']:
|
||||
show_msg = '??? (No commits in event?!)'
|
||||
post_commit = ''
|
||||
else:
|
||||
commits = event['commits']
|
||||
show_commit = commits[-1]['message']
|
||||
if 'skip ci' in show_commit or 'ci skip' in show_commit:
|
||||
print('User requested to skip IRC notification. Okay!')
|
||||
return False
|
||||
# First line of the last commit:
|
||||
show_msg = show_commit.split('\n')[0]
|
||||
if len(commits) == 1:
|
||||
post_commit = ''
|
||||
elif len(commits) == 2:
|
||||
post_commit = ' (+1 commit)'
|
||||
else:
|
||||
post_commit = ' (+{} commits)'.format(len(commits))
|
||||
return TEMPLATE_PUSH.format(
|
||||
actor=actor,
|
||||
status=status,
|
||||
run_id=run_id,
|
||||
commit=show_msg,
|
||||
post_commit=post_commit,
|
||||
compare=event.get('compare', '???'),
|
||||
)
|
||||
elif 'pull_request' in event:
|
||||
# This is a PR.
|
||||
raw_action = event['action']
|
||||
pull_request = event['pull_request']
|
||||
# actor, until here, is whoever caused the action to run -
|
||||
# if it's a PR we want the author's name in the notification.
|
||||
actor = pull_request['user']['login']
|
||||
if raw_action == 'opened':
|
||||
action = 'opened'
|
||||
elif raw_action == 'reopened':
|
||||
# Reduce spam, don't notify about reopened PRs
|
||||
return False
|
||||
elif raw_action == 'synchronize':
|
||||
# Reduce spam, don't notify about PR updates
|
||||
return False
|
||||
else:
|
||||
action = '{}(?)'.format(raw_action)
|
||||
if pull_request.get('draft', True):
|
||||
print("This is a draft PR, so IRC won't be notified.")
|
||||
print('Note: No rebuild occurs when the PR is "un-drafted"!')
|
||||
return False
|
||||
return TEMPLATE_PR.format(
|
||||
actor=actor,
|
||||
action=action,
|
||||
status=status,
|
||||
run_id=run_id,
|
||||
title=pull_request.get('title', '???'),
|
||||
link=pull_request.get('_links', {}).get('html', {}).get('href', '???'),
|
||||
)
|
||||
else:
|
||||
print('Unrecognized event type?!')
|
||||
return False
|
||||
|
||||
|
||||
def send_notification(line):
|
||||
"""Send a message to IRC channel via HTTP bridge.
|
||||
|
||||
Ars:
|
||||
line (str): message to send
|
||||
"""
|
||||
|
||||
print('> ' + line)
|
||||
try:
|
||||
response = requests.post(SERENITY_BOT, data={'msg': line})
|
||||
except BaseException as e:
|
||||
print('Notification failed: {}: {}'.format(type(e), e))
|
||||
else:
|
||||
print('Notification result: HTTP {}'.format(response.status_code))
|
||||
|
||||
|
||||
def run_on(json_string):
|
||||
wrapper = json.loads(json_string)
|
||||
line = compute_lines(wrapper)
|
||||
if line:
|
||||
send_notification(line)
|
||||
|
||||
|
||||
def run():
|
||||
run_on(sys.stdin.read())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
run()
|
Loading…
Add table
Reference in a new issue