Changeset View
Changeset View
Standalone View
Standalone View
contrib/buildbot/abcbot.py
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
# | # | ||||
# Copyright (c) 2017-2019 The Bitcoin ABC developers | # Copyright (c) 2017-2019 The Bitcoin ABC developers | ||||
# Distributed under the MIT software license, see the accompanying | # Distributed under the MIT software license, see the accompanying | ||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | # file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
import sys | import sys | ||||
import os | import os | ||||
import argparse | import argparse | ||||
import logging | import logging | ||||
import slack | import slack | ||||
from logging.handlers import RotatingFileHandler | from logging.handlers import RotatingFileHandler | ||||
from cirrus import Cirrus | |||||
from phabricator_wrapper import PhabWrapper | from phabricator_wrapper import PhabWrapper | ||||
from slackbot import SlackBot | from slackbot import SlackBot | ||||
from teamcity_wrapper import TeamCity | from teamcity_wrapper import TeamCity | ||||
from travis import Travis | |||||
import server | import server | ||||
# Setup global parameters | # Setup global parameters | ||||
conduit_token = os.getenv("TEAMCITY_CONDUIT_TOKEN", None) | conduit_token = os.getenv("TEAMCITY_CONDUIT_TOKEN", None) | ||||
db_file_no_ext = os.getenv("DATABASE_FILE_NO_EXT", None) | db_file_no_ext = os.getenv("DATABASE_FILE_NO_EXT", None) | ||||
tc_user = os.getenv("TEAMCITY_USERNAME", None) | tc_user = os.getenv("TEAMCITY_USERNAME", None) | ||||
tc_pass = os.getenv("TEAMCITY_PASSWORD", None) | tc_pass = os.getenv("TEAMCITY_PASSWORD", None) | ||||
phabricatorUrl = os.getenv( | phabricatorUrl = os.getenv( | ||||
"PHABRICATOR_URL", "https://reviews.bitcoinabc.org/api/") | "PHABRICATOR_URL", "https://reviews.bitcoinabc.org/api/") | ||||
slack_token = os.getenv('SLACK_BOT_TOKEN', None) | slack_token = os.getenv('SLACK_BOT_TOKEN', None) | ||||
tc = TeamCity('https://build.bitcoinabc.org', tc_user, tc_pass) | tc = TeamCity('https://build.bitcoinabc.org', tc_user, tc_pass) | ||||
phab = PhabWrapper(host=phabricatorUrl, token=conduit_token) | phab = PhabWrapper(host=phabricatorUrl, token=conduit_token) | ||||
phab.update_interfaces() | phab.update_interfaces() | ||||
slack_channels = { | slack_channels = { | ||||
# #dev | # #dev | ||||
'dev': 'C62NSDC6N', | 'dev': 'C62NSDC6N', | ||||
# #abcbot-testing | # #abcbot-testing | ||||
'test': 'CQMSVCY66', | 'test': 'CQMSVCY66', | ||||
# #infra-support | # #infra-support | ||||
'infra': 'G016CFAV8KS', | 'infra': 'G016CFAV8KS', | ||||
} | } | ||||
slackbot = SlackBot(slack.WebClient, slack_token, slack_channels) | slackbot = SlackBot(slack.WebClient, slack_token, slack_channels) | ||||
travis = Travis() | cirrus = Cirrus() | ||||
def main(args): | def main(args): | ||||
parser = argparse.ArgumentParser( | parser = argparse.ArgumentParser( | ||||
description='Continuous integration build bot service.') | description='Continuous integration build bot service.') | ||||
parser.add_argument( | parser.add_argument( | ||||
'-p', '--port', help='port for server to start', type=int, default=8080) | '-p', '--port', help='port for server to start', type=int, default=8080) | ||||
parser.add_argument( | parser.add_argument( | ||||
'-l', '--log-file', help='log file to dump requests payload', type=str, default='log.log') | '-l', '--log-file', help='log file to dump requests payload', type=str, default='log.log') | ||||
args = parser.parse_args() | args = parser.parse_args() | ||||
port = args.port | port = args.port | ||||
log_file = args.log_file | log_file = args.log_file | ||||
app = server.create_server( | app = server.create_server( | ||||
tc, | tc, | ||||
phab, | phab, | ||||
slackbot, | slackbot, | ||||
travis, | cirrus, | ||||
db_file_no_ext=db_file_no_ext) | db_file_no_ext=db_file_no_ext) | ||||
formater = logging.Formatter( | formater = logging.Formatter( | ||||
'[%(asctime)s] %(levelname)s in %(module)s: %(message)s') | '[%(asctime)s] %(levelname)s in %(module)s: %(message)s') | ||||
fileHandler = RotatingFileHandler(log_file, maxBytes=10000, backupCount=1) | fileHandler = RotatingFileHandler(log_file, maxBytes=10000, backupCount=1) | ||||
fileHandler.setFormatter(formater) | fileHandler.setFormatter(formater) | ||||
app.logger.addHandler(fileHandler) | app.logger.addHandler(fileHandler) | ||||
app.run(host="0.0.0.0", port=port) | app.run(host="0.0.0.0", port=port) | ||||
if __name__ == "__main__": | if __name__ == "__main__": | ||||
main(sys.argv) | main(sys.argv) |