@@ -42,6 +42,62 @@ log_error() {
42
42
echo -e " ${RED} [ERROR]${NC} $1 "
43
43
}
44
44
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
+
45
101
# Cleanup function
46
102
cleanup_at_start () {
47
103
if [[ -d " $TEST_DIR " ]]; then
@@ -266,8 +322,33 @@ validate_language() {
266
322
# Check if there are actual errors (not just deprecation warnings)
267
323
if [[ $validation_exit_code -ne 0 ]]; then
268
324
# 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
270
326
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
+
271
352
return 1
272
353
else
273
354
log_info " Query validation completed for $language (only deprecation warnings in standard library)"
0 commit comments