aboutsummaryrefslogtreecommitdiff
path: root/run_shell_checks.py
diff options
context:
space:
mode:
Diffstat (limited to 'run_shell_checks.py')
-rwxr-xr-xrun_shell_checks.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/run_shell_checks.py b/run_shell_checks.py
new file mode 100755
index 0000000..f929d80
--- /dev/null
+++ b/run_shell_checks.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python3
+
+# SPDX-License-Identifier: Apache-2.0
+# Copyright 2025 The Meson development team
+
+import pathlib
+import sys
+
+# DO NOT ADD FILES IN THIS LIST!
+# They are here because they got added
+# in the past before this was properly checked.
+# Instead you should consider removing things
+# from this list by rewriting them to Python.
+#
+# The CI scripts probably need to remain shell
+# scripts due to the way the CI systems work.
+
+permitted_files = (
+ 'ci/ciimage/common.sh',
+ 'ci/intel-scripts/cache_exclude_windows.sh',
+ 'ci/ciimage/opensuse/install.sh',
+ 'ci/ciimage/ubuntu-rolling/install.sh',
+ 'ci/ciimage/ubuntu-rolling/test.sh',
+ 'ci/ciimage/cuda-cross/install.sh',
+ 'ci/ciimage/cuda/install.sh',
+ 'ci/ciimage/bionic/install.sh',
+ 'ci/ciimage/fedora/install.sh',
+ 'ci/ciimage/arch/install.sh',
+ 'ci/ciimage/gentoo/install.sh',
+ 'manual tests/4 standalone binaries/myapp.sh',
+ 'manual tests/4 standalone binaries/osx_bundler.sh',
+ 'manual tests/4 standalone binaries/linux_bundler.sh',
+ 'manual tests/4 standalone binaries/build_osx_package.sh',
+ 'manual tests/4 standalone binaries/build_linux_package.sh',
+ 'test cases/failing test/3 ambiguous/test_runner.sh',
+ 'test cases/common/190 install_mode/runscript.sh',
+ 'test cases/common/48 file grabber/grabber.sh',
+ 'test cases/common/12 data/runscript.sh',
+ 'test cases/common/33 run program/scripts/hello.sh',
+ )
+
+
+def check_bad_files(filename_glob):
+ num_errors = 0
+ for f in pathlib.Path('.').glob(f'**/{filename_glob}'):
+ if str(f) not in permitted_files:
+ print('Forbidden file type:', f)
+ num_errors += 1
+ return num_errors
+
+def check_deletions():
+ num_errors = 0
+ for f in permitted_files:
+ p = pathlib.Path(f)
+ if not p.is_file():
+ print('Exception list has a file that does not exist:', f)
+ num_errors += 1
+ return num_errors
+
+def check_shell_usage():
+ total_errors = 0
+ total_errors += check_bad_files('Makefile')
+ total_errors += check_bad_files('*.sh')
+ total_errors += check_bad_files('*.awk')
+ total_errors += check_deletions()
+ return total_errors
+
+if __name__ == '__main__':
+ sys.exit(check_shell_usage())
+