#!/usr/bin/python3 # Request re-runs of autopkgtests for packages import os import sys import argparse import json import kombu my_dir = os.path.dirname(os.path.realpath(sys.argv[0])) def parse_args(): '''Parse command line arguments''' parser = argparse.ArgumentParser() parser.add_argument('-c', '--config', default=os.path.join(my_dir, 'britney.conf'), help='britney config file (default: %(default)s)') parser.add_argument('-s', '--series', required=True, help='Distro series name (required).') parser.add_argument('-a', '--architecture', action='append', default=[], help='Only run test(s) on given architecture name(s). ' 'Can be specified multiple times (default: all).') parser.add_argument('--trigger', action='append', default=[], metavar='SOURCE/VERSION', help='Add triggering package to request. ' 'Can be specified multiple times.') parser.add_argument('--ppa', metavar='LPUSER/PPANAME', action='append', default=[], help='Enable PPA for requested test(s). ' 'Can be specified multiple times.') parser.add_argument('package', nargs='+', help='Source package name(s) whose tests to run.') args = parser.parse_args() if not args.trigger and not args.ppa: parser.error('One of --trigger or --ppa must be given') # verify syntax of triggers for t in args.trigger: try: (src, ver) = t.split('/') except ValueError: parser.error('Invalid trigger format "%s", must be "sourcepkg/version"' % t) # verify syntax of PPAs for t in args.ppa: try: (user, name) = t.split('/') except ValueError: parser.error('Invalid ppa format "%s", must be "lpuser/ppaname"' % t) return args def parse_config(config_file): '''Parse config file (like britney.py)''' config = argparse.Namespace() with open(config_file) as f: for k, v in [r.split('=', 1) for r in f if '=' in r and not r.strip().startswith('#')]: k = k.strip() if not getattr(config, k.lower(), None): setattr(config, k.lower(), v.strip()) return config if __name__ == '__main__': args = parse_args() config = parse_config(args.config) if not args.architecture: args.architecture = config.adt_arches.split() params = {} if args.trigger: params['triggers'] = args.trigger if args.ppa: params['ppas'] = args.ppa params = '\n' + json.dumps(params) with kombu.Connection(config.adt_amqp) as conn: for arch in args.architecture: # don't use SimpleQueue here as it always declares queues; # ACLs might not allow that with kombu.Producer(conn, routing_key='debci-%s-%s' % (args.series, arch), auto_declare=False) as p: for pkg in args.package: p.publish(pkg + params)