Changeset View
Changeset View
Standalone View
Standalone View
contrib/buildbot/cirrus.py
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
# | # | ||||
# Copyright (c) 2021 The Bitcoin ABC developers | # Copyright (c) 2021 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 json | import json | ||||
import requests | import requests | ||||
from build import BuildStatus | from build import BuildStatus | ||||
BITCOIN_ABC_SECP256K1_REPO_ID = "6034374039699456" | BITCOIN_ABC_SECP256K1_REPO_ID = "6034374039699456" | ||||
class Cirrus(): | class Cirrus: | ||||
def __init__(self, base_url="https://api.cirrus-ci.com/graphql"): | def __init__(self, base_url="https://api.cirrus-ci.com/graphql"): | ||||
self.base_url = base_url | self.base_url = base_url | ||||
self.logger = None | self.logger = None | ||||
def set_logger(self, logger): | def set_logger(self, logger): | ||||
self.logger = logger | self.logger = logger | ||||
def get_default_branch_status(self, repo_id=BITCOIN_ABC_SECP256K1_REPO_ID): | def get_default_branch_status(self, repo_id=BITCOIN_ABC_SECP256K1_REPO_ID): | ||||
query = f""" | query = f""" | ||||
query {{ | query {{ | ||||
repository(id: "{repo_id}") {{ | repository(id: "{repo_id}") {{ | ||||
lastDefaultBranchBuild {{ | lastDefaultBranchBuild {{ | ||||
status | status | ||||
}} | }} | ||||
}} | }} | ||||
}} | }} | ||||
""" | """ | ||||
response = requests.post(self.base_url, json={'query': query}) | response = requests.post(self.base_url, json={"query": query}) | ||||
if response.status_code != requests.codes.ok: | if response.status_code != requests.codes.ok: | ||||
raise AssertionError( | raise AssertionError( | ||||
"Cirrus get_default_branch_status() failed for repository {}\nResponse:\n{}".format( | "Cirrus get_default_branch_status() failed for repository" | ||||
" {}\nResponse:\n{}".format( | |||||
repo_id, | repo_id, | ||||
vars(response), | vars(response), | ||||
) | ) | ||||
) | ) | ||||
json_data = json.loads(response.content) | json_data = json.loads(response.content) | ||||
failure_status = ['FAILED', 'ABORTED', 'ERRORED'] | failure_status = ["FAILED", "ABORTED", "ERRORED"] | ||||
success_status = ['COMPLETED'] | success_status = ["COMPLETED"] | ||||
running_status = ['EXECUTING'] | running_status = ["EXECUTING"] | ||||
queued_status = ['CREATED', 'TRIGGERED'] | queued_status = ["CREATED", "TRIGGERED"] | ||||
try: | try: | ||||
status = json_data['data']['repository']['lastDefaultBranchBuild']['status'] or 'UNKNOWN' | status = ( | ||||
json_data["data"]["repository"]["lastDefaultBranchBuild"]["status"] | |||||
or "UNKNOWN" | |||||
) | |||||
except KeyError: | except KeyError: | ||||
status = 'UNKNOWN' | status = "UNKNOWN" | ||||
return (BuildStatus.Success if status in success_status else | return ( | ||||
BuildStatus.Failure if status in failure_status else | BuildStatus.Success | ||||
BuildStatus.Running if status in running_status else | if status in success_status | ||||
BuildStatus.Queued if status in queued_status else | else ( | ||||
BuildStatus.Unknown) | BuildStatus.Failure | ||||
if status in failure_status | |||||
else ( | |||||
BuildStatus.Running | |||||
if status in running_status | |||||
else ( | |||||
BuildStatus.Queued | |||||
if status in queued_status | |||||
else BuildStatus.Unknown | |||||
) | |||||
) | |||||
) | |||||
) |