Browse Source

Add static check for overzealous .gitignores.

(cherry picked from commit 7ea171adca8d28d10aae68cfe8f36094683bc491)
Ben Rog-Wilhelm 2 years ago
parent
commit
b19469a08e
2 changed files with 31 additions and 0 deletions
  1. 5 0
      .github/workflows/static_checks.yml
  2. 26 0
      misc/scripts/gitignore_check.sh

+ 5 - 0
.github/workflows/static_checks.yml

@@ -30,6 +30,11 @@ jobs:
           sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-15 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

+ 26 - 0
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