def main()

in scripts/test-examples.py [0:0]


def main(argv):
    script_name = os.path.basename(__file__)

    help_message = f"""
        {BColors.HEADER}Options{BColors.ENDC}:
            -c | codegen=   : Version we need to apply, if left empty it will calculate the version based on Gradle's Project task.
            -p | path=      : Path where the examples should be found. Defaults to [{examples_path}].
            -k              : By default the directory defined in the path will be removed on success. If this flag is set the directory will be kept.
            -v              : Verbose

        {BColors.HEADER}Example{BColors.ENDC}: {script_name} -c <codegen version>
        """

    projects_dir = examples_path
    codegen_version = ""
    keep_project_dir = False
    try:
        opts, args = getopt.getopt(argv, "hvkc:p:", ["codegen=", "path="])
    except getopt.GetoptError:
        Out.usage(script_name, help_message)
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            Out.usage(script_name, help_message)
            sys.exit()
        elif opt in ("-c", "--codegen"):
            codegen_version = arg
        elif opt in ("-p", "--path"):
            projects_dir = os.path.abspath(arg)
        elif opt in ("-k"):
            keep_project_dir = True
        elif opt in ("-v"):
            State.verbose = True

    if not codegen_version:
        Out.info("Codgen version not supplied, inferring...")
        codegen_version = infer_version()
        if codegen_version:
            Out.info(f"Codegen Version resolved to {BColors.OKGREEN}{codegen_version}{BColors.ENDC}")
        else:
            Out.error("Unable to resolved a Codegen Version!")
            exit(2)

    projects = next(os.walk(projects_dir))[1]
    if not projects:
        Out.error(f"No projects available at [{projects_dir}]!")
        exit(2)

    for project in projects:
        project_root = f"{projects_dir}/{project}"
        Out.info(f"Processing project [{project_root}]...")
        infer_build_file(project_root)
        gradle_settings_file_path = f"{project_root}/settings.gradle.kts"
        generate_gradle_settings(settings_gradle_kts_template, codegen_version, gradle_settings_file_path)
        run_example_build(gradle_settings_file_path, project_root)

    if not keep_project_dir:
        Out.info(f"Removing {projects_dir}...")
        try:
            shutil.rmtree(projects_dir)
        except Exception as error:
            Out.error(f"Failed deleting {projects_dir}.", error)
    Out.ok(f"Build successful.")