diff --git a/bob/devtools/log.py b/bob/devtools/log.py index 50842dc7cf282d672df9e4cc06e146f336af2f8e..8ccad76117833b12e0e5f9f98a6157b67d2076dc 100644 --- a/bob/devtools/log.py +++ b/bob/devtools/log.py @@ -104,6 +104,12 @@ def _echo(text, *args, **kwargs): def echo_normal(text): """Color preset for normal text output for :py:func:`click.echo`""" + click.echo(text) + + +def echo_info(text): + """Color preset for normal text output for :py:func:`click.echo`""" + _echo(text, 'green') diff --git a/bob/devtools/scripts/jobs.py b/bob/devtools/scripts/jobs.py index 4228520cd751e3fe8c3dc07beb4444719f950665..df0d8b5c6d950dc036e20f31d4faa69e7757bcfd 100644 --- a/bob/devtools/scripts/jobs.py +++ b/bob/devtools/scripts/jobs.py @@ -7,19 +7,24 @@ import click from . import bdt from ..release import get_gitlab_instance -from ..log import verbosity_option, get_logger, echo_normal +from ..log import verbosity_option, get_logger, echo_normal, echo_info logger = get_logger(__name__) @click.command(epilog=''' Examples: - 1. List running jobs on a runner defined by its description (macmini): + 1. List running jobs on any of our runners + + $ bdt gitlab jobs -vv + + + 2. List running jobs on a runner defined by its description: $ bdt gitlab jobs -vv macmini ''') -@click.argument('name') +@click.argument('name', nargs=-1) @click.option('-s', '--status', type=click.Choice(['running', 'success', 'failed', 'canceled']), default='running', show_default=True, @@ -28,26 +33,37 @@ Examples: @verbosity_option() @bdt.raise_on_error def jobs(name, status): - """Lists jobs on a given runner + """Lists jobs on a given runner identified by description """ gl = get_gitlab_instance() gl.auth() user_id = gl.user.attributes['id'] - # search for the runner to affect - the_runner = [k for k in gl.runners.list(all=True) if \ - k.attributes['description'] == name] - if not the_runner: - raise RuntimeError('Cannot find runner with description = %s', name) - the_runner = the_runner[0] - logger.info('Found runner %s (id=%d)', - the_runner.attributes['description'], the_runner.attributes['id']) - - jobs = the_runner.jobs.list(all=True, status=status) - logger.info('There are %d jobs running on %s', len(jobs), name) - for k in jobs: - echo_normal('** job %d: %s (%s), since %s, by %s [%s]' % \ - (k.id, k.attributes['project']['path_with_namespace'], - k.attributes['name'], k.attributes['started_at'], - k.attributes['user']['username'], k.attributes['web_url'])) + names = name or [ + 'linux-desktop-shell', + 'linux-desktop-docker', + 'linux-server-shell', + 'linux-server-docker', + 'macpro', + 'macmini', + ] + + # search for the runner(s) to affect + runners = [k for k in gl.runners.list(all=True) if \ + k.attributes['description'] in names] + + if not runners: + raise RuntimeError('Cannot find runner with description = %s' % \ + '|'.join(names)) + + for runner in runners: + jobs = runner.jobs.list(all=True, status=status) + echo_normal('Runner %s (id=%d) -- %d running' % \ + (runner.attributes['description'], runner.attributes['id'], + len(jobs))) + for k in jobs: + echo_info('** job %d: %s (%s), since %s, by %s [%s]' % \ + (k.id, k.attributes['project']['path_with_namespace'], + k.attributes['name'], k.attributes['started_at'], + k.attributes['user']['username'], k.attributes['web_url']))