def main()

in buildifier/buildifier.py [0:0]


def main(argv=None):
    if argv is None:
        argv = sys.argv[1:]

    buildifier_binary = "buildifier"
    display_url = BUILDIFIER_DEFAULT_DISPLAY_URL
    version = os.environ.get(VERSION_ENV_VAR, "latest")
    eprint("+++ :github: Downloading Buildifier version '{}'".format(version))
    try:
        version, display_url, download_url = get_buildifier_info(version)
        eprint("Downloading Buildifier {} from {}".format(version, download_url))
        buildifier_binary = download_buildifier(download_url)
    except Exception as ex:
        print_error("downloading Buildifier", str(ex))
        return 1

    flags = ["--mode=check", "--lint=warn"]
    warnings = os.getenv(WARNINGS_ENV_VAR)
    if warnings:
        eprint("Running Buildifier with the following warnings: {}".format(warnings))
        flags.append("--warnings={}".format(warnings))

    result = run_buildifier(
        buildifier_binary,
        flags + ["--format=json", "-r", "."],
        version=version,
        what="Format & lint checks",
    )

    if result.returncode and result.returncode != BUILDIFIER_FORMAT_ERROR_CODE:
        print_error("Buildifier failed", result.stderr)
        return result.returncode

    data = json.loads(result.stdout)
    if data["success"]:
        # If buildifier was happy, there's nothing left to do for us.
        eprint("+++ :tada: Buildifier found nothing to complain about")
        return 0

    unformatted_files = []
    lint_findings = []
    for file in data["files"]:
        filename = file["filename"]

        if not file["formatted"]:
            unformatted_files.append(filename)

        for warning in file["warnings"]:
            lint_findings.append(format_lint_warning(filename, warning))

    output = ""
    if unformatted_files:
        eprint(
            "+++ :construction: Found {} file(s) that must be formatted".format(
                len(unformatted_files)
            )
        )
        output = create_heading("format", len(unformatted_files))
        display_version = " {}".format(version) if version else ""
        output += (
            'If this repo uses a pre-commit hook, then you should install it. '
            'Otherwise, please download <a href="{}">buildifier{}</a> and run the following '
            "command in your workspace:<br/><pre><code>buildifier {}</code></pre>"
            "\n".format(display_url, display_version, " ".join(unformatted_files))
        )

    if lint_findings:
        eprint("+++ :gear: Rendering lint warnings")
        output += create_heading("lint", len(lint_findings))
        output += "<pre><code>"
        output += "\n".join(lint_findings)
        output = output.strip() + "</pre></code>"

    upload_output(output)

    # Preserve buildifier's exit code.
    return BUILDIFIER_FORMAT_ERROR_CODE