1313
1414namespace Utils ;
1515
16- require __DIR__ . '/../system/Test/bootstrap .php ' ;
16+ require __DIR__ . '/../system/util_bootstrap .php ' ;
1717
1818use CodeIgniter \CLI \CLI ;
19+ use FilesystemIterator ;
1920use RecursiveDirectoryIterator ;
2021use RecursiveIteratorIterator ;
2122use RuntimeException ;
23+ use SplFileInfo ;
2224
23- function findExecutableFiles ($ dir )
25+ /**
26+ * @param list<string> $excludeDirs
27+ *
28+ * @return list<string>
29+ */
30+ function findExecutableFiles (string $ dir , array $ excludeDirs = []): array
2431{
25- $ execFileList = [
32+ static $ execFileList = [
33+ '.github/scripts/deploy-userguide ' ,
2634 'admin/release-userguide ' ,
2735 'admin/release-deploy ' ,
2836 'admin/apibot ' ,
@@ -37,23 +45,28 @@ function findExecutableFiles($dir)
3745
3846 $ executableFiles = [];
3947
40- // Check if the directory exists
4148 if (! is_dir ($ dir )) {
4249 throw new RuntimeException ('No such directory: ' . $ dir );
4350 }
4451
45- // Create a Recursive Directory Iterator
4652 $ iterator = new RecursiveIteratorIterator (
47- new RecursiveDirectoryIterator ($ dir ),
53+ new RecursiveDirectoryIterator ($ dir , FilesystemIterator::SKIP_DOTS | FilesystemIterator::CURRENT_AS_FILEINFO ),
54+ RecursiveIteratorIterator::CHILD_FIRST | RecursiveIteratorIterator::LEAVES_ONLY ,
4855 );
4956
50- // Iterate over each item in the directory
57+ /** @var SplFileInfo $fileinfo */
5158 foreach ($ iterator as $ fileinfo ) {
52- // Check if the item is a file and is executable
53- if ($ fileinfo ->isFile () && is_executable ($ fileinfo ->getPathname ())) {
54- $ filePath = $ fileinfo ->getPathname ();
59+ $ filePath = $ fileinfo ->getPathname ();
60+
61+ if ($ fileinfo ->isFile () && is_executable ($ filePath )) {
62+ $ dirPath = dirname ($ filePath );
63+
64+ foreach ($ excludeDirs as $ excludeDir ) {
65+ if (str_contains ($ dirPath , $ excludeDir )) {
66+ continue 2 ;
67+ }
68+ }
5569
56- // Check allow list
5770 if (in_array ($ filePath , $ execFileList , true )) {
5871 continue ;
5972 }
@@ -72,12 +85,13 @@ function findExecutableFiles($dir)
7285// Main
7386chdir (__DIR__ . '/../ ' );
7487
75- $ dirs = ['admin ' , 'app ' , 'system ' , 'tests ' , 'user_guide_src ' , 'utils ' , 'writable ' ];
88+ $ includeDirs = ['.github ' , 'admin ' , 'app ' , 'public ' , 'system ' , 'tests ' , 'user_guide_src ' , 'utils ' , 'writable ' ];
89+ $ excludeDirs = ['utils/vendor ' ];
7690
7791$ executableFiles = [];
7892
79- foreach ($ dirs as $ dir ) {
80- $ executableFiles = array_merge ($ executableFiles , findExecutableFiles ($ dir ));
93+ foreach ($ includeDirs as $ dir ) {
94+ $ executableFiles = array_merge ($ executableFiles , findExecutableFiles ($ dir, $ excludeDirs ));
8195}
8296
8397if ($ executableFiles !== []) {
0 commit comments