From 51ecd46a06073785018749d2afadd0986bfeb676 Mon Sep 17 00:00:00 2001 From: Ben Rog-Wilhelm Date: Sat, 1 Jul 2023 08:32:30 -0500 Subject: [PATCH] Add static check for overzealous .gitignores. (cherry picked from commit 7ea171adca8d28d10aae68cfe8f36094683bc491) --- .github/disabled_workflows/static_checks.yml | 5 ++++ misc/scripts/gitignore_check.sh | 26 ++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100755 misc/scripts/gitignore_check.sh diff --git a/.github/disabled_workflows/static_checks.yml b/.github/disabled_workflows/static_checks.yml index f9650964e..599cb4741 100644 --- a/.github/disabled_workflows/static_checks.yml +++ b/.github/disabled_workflows/static_checks.yml @@ -29,6 +29,11 @@ jobs: sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-13 100 sudo pip3 install black==22.3.0 pygments + # This needs to happen before Python and npm execution; it must happen before any extra files are written. + - name: .gitignore checks (gitignore_check.sh) + run: | + bash ./misc/scripts/gitignore_check.sh + - name: File formatting checks (file_format.sh) run: | bash ./misc/scripts/file_format.sh diff --git a/misc/scripts/gitignore_check.sh b/misc/scripts/gitignore_check.sh new file mode 100755 index 000000000..747dfae6f --- /dev/null +++ b/misc/scripts/gitignore_check.sh @@ -0,0 +1,26 @@ +set -uo pipefail +shopt -s globstar + +echo -e ".gitignore validation..." + +# Get a list of files that exist in the repo but are ignored. + +# The --verbose flag also includes files un-ignored via ! prefixes. +# We filter those out with a somewhat awkward `awk` directive. + # (Explanation: Split each line by : delimiters, + # see if the actual gitignore line shown in the third field starts with !, + # if it doesn't, print it.) + +# ignorecase for the sake of Windows users. + +output=$(git -c core.ignorecase=true check-ignore --verbose --no-index **/* | \ + awk -F ':' '{ if ($3 !~ /^!/) print $0 }') + +# Then we take this result and return success if it's empty. +if [ -z "$output" ]; then + exit 0 +else + # And print the result if it isn't. + echo "$output" + exit 1 +fi \ No newline at end of file