From c4d23d16edfde2566c4986e4dd7b7a177940886d Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Nov 2025 09:37:33 +0100 Subject: [PATCH 1/3] Actions: dont fail if no JS/TS code was found --- .../extractor/src/com/semmle/js/extractor/AutoBuild.java | 6 ++++-- .../src/com/semmle/js/extractor/EnvironmentVariables.java | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 8d00712b653b..23f15bcf35f2 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -489,13 +489,15 @@ public int run() throws IOException { diagnosticsToClose.forEach(DiagnosticWriter::close); } - if (!hasSeenCode()) { + // Fail extraction is no relevant files were found. + if (!seenFiles || !hasSeenCode() && !EnvironmentVariables.isActionsExtractor()) { if (seenFiles) { warn("Only found JavaScript or TypeScript files that were empty or contained syntax errors."); } else { warn("No JavaScript or TypeScript code found."); } - // ensuring that the finalize steps detects that no code was seen. + // Ensuring that the finalize steps detects that no code was seen. + // This is necessary to ensure we don't produce an overlay-base database without externs. Path srcFolder = Paths.get(EnvironmentVariables.getWipDatabase(), "src"); try { FileUtil8.recursiveDelete(srcFolder); diff --git a/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java b/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java index 39dfa70b285b..f2ac4227589f 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java +++ b/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java @@ -18,6 +18,9 @@ public class EnvironmentVariables { public static final String CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR = "CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE"; + public static final String CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE_ENV_VAR = + "CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE"; + public static final String CODEQL_DIST_ENV_VAR = "CODEQL_DIST"; /** @@ -94,4 +97,8 @@ public static String getCodeQLDist() { public static String getWipDatabase() { return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR); } + + public static boolean isActionsExtractor() { + return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE_ENV_VAR) != null; + } } From 105213df032e4427f6097a981ceb2c47dd3e4e3e Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Nov 2025 09:51:56 +0100 Subject: [PATCH 2/3] Update javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 23f15bcf35f2..5deb786bc923 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -489,7 +489,7 @@ public int run() throws IOException { diagnosticsToClose.forEach(DiagnosticWriter::close); } - // Fail extraction is no relevant files were found. + // Fail extraction if no relevant files were found. if (!seenFiles || !hasSeenCode() && !EnvironmentVariables.isActionsExtractor()) { if (seenFiles) { warn("Only found JavaScript or TypeScript files that were empty or contained syntax errors."); From 81bb07a7ba0ee715df7c2dfd3e6344065489402d Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 4 Nov 2025 11:45:20 +0100 Subject: [PATCH 3/3] JS: Fix check to account for override in tests The code was written on the assumption that 'seenCode' implies 'seenFiles' but the unit test override 'hasSeenCode()' to always return true. Which meant we would start taking this branch in the unit tests. --- .../extractor/src/com/semmle/js/extractor/AutoBuild.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 5deb786bc923..416fa237e97e 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -490,7 +490,10 @@ public int run() throws IOException { } // Fail extraction if no relevant files were found. - if (!seenFiles || !hasSeenCode() && !EnvironmentVariables.isActionsExtractor()) { + boolean seenRelevantFiles = EnvironmentVariables.isActionsExtractor() + ? seenFiles // assume all files are relevant for Actions extractor + : hasSeenCode(); + if (!seenRelevantFiles) { if (seenFiles) { warn("Only found JavaScript or TypeScript files that were empty or contained syntax errors."); } else {