tldr/scripts/send-to-bot.py

94 lines
2.4 KiB
Python

#!/usr/bin/env python3
# SPDX-License-Identifier: MIT
import os
import sys
import json
import urllib.request
BOT_URL = 'https://tldr-bot.starbeamrainbowlabs.com'
COMMENT_ERROR="""
The [build](https://github.com/tldr-pages/tldr/actions/runs/{build_id}) for this PR failed with the following error(s):
```
{content}
```
Please fix the error(s) and push again.
"""
COMMENT_CHECK="""
Hello! I've noticed something unusual when checking this PR:
{content}
Is this intended? If so, just ignore this comment. Otherwise, please double-check the commits.
"""
################################################################################
def post_comment(pr_id, body, once):
endpoint = BOT_URL + '/comment'
if once:
endpoint += '/once'
headers = {'Content-Type': 'application/json'}
data = json.dumps({'pr_id': pr_id, 'body': body})
req = urllib.request.Request(endpoint, data.encode(), headers)
try:
resp = urllib.request.urlopen(req)
code = resp.getcode()
except Exception as e:
print('Error sending data to tldr-bot:', str(e), file=sys.stderr)
return False
if code != 200:
print('Error: tldr-bot responded with code', code, file=sys.stderr)
print(resp.read(), file=sys.stderr)
return False
return True
def main(action):
if action not in ('report-errors', 'report-check-results'):
print('Unknown action:', action, file=sys.stderr)
sys.exit(1)
content = sys.stdin.read().strip()
if action == 'report-errors':
comment_body = COMMENT_ERROR.format(build_id=BUILD_ID, content=content)
comment_once = False
elif action == 'report-check-results':
comment_body = COMMENT_CHECK.format(content=content)
comment_once = True
if post_comment(PR_ID, comment_body, comment_once):
print('Success.')
else:
print('Error sending data to tldr-bot!', file=sys.stderr)
################################################################################
if __name__ == '__main__':
REPO_SLUG = os.environ.get('GITHUB_REPOSITORY')
PR_ID = os.environ.get('PULL_REQUEST_ID')
BUILD_ID = os.environ.get('GITHUB_RUN_ID')
if PR_ID is None or BUILD_ID is None or REPO_SLUG is None:
print('Needed environment variables are not set.', file=sys.stderr)
sys.exit(1)
if PR_ID is None or PR_ID == 'false':
print('Not a pull request, refusing to run.', file=sys.stderr)
sys.exit(0)
if len(sys.argv) != 2:
print('Usage:', sys.argv[0], '<ACTION>', file=sys.stderr)
sys.exit(1)
main(sys.argv[1])