| #!/bin/bash |
| |
| # Perform runfile initialization here so that child processes have a proper |
| # RUNFILES_DIR variable set. |
| |
| # --- begin runfiles.bash initialization v2 --- |
| # Copy-pasted from the Bazel Bash runfiles library v2. |
| set -uo pipefail; f=bazel_tools/tools/bash/runfiles/runfiles.bash |
| source "${RUNFILES_DIR:-/dev/null}/$f" 2>/dev/null || \ |
| source "$(grep -sm1 "^$f " "${RUNFILES_MANIFEST_FILE:-/dev/null}" | cut -f2- -d' ')" 2>/dev/null || \ |
| source "$0.runfiles/$f" 2>/dev/null || \ |
| source "$(grep -sm1 "^$f " "$0.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ |
| source "$(grep -sm1 "^$f " "$0.exe.runfiles_manifest" | cut -f2- -d' ')" 2>/dev/null || \ |
| { echo>&2 "ERROR: cannot find $f"; exit 1; }; f=; set -e |
| # --- end runfiles.bash initialization v2 --- |
| |
| set -o nounset |
| |
| # Redirect the Go cache on buildkite. Otherwise we run into errors like: |
| # "failed to initialize build cache at /var/lib/buildkite-agent/.cache/go-build" |
| # due to permission errors. |
| if ((RUNNING_IN_CI == 1)); then |
| export GOCACHE=/tmp/lint_go_cache |
| fi |
| |
| clang_format() { |
| ./tools/lint/clang_format |
| } |
| |
| gofmt() { |
| ./tools/lint/gofmt |
| } |
| |
| gomod() { |
| local -r go="$(readlink -f external/go_sdk/bin/go)" |
| cd "${BUILD_WORKSPACE_DIRECTORY}" |
| "${go}" mod tidy -e |
| } |
| |
| update_go_repos() { |
| # Clear out the go_deps.bzl file so that gazelle won't hesitate to update |
| # it. Without this step gazelle would never try to remove a dependency. |
| cat > "${BUILD_WORKSPACE_DIRECTORY}"/go_deps.bzl <<EOF |
| def go_dependencies(): |
| pass |
| EOF |
| ./gazelle-runner.bash update-repos \ |
| -from_file=go.mod \ |
| -to_macro=go_deps.bzl%go_dependencies \ |
| -prune |
| } |
| |
| gazelle() { |
| ./gazelle-runner.bash |
| } |
| |
| tweak_gazelle_go_deps() { |
| local -r tweaker="$(readlink -f tools/go/tweak_gazelle_go_deps)" |
| cd "${BUILD_WORKSPACE_DIRECTORY}" |
| "${tweaker}" ./go_deps.bzl |
| } |
| |
| clean_up_go_mirrors() { |
| ./tools/go/mirror_go_repos --prune |
| } |
| |
| rustfmt() { |
| ./tools/lint/rustfmt |
| } |
| |
| buildifier() { |
| ./tools/lint/buildifier |
| } |
| |
| prettier() { |
| ./tools/lint/prettier |
| } |
| |
| yapf() { |
| ./tools/lint/yapf |
| } |
| |
| git_status_is_clean() { |
| cd "${BUILD_WORKSPACE_DIRECTORY}" |
| if ! git diff --quiet; then |
| echo "One or more linters appear to have made changes to your code!" >&2 |
| return 1 |
| fi |
| } |
| |
| # All the linters that we are going to run. |
| readonly -a LINTERS=( |
| clang_format |
| gofmt |
| gomod |
| update_go_repos |
| gazelle |
| tweak_gazelle_go_deps |
| clean_up_go_mirrors |
| rustfmt |
| buildifier |
| prettier |
| yapf |
| git_status_is_clean # This must the last linter. |
| ) |
| |
| failure=0 |
| for linter in "${LINTERS[@]}"; do |
| echo "Running ${linter}..." >&2 |
| if ! (eval "${linter}"); then |
| echo "LINTER FAILURE: ${linter}" >&2 |
| failure=1 |
| else |
| echo "${linter} succeeded" >&2 |
| fi |
| done |
| |
| if ((failure != 0)); then |
| echo "One or more linters failed." >&2 |
| cd "${BUILD_WORKSPACE_DIRECTORY}" |
| git --no-pager diff || : |
| exit "${failure}" |
| fi |
| |
| exit 0 |