From 684465a397232ddbf3cd68b2096648ab0cc20e16 Mon Sep 17 00:00:00 2001
From: Margen67 <Margen67@users.noreply.github.com>
Date: Tue, 10 Dec 2024 18:10:00 -0800
Subject: [PATCH] Check if patches are in the right place

---
 .github/workflows/ci.yml | 49 +++++++++++++++++++++++-----------------
 1 file changed, 28 insertions(+), 21 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2d852b4e..75bb8a58 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,6 +22,13 @@ jobs:
       - name: Lint
         id: lint
         run: |
+          misplaced_patches=($(find -name "*.patch.toml" not -path "./patches/*"))
+          if [ -n "$misplaced_patches" ]; then
+            for $misplaced_patch in ${misplaced_patches[@]}; do
+              echo "::error Patch should be in /patches. file=$misplaced_patch"
+            done
+            patch_errored_fatal=1
+          fi
           npx eslint patches/*.patch.toml || patch_errored_fatal=1
           patch_check() {
             local grep_result=$(pcregrep -Mno "$1" <<<"$2")
@@ -48,27 +55,27 @@ jobs:
           }
           for patch in patches/*.patch.toml; do
             patch_content="$(cat "$patch")"
-            patch_check 'patches\/[0-9A-F]{8} - .+\.patch\.toml'                                                                     "$patch"         nomatch "Filename is invalid!"
-            patch_check 'title_name = ".+"'                                                                                          "$patch_content" nomatch "title_name is invalid or missing!"
-            patch_check 'title_id = "[0-9A-F]{8}" # [A-Z]{2}-[0-9]{4,5}'                                                             "$patch_content" nomatch "title_id is invalid or missing!"
-            patch_check 'hash = ("[0-9A-F]{16}"|\[.*\n {4}"[0-9A-F]{16}",?) # .+|#hash = (""|\[(\n# {4}"".*)+\n#])'                  "$patch_content" nomatch "hash is invalid or missing!"
-            patch_check '#hash = (""|\[\n# {4}"").*'                                                                                 "$patch_content" match   "hash is empty."
-            patch_check '#media_id = ("[0-9A-F]{8}".*|\[( # .+)?\n# {4}"[0-9A-F]{8}".*(\n# {4}"[0-9A-F]{8}".*)*\n#])|#media_id = ""' "$patch_content" nomatch "media_id is invalid or missing!"
-            patch_check '#media_id = ""'                                                                                             "$patch_content" match   "media_id is empty."
-            patch_check '\[\[patch]]'                                                                                                "$patch_content" nomatch "[[patch]] is missing!"
-            patch_check ' {4}name = ".+"'                                                                                            "$patch_content" nomatch "name is invalid or missing!"
-            patch_check ' {4}desc = ""'                                                                                              "$patch_content" match   "Unneeded empty description!"
-            patch_check ' {4}author = ".+"'                                                                                          "$patch_content" nomatch "author is invalid or missing!"
-            patch_check ' {4}is_enabled = '                                                                                          "$patch_content" nomatch "is_enabled is missing!"
-            patch_check ' {4}is_enabled = true'                                                                                      "$patch_content" match   "Patch is enabled!"
-            patch_check ' {8}address = 0x[0-9a-f]{8}'                                                                                "$patch_content" nomatch "address is invalid or missing!"
-            patch_check ' {8}value = '                                                                                               "$patch_content" nomatch "value is invalid or missing!"
-            patch_check ' {8}address = 0x[0-9a-f]{1,15}[A-F]+'                                                                       "$patch_content" match   "Hex can't be uppercase!"
-            patch_check ' {8}value = 0x"?[0-9a-f]{1,15}[A-F]+'                                                                       "$patch_content" match   "Hex can't be uppercase!"
-            patch_check ' {4}\[\[patch\.be8]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]?$|[0-9a-f]{3,})'                 "$patch_content" match   "value length is wrong! be8 is supposed to be 1 byte."   2
-            patch_check ' {4}\[\[patch\.be16]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]{0,3}$|[0-9a-f]{5,})'            "$patch_content" match   "value length is wrong! be16 is supposed to be 2 bytes." 2
-            patch_check ' {4}\[\[patch\.be32]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]{0,7}$|[0-9a-f]{9,})'            "$patch_content" match   "value length is wrong! be32 is supposed to be 4 bytes." 2
-            patch_check ' {4}\[\[patch\.be64]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]{0,15}$|[0-9a-f]{17,})'          "$patch_content" match   "value length is wrong! be64 is supposed to be 8 bytes." 2
+            patch_check 'patches\/[0-9A-F]{8} - .+\.patch\.toml'                                                                      "$patch"         nomatch "Filename is invalid!"
+            patch_check 'title_name = ".+"'                                                                                           "$patch_content" nomatch "title_name is invalid or missing!"
+            patch_check 'title_id = "[0-9A-F]{8}" # [A-Z]{2}-[0-9]{4,5}'                                                              "$patch_content" nomatch "title_id is invalid or missing!"
+            patch_check 'hash = ("[0-9A-F]{16}"|\[.*\n {4}"[0-9A-F]{16}",?) # .+|#hash = (""|\[(\n# {4}"".*)+\n#])'                   "$patch_content" nomatch "hash is invalid or missing!"
+            patch_check '#hash = (""|\[\n# {4}"").*'                                                                                  "$patch_content" match   "hash is empty."
+            patch_check '#media_id = ("[0-9A-F]{8}".*|\[( # .+)?\n# {4}"[0-9A-F]{8}".*(\n# {4}"[0-9A-F]{8}".*)*\n#\])|#media_id = ""' "$patch_content" nomatch "media_id is invalid or missing!"
+            patch_check '#media_id = ""'                                                                                              "$patch_content" match   "media_id is empty."
+            patch_check '\[\[patch]]'                                                                                                 "$patch_content" nomatch "[[patch]] is missing!"
+            patch_check ' {4}name = ".+"'                                                                                             "$patch_content" nomatch "name is invalid or missing!"
+            patch_check ' {4}desc = ""'                                                                                               "$patch_content" match   "Unneeded empty description!"
+            patch_check ' {4}author = ".+"'                                                                                           "$patch_content" nomatch "author is invalid or missing!"
+            patch_check ' {4}is_enabled = '                                                                                           "$patch_content" nomatch "is_enabled is missing!"
+            patch_check ' {4}is_enabled = true'                                                                                       "$patch_content" match   "Patch is enabled!"
+            patch_check ' {8}address = 0x[0-9a-f]{8}'                                                                                 "$patch_content" nomatch "address is invalid or missing!"
+            patch_check ' {8}value = '                                                                                                "$patch_content" nomatch "value is invalid or missing!"
+            patch_check ' {8}address = 0x[0-9a-f]{1,15}[A-F]+'                                                                        "$patch_content" match   "Hex can't be uppercase!"
+            patch_check ' {8}value = 0x"?[0-9a-f]{1,15}[A-F]+'                                                                        "$patch_content" match   "Hex can't be uppercase!"
+            patch_check ' {4}\[\[patch\.be8]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]?$|[0-9a-f]{3,})'                  "$patch_content" match   "value length is wrong! be8 is supposed to be 1 byte."   2
+            patch_check ' {4}\[\[patch\.be16]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]{0,3}$|[0-9a-f]{5,})'             "$patch_content" match   "value length is wrong! be16 is supposed to be 2 bytes." 2
+            patch_check ' {4}\[\[patch\.be32]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]{0,7}$|[0-9a-f]{9,})'             "$patch_content" match   "value length is wrong! be32 is supposed to be 4 bytes." 2
+            patch_check ' {4}\[\[patch\.be64]]\n {8}address = 0x[0-9a-f]{8}\n {8}value = 0x([0-9a-f]{0,15}$|[0-9a-f]{17,})'           "$patch_content" match   "value length is wrong! be64 is supposed to be 8 bytes." 2
           done
           if [ -n "$patch_errored_fatal" ]; then
             echo "Linting completed with errors!"