def main()

in bot/tools/restart_tasks.py [0:0]


def main():
    # CLI args
    parser = argparse.ArgumentParser()
    parser.add_argument("--nb-tasks", type=int, default=5, help="NB of tasks to create")
    parser.add_argument(
        "--group", type=str, default=slugId(), help="Task group to create/update"
    )
    parser.add_argument(
        "--dry-run",
        action="store_true",
        default=False,
        help="List actions without triggering any new task",
    )
    parser.add_argument("tasks", nargs="+", help="Existing tasks to retrigger")
    args = parser.parse_args()

    # List existing tags & commits
    print("Group", args.group)
    try:
        group = queue.listTaskGroup(args.group)
        commits = set(
            [
                (
                    task["task"]["payload"]["env"]["REPOSITORY"],
                    task["task"]["payload"]["env"]["REVISION"],
                )
                for task in group["tasks"]
                if task["status"]["state"] not in ("failed", "exception")
            ]
        )
        print(
            "Found {} commits processed in task group {}".format(
                len(commits), args.group
            )
        )
    except Exception as e:
        print("Invalid task group : {}".format(e))
        commits = set()

    # Trigger a task for each commit
    triggered = 0
    for repository, commit in list_commits(args.tasks):
        if (repository, commit) in commits:
            print("Skipping existing commit {} {}".format(repository, commit))
            continue

        print("Triggering {} : {}".format(repository, commit))
        if args.dry_run:
            print(">>> No trigger on dry run")
        else:
            out = trigger_task(args.group, repository, commit)
            print(">>>", out["status"]["taskId"])
            triggered += 1

        commits.add((repository, commit))
        if triggered >= args.nb_tasks:
            print("Max nb tasks reached !")
            break