def run()

in tools/cloud-build/babysit/runner.py [0:0]


def run(args: RunnerArgs, ui: UIProto) -> None:
    assert args.names or args.tags or args.auto or args.all, "At least one test selector is required"
    pr = get_pr(args.pr)
    print(f"Using PR#{args.pr}: {pr['title']}") # TODO: use UI to log
    sha = pr["head"]["sha"]
    
    selectors = []
    selectors += [selector_by_tag(t) for t in args.tags or []]
    selectors += [selector_by_name(n) for n in args.names or []]
    if args.all:
        selectors.append(lambda _: True)
    if args.auto:
        auto_tags = get_changed_files_tags(get_pr_files(args.pr))
        selectors += [selector_by_tag(t) for t in auto_tags]
    if not selectors:
        print("No test selectors found, nothing to do.") # TODO: use UI to log
        return

    cb = cloudbuild_v1.services.cloud_build.CloudBuildClient()
    try:
        Babysitter(ui, cb, args.project, sha, selectors, args.concurrency, args.retries).do()
    except KeyboardInterrupt:
        print("User interrupted") # TODO: use UI to log