Add yapf formatting check to CI
Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: Iba338003cee4bbab3a059c968f703930286af48d
diff --git a/WORKSPACE b/WORKSPACE
index 6afd00c..185018c 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -1028,6 +1028,14 @@
url = "https://www.frc971.org/Build-Dependencies/MarkupSafe-1.1.1.tar.gz",
)
+http_archive(
+ name = "python_yapf",
+ build_file = "@//debian:python_yapf.BUILD",
+ sha256 = "410ed0f592c898d75d73f7792aee6569bdbc0b57bc72b417c722c17f41f66b12",
+ strip_prefix = "yapf-0.32.0",
+ url = "https://github.com/google/yapf/archive/refs/tags/v0.32.0.tar.gz",
+)
+
# //debian:lzma_amd64
http_archive(
name = "lzma_amd64",
diff --git a/debian/python_yapf.BUILD b/debian/python_yapf.BUILD
new file mode 100644
index 0000000..c41558c
--- /dev/null
+++ b/debian/python_yapf.BUILD
@@ -0,0 +1,6 @@
+py_binary(
+ name = "python_yapf",
+ srcs = glob(["yapf/**/*.py"]),
+ main = "yapf/__main__.py",
+ visibility = ["//visibility:public"],
+)
diff --git a/tools/lint/BUILD b/tools/lint/BUILD
index 57d4e08..55cccff 100644
--- a/tools/lint/BUILD
+++ b/tools/lint/BUILD
@@ -35,6 +35,17 @@
)
sh_binary(
+ name = "yapf",
+ srcs = ["yapf.sh"],
+ data = [
+ "@python_yapf",
+ ],
+ deps = [
+ "@bazel_tools//tools/bash/runfiles",
+ ],
+)
+
+sh_binary(
name = "prettier",
srcs = ["prettier.sh"],
data = [
@@ -56,6 +67,7 @@
":gofmt",
":prettier",
":rustfmt",
+ ":yapf",
"//:gazelle-runner",
"//tools/go:mirror_go_repos",
"//tools/go:tweak_gazelle_go_deps",
diff --git a/tools/lint/run-ci.sh b/tools/lint/run-ci.sh
index a036c06..5e48da6 100755
--- a/tools/lint/run-ci.sh
+++ b/tools/lint/run-ci.sh
@@ -89,6 +89,10 @@
./tools/lint/prettier
}
+yapf() {
+ ./tools/lint/yapf
+}
+
git_status_is_clean() {
cd "${BUILD_WORKSPACE_DIRECTORY}"
if ! git diff --quiet; then
@@ -110,6 +114,7 @@
tweak_cargo_raze
buildifier
prettier
+ yapf
git_status_is_clean # This must the last linter.
)
diff --git a/tools/lint/yapf.sh b/tools/lint/yapf.sh
new file mode 100755
index 0000000..404d5fd
--- /dev/null
+++ b/tools/lint/yapf.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# --- 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 ---
+
+readonly YAPF="$(rlocation python_yapf/python_yapf)"
+
+# Run everything from the root of the tree.
+cd "${BUILD_WORKSPACE_DIRECTORY}"
+
+# Find all the Python files in the repo.
+python_files=($(git ls-tree --name-only --full-tree -r @ \
+ | grep -v '^third_party/' \
+ | (grep '\.py$' || :)))
+
+# If we have any Python files, format them.
+if ((${#python_files[@]} > 0)); then
+ exec "${YAPF}" --in-place --parallel --verbose "${python_files[@]}"
+fi