diff --git a/tools/attention_list.py b/tools/attention_list.py index 3475b50a..2698c212 100644 --- a/tools/attention_list.py +++ b/tools/attention_list.py @@ -19,15 +19,33 @@ import requests import json import threading +class FailedPR: + def __init__(self, url, status): + self.url = url + self.status = status + self.target_url = target_url + self.created_at = created_at + self.updated_at = updated_at + + def to_json(self): + return json.dumps(self.__dict__) def get_args(): parser = argparse.ArgumentParser( description='Bootstrap repositories.') parser.add_argument( - '--orgs', + '--gh-orgs', + nargs='+', + default=['opentelekomcloud-docs'], + help='One or more GitHub organizations to be queried for failed Pull ' + 'Requests.\n' + 'Default: [opentelekomcloud-docs]' + ) + parser.add_argument( + '--gitea-orgs', nargs='+', default=['docs'], - help='One or more organizations to be queried for failed Pull ' + help='One or more Gitea organizations to be queried for failed Pull ' 'Requests.\n' 'Default: [docs]' ) @@ -45,15 +63,16 @@ def get_args(): help='Set debug mode on.' ) parser.add_argument( - '--url', + '--gitea-url', default='https://gitea.eco.tsi-dev.otc-service.com/api/v1/', - help='Base URL for API request.' + help='Base URL for API request.\n' + 'Default: https://gitea.eco.tsi-dev.otc-service.com/api/v1/' ) parser.add_argument( '--hoster', default=['gitea', 'github'], nargs='+', - help='Git hoster to be queried for failed Pull Requests.\n + help='Git hoster to be queried for failed Pull Requests.\n' 'Default: [github, gitea].' ) return(parser.parse_args()) @@ -99,7 +118,6 @@ def get_failed_gitea_commits(repositories, headers, args): res_sta = requests.request('GET', url=url, headers=headers) if res_sta.json(): if res_sta.json()[0]['status'] == 'failure': - # print("Pull Request " + pull['url'] + " has a failed check!") failed_commits.append({ 'url': pull['url'], 'status': res_sta.json()[0]['status'], @@ -123,13 +141,13 @@ def get_failed_gitea_commits(repositories, headers, args): break return(failed_commits) -def get_github_repos(url, headers, org): +def get_github_repos(url, headers, gh_org): repositories = [] i = 1 while True: try: - req_url = url + 'orgs/' + org + '/repos?page=' + str(i) + req_url = url + 'orgs/' + gh_org + '/repos?page=' + str(i) res = requests.request('GET', url=req_url, headers=headers) if res.json(): for repo in res.json(): @@ -144,13 +162,13 @@ def get_github_repos(url, headers, org): break return(repositories) -def get_github_prs(url, headers, org, repo): +def get_github_prs(url, headers, gh_org, repo): pullrequests = [] i = 1 while True: try: - req_url = url + 'repos/' + org + '/' + repo + '/pulls?state=open&page=' + str(i) + req_url = url + 'repos/' + gh_org + '/' + repo + '/pulls?state=open&page=' + str(i) res = requests.request('GET', url=req_url, headers=headers) if res.json(): for pr in res.json(): @@ -165,37 +183,37 @@ def get_github_prs(url, headers, org, repo): break return(pullrequests) -def get_failed_gh_commits(pull, url, org, repo, headers): +def get_failed_gh_commits(pull, url, gh_org, repo, headers): failed_commits = [] try: - req_url = url + 'repos/' + org + '/' + repo['name'] + '/commits/' + pull['head']['sha'] + '/check-runs' + req_url = url + 'repos/' + gh_org + '/' + repo['name'] + '/commits/' + pull['head']['sha'] + '/check-runs' res_sta = requests.request('GET', url=req_url, headers=headers) if res_sta.json(): if len(res_sta.json()['check_runs']) != 0: if res_sta.json()['check_runs'][0]['conclusion'] == 'failure': - failed_commits.append({ - 'url': pull['html_url'], - 'status': res_sta.json()['check_runs'][0]['conclusion'], - 'target_url': res_sta.json()['check_runs'][0]['details_url'], - 'created_at': pull['created_at'], - 'updated_at': res_sta.json()['check_runs'][0]['completed_at'] - }) - continue + o = FailedPR( + url=pull['html_url'], + status=res_sta.json()['check_runs'][0]['conclusion'], + target_url=res_sta.json()['check_runs'][0]['details_url'], + created_at=pull['created_at'], + updated_at=res_sta.json()['check_runs'][0]['completed_at'] + ) + failed_commits.append(o) else: - failed_commits.append({ - 'url': pull['html_url'], - 'status': 'undefined', - 'target_url': 'undefined', - 'created_at': pull['created_at'], - 'updated_at': pull['updated_at'] - }) + o = FailedPR( + url=pull['html_url'], + status='', + target_url='', + created_at=pull['created_at'], + updated_at=res_sta.json()['check_runs'][0]['completed_at'] + ) + failed_commits.append(o) except Exception as e: print("An error has occured: " + str(e)) print("The request status is: " + str(res_sta.status_code) + " | " + str(res_sta.reason)) print(json.dumps(res_sta.json())) exit() - break return(failed_commits) @@ -217,7 +235,7 @@ def main(): raise Exception('Please, provide Gitea Token as argument.') headers['Authorization'] = 'token ' + args.gitea_token - repositories = get_repos(url=args.url, path=repo_path, headers=headers) + repositories = get_repos(url=args.gitea_url, path=repo_path, headers=headers) commits = get_failed_gitea_commits(repositories=repositories, headers=headers, args=args) failed_commits.extend(commits) @@ -229,16 +247,16 @@ def main(): raise Exception('Please, provide GitHub Token as argument.') headers['Authorization'] = 'Bearer ' + args.gh_token - for org in args.orgs: - repos = get_github_repos(url, headers, org) + for org in args.gh_orgs: + repos = get_github_repos(url=url, headers=headers, gh_org=org) for repo in repos: - pulls = get_github_prs(url, headers, org, repo['name']) + pulls = get_github_prs(url=url, headers=headers, gh_org=org, repo=repo['name']) if pulls: for pull in pulls: commits = get_failed_gh_commits( pull=pull, url=url, - org=org, + gh_org=org, repo=repo, headers=headers) failed_commits.extend(commits)