@@ -42,6 +42,62 @@ log_error() {
4242 echo -e " ${RED} [ERROR]${NC} $1 "
4343}
4444
45+ # Find CodeQL CLI executable path
46+ find_codeql_cli () {
47+ local cli_path=" "
48+
49+ # Try common installation paths
50+ local common_paths=(
51+ " $HOME /.codeql/codeql-cli_v2.22.4/codeql/codeql"
52+ " $HOME /.codeql/codeql-bundle-v2.22.4/codeql/codeql"
53+ " $HOME /.codeql/distributions/codeql-cli_v2.22.4/codeql/codeql"
54+ " $HOME /.codeql/distributions/codeql-bundle-v2.22.4/codeql/codeql"
55+ " $( which codeql 2> /dev/null) "
56+ )
57+
58+ for path in " ${common_paths[@]} " ; do
59+ if [[ -f " $path " && -x " $path " ]]; then
60+ cli_path=" $path "
61+ break
62+ fi
63+ done
64+
65+ # If not found in common paths, try to find it dynamically
66+ if [[ -z " $cli_path " ]]; then
67+ cli_path=$( find " $HOME /.codeql" -name " codeql" -type f -executable 2> /dev/null | head -1)
68+ fi
69+
70+ echo " $cli_path "
71+ }
72+
73+ # Get detailed compilation errors for a specific query file
74+ get_detailed_compilation_errors () {
75+ local query_file=" $1 "
76+ local codeql_cli=" $2 "
77+
78+ if [[ -z " $codeql_cli " || ! -f " $codeql_cli " ]]; then
79+ log_warning " CodeQL CLI not found, cannot get detailed compilation errors"
80+ return 1
81+ fi
82+
83+ if [[ ! -f " $query_file " ]]; then
84+ log_error " Query file not found: $query_file "
85+ return 1
86+ fi
87+
88+ log_info " Getting detailed compilation errors for: $( basename " $query_file " ) "
89+
90+ # Run codeql query compile with verbose output
91+ local compile_output
92+ if compile_output=$( " $codeql_cli " query compile --check-only -- " $query_file " 2>&1 ) ; then
93+ log_info " Query compiled successfully (unexpected since validation failed)"
94+ echo " $compile_output "
95+ else
96+ log_error " Detailed compilation errors:"
97+ echo " $compile_output "
98+ fi
99+ }
100+
45101# Cleanup function
46102cleanup_at_start () {
47103 if [[ -d " $TEST_DIR " ]]; then
@@ -266,8 +322,33 @@ validate_language() {
266322 # Check if there are actual errors (not just deprecation warnings)
267323 if [[ $validation_exit_code -ne 0 ]]; then
268324 # Check if the failures are only deprecation warnings about assume_small_delta
269- if echo " $validation_output " | grep -v " pragma 'assume_small_delta' is deprecated" | grep -q -E " (ERROR|FAILURE|Failed to |Error:|Compilation failed)" ; then
325+ if echo " $validation_output " | grep -v " pragma 'assume_small_delta' is deprecated" | grep -q -E " (ERROR|FAILURE|Failed|Error:|Compilation failed|Fatal error )" ; then
270326 log_error " Query validation failed for $language with actual errors"
327+
328+ # Try to get detailed compilation errors for failed queries
329+ log_info " Attempting to get detailed compilation errors..."
330+ local codeql_cli
331+ codeql_cli=$( find_codeql_cli)
332+
333+ if [[ -n " $codeql_cli " ]]; then
334+ # Find all query files for this language and check them individually
335+ local lang_dir=" $language /testpack-$language "
336+ local src_dir=" $lang_dir /src"
337+
338+ if [[ -d " $src_dir " ]]; then
339+ # Use find to get query files (compatible with older bash)
340+ while IFS= read -r -d ' ' query_file; do
341+ log_info " Checking individual query: $( basename " $query_file " ) "
342+ get_detailed_compilation_errors " $query_file " " $codeql_cli "
343+ echo " ---"
344+ done < <( find " $src_dir " -name " *.ql" -type f -print0)
345+ else
346+ log_warning " Source directory not found: $src_dir "
347+ fi
348+ else
349+ log_warning " CodeQL CLI not found, cannot provide detailed compilation errors"
350+ fi
351+
271352 return 1
272353 else
273354 log_info " Query validation completed for $language (only deprecation warnings in standard library)"
0 commit comments