mbs-build: display status of rpm builds within module

Signed-off-by: Tomas Tomecek <ttomecek@redhat.com>
This commit is contained in:
Tomas Tomecek
2017-05-11 10:24:47 +02:00
parent 6b690aa8fc
commit 2cd561afc0

View File

@@ -30,15 +30,43 @@ BUILD_STATES = {
INVERSE_BUILD_STATES = {v: k for k, v in BUILD_STATES.items()}
def fetch_module_info(server, build_id):
if not server:
server = DEFAULT_MBS_SERVER
idx = int(build_id)
response = requests.get(server + '/module-build-service/1/module-builds/%i?verbose=true' % idx)
return response.json()
def show_module_info(server, build_id):
state_names = dict([(v, k) for k, v in koji.BUILD_STATES.items()])
state_names[None] = "undefined"
data = fetch_module_info(server, build_id)
table = []
for package_name, task_data in data["tasks"]["rpms"].items():
try:
koji_task_url = "https://koji.fedoraproject.org/koji/taskinfo?taskID=%s" % task_data['task_id']
except KeyError:
koji_task_url = ""
table += [[
task_data.get("nvr", "null"),
state_names[task_data.get("state", None)],
koji_task_url
]]
headers = ["NVR", "State", "Koji Task"]
print(tabulate(table, headers=headers))
def watch_build(server, build_id):
"""
Watches the MBS build in a loop, updates every 30 seconds.
Returns when build state is 'failed' or 'done' or 'ready' or when
user hits ctrl+c.
"""
if not server:
server = DEFAULT_MBS_SERVER
done = False
while not done:
# Clear the screen
@@ -47,10 +75,7 @@ def watch_build(server, build_id):
state_names = dict([(v, k) for k, v in koji.BUILD_STATES.items()])
state_names[None] = "undefined"
idx = int(build_id)
response = requests.get(server + '/module-build-service/1/module-builds/%i?verbose=true' % idx)
data = response.json()
data = fetch_module_info(server, build_id)
tasks = data['tasks']['rpms']
states = list(set([task['state'] for task in tasks.values()]))
@@ -357,6 +382,11 @@ def main():
"the 'submit' subcommand.")
parser_watch.add_argument("build_id")
parser_info = subparsers.add_parser(
'info', help="display detailed information about selected module build",
description="Display detailed information about selected module build.")
parser_info.add_argument("build_id")
parser_cancel = subparsers.add_parser(
'cancel', help="cancel module build",
description="Cancels the build submitted by 'submit' subcommand.")
@@ -413,6 +443,8 @@ def main():
cancel_module_build(args.server, args.idprovider, args.build_id)
elif args.cmd_name == "overview":
show_overview(args.server, finished=args.finished)
elif args.cmd_name == "info":
show_module_info(args.server, args.build_id)
if __name__ == "__main__":
main()