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