#!/usr/bin/env python3 import os import sys import json import urllib.request BOT_URL = 'https://tldr-bot.starbeamrainbowlabs.com' COMMENT_ERROR=""" The [build](https://travis-ci.org/tldr-pages/tldr/builds/{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('TRAVIS_REPO_SLUG') PR_ID = os.environ.get('TRAVIS_PULL_REQUEST') BUILD_ID = os.environ.get('TRAVIS_BUILD_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], '', file=sys.stderr) sys.exit(1) main(sys.argv[1])