89a9fca106
One might want to use the github debugging script with GitHub apps. Add that as a possibility. This also piggybacks a small fix where we called getGithubClient with the wrong data type. Change-Id: I8db77eb5d4d86aa4d6cc3acf3b4e70ef46f9e11d
90 lines
2.3 KiB
Python
Executable File
90 lines
2.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import logging
|
|
|
|
from zuul.driver.github.githubconnection import GithubConnection
|
|
from zuul.driver.github import GithubDriver
|
|
from zuul.model import Change, Project
|
|
|
|
# This is a template with boilerplate code for debugging github issues
|
|
|
|
# TODO: for real use override the following variables
|
|
server = 'github.com'
|
|
api_token = 'xxxx'
|
|
appid = 2
|
|
appkey = '/opt/project/appkey'
|
|
|
|
org = 'example'
|
|
repo = 'sandbox'
|
|
pull_nr = 8
|
|
|
|
|
|
def configure_logging(context):
|
|
stream_handler = logging.StreamHandler()
|
|
logger = logging.getLogger(context)
|
|
logger.addHandler(stream_handler)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
|
|
# uncomment for more logging
|
|
# configure_logging('urllib3')
|
|
# configure_logging('github3')
|
|
# configure_logging('cachecontrol')
|
|
|
|
|
|
# This is all that's needed for getting a usable github connection
|
|
def create_connection(server, api_token):
|
|
driver = GithubDriver()
|
|
connection_config = {
|
|
'server': server,
|
|
'api_token': api_token,
|
|
}
|
|
conn = GithubConnection(driver, 'github', connection_config)
|
|
conn._authenticateGithubAPI()
|
|
return conn
|
|
|
|
|
|
def create_connection_app(server, appid, appkey):
|
|
driver = GithubDriver()
|
|
connection_config = {
|
|
'server': server,
|
|
'app_id': appid,
|
|
'app_key': appkey,
|
|
}
|
|
conn = GithubConnection(driver, 'github', connection_config)
|
|
conn._authenticateGithubAPI()
|
|
conn._prime_installation_map()
|
|
return conn
|
|
|
|
|
|
def get_change(connection: GithubConnection,
|
|
org: str,
|
|
repo: str,
|
|
pull: int) -> Change:
|
|
p = Project("%s/%s" % (org, repo), connection.source)
|
|
github = connection.getGithubClient(p.name)
|
|
pr = github.pull_request(org, repo, pull)
|
|
sha = pr.head.sha
|
|
return conn._getChange(p, pull, sha, True)
|
|
|
|
|
|
# create github connection with api token
|
|
conn = create_connection(server, api_token)
|
|
|
|
# create github connection with app key
|
|
# conn = create_connection_app(server, appid, appkey)
|
|
|
|
|
|
# Now we can do anything we want with the connection, e.g. check canMerge for
|
|
# a pull request.
|
|
change = get_change(conn, org, repo, pull_nr)
|
|
|
|
print(conn.canMerge(change, {'cc/gate2'}))
|
|
|
|
|
|
# Or just use the github object.
|
|
# github = conn.getGithubClient()
|
|
#
|
|
# repository = github.repository(org, repo)
|
|
# print(repository.as_dict())
|