diff options
author | Travis Collins <travistx@gmail.com> | 2025-04-24 03:48:23 -0600 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2025-04-24 20:03:15 +0000 |
commit | 460e0e9ef83870614049a251db4c7b2291890ea5 (patch) | |
tree | 697cdf1b4818b8a1453a0fa0531edf186e0d2b5d | |
parent | 818e46d627d107e1609b9707640922114139f0d2 (diff) | |
download | sonarqube-460e0e9ef83870614049a251db4c7b2291890ea5.tar.gz sonarqube-460e0e9ef83870614049a251db4c7b2291890ea5.zip |
SCA-184 Remove recursiveManifestSearch config option
4 files changed, 20 insertions, 54 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliService.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliService.java index 8a8e90cce25..013ac2df109 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliService.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliService.java @@ -29,7 +29,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.function.Consumer; import javax.annotation.Nullable; import org.apache.commons.csv.CSVFormat; @@ -85,6 +84,7 @@ public class CliService { args.add(zipPath.toAbsolutePath().toString()); args.add("--directory"); args.add(module.getBaseDir().toString()); + args.add("--recursive"); String excludeFlag = getExcludeFlag(module, configuration); if (excludeFlag != null) { @@ -104,9 +104,7 @@ public class CliService { envProperties.put("TIDELIFT_ALLOW_MANIFEST_FAILURES", "1"); envProperties.put("TIDELIFT_CLI_INSIDE_SCANNER_ENGINE", "1"); envProperties.put("TIDELIFT_CLI_SQ_SERVER_VERSION", server.getVersion()); - // EXCLUDED_MANIFESTS_PROP_KEY is a special case which we handle via --args, not environment variables - Set<String> ignoredProperties = Set.of(EXCLUDED_MANIFESTS_PROP_KEY); - envProperties.putAll(ScaProperties.buildFromScannerProperties(configuration, ignoredProperties)); + envProperties.putAll(ScaProperties.buildFromScannerProperties(configuration)); LOG.info("Running command: {}", args); LOG.info("Environment properties: {}", envProperties); diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaProperties.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaProperties.java index 5c848b4ddbc..e5086149c03 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaProperties.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaProperties.java @@ -30,6 +30,11 @@ import org.sonar.scanner.config.DefaultConfiguration; public class ScaProperties { private static final Pattern sonarScaPropertyRegex = Pattern.compile("^sonar\\.sca\\.([a-zA-Z]+)$"); private static final String SONAR_SCA_PREFIX = "sonar.sca."; + private static final Set<String> IGNORED_PROPERTIES = Set.of( + // excludedManifests is a special case which we handle when building --exclude + "sonar.sca.excludedManifests", + // keep recursive enabled to better match sonar-scanner behavior + "sonar.sca.recursiveManifestSearch"); private ScaProperties() { } @@ -46,22 +51,16 @@ public class ScaProperties { * { "sonar.someOtherProperty" : "value" } returns an empty map * * @param configuration the scanner configuration possibly containing sonar.sca.* properties - * @param ignoredPropertyNames property names that should not be processed as a property * @return a map of Tidelift CLI compatible environment variable names to their configuration values */ - public static Map<String, String> buildFromScannerProperties(DefaultConfiguration configuration, Set<String> ignoredPropertyNames) { + public static Map<String, String> buildFromScannerProperties(DefaultConfiguration configuration) { HashMap<String, String> props = new HashMap<>(configuration.getProperties()); - // recursive mode defaults to true - if (!props.containsKey("sonar.sca.recursiveManifestSearch")) { - props.put("sonar.sca.recursiveManifestSearch", "true"); - } - return props .entrySet() .stream() .filter(entry -> entry.getKey().startsWith(SONAR_SCA_PREFIX)) - .filter(entry -> !ignoredPropertyNames.contains(entry.getKey())) + .filter(entry -> !IGNORED_PROPERTIES.contains(entry.getKey())) .collect(Collectors.toMap(entry -> convertPropToEnvVariable(entry.getKey()), Map.Entry::getValue)); } diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java index 597fafa833c..e907294d6fd 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java @@ -102,8 +102,7 @@ class CliServiceTest { void generateZip_shouldCallProcessCorrectly_andRegisterTelemetry() throws IOException, URISyntaxException { assertThat(rootModuleDir.resolve("test_file").toFile().createNewFile()).isTrue(); - when(configuration.getProperties()).thenReturn(Map.of("sonar.sca.recursiveManifestSearch", "true", CliService.EXCLUDED_MANIFESTS_PROP_KEY, "foo,bar,baz/**")); - when(configuration.get("sonar.sca.recursiveManifestSearch")).thenReturn(Optional.of("true")); + when(configuration.getProperties()).thenReturn(Map.of(CliService.EXCLUDED_MANIFESTS_PROP_KEY, "foo,bar,baz/**")); when(configuration.getStringArray(CliService.EXCLUDED_MANIFESTS_PROP_KEY)).thenReturn(new String[] {"foo", "bar", "baz/**"}); File producedZip = underTest.generateManifestsZip(rootInputModule, scriptDir(), configuration); @@ -118,6 +117,7 @@ class CliServiceTest { rootInputModule.getWorkDir().resolve("dependency-files.zip").toString(), "--directory", rootInputModule.getBaseDir().toString(), + "--recursive", "--exclude", "foo,bar,baz/**,ignored.txt,.scannerwork/**", "--debug"); @@ -126,7 +126,6 @@ class CliServiceTest { .contains("Arguments Passed In: " + String.join(" ", expectedArguments)) .contains("TIDELIFT_SKIP_UPDATE_CHECK=1") .contains("TIDELIFT_ALLOW_MANIFEST_FAILURES=1") - .contains("TIDELIFT_RECURSIVE_MANIFEST_SEARCH=true") .contains("Generated manifests zip file: " + producedZip.getName()); assertThat(telemetryCache.getAll()).containsKey("scanner.sca.execution.cli.duration").isNotNull(); @@ -150,6 +149,7 @@ class CliServiceTest { rootInputModule.getWorkDir().resolve("dependency-files.zip").toString(), "--directory", rootInputModule.getBaseDir().toString(), + "--recursive", "--exclude", "ignored.txt,.scannerwork/**", "--debug"); @@ -174,6 +174,7 @@ class CliServiceTest { rootInputModule.getWorkDir().resolve("dependency-files.zip").toString(), "--directory", rootInputModule.getBaseDir().toString(), + "--recursive", "--exclude", "ignored.txt,.scannerwork/**", "--debug"); @@ -203,6 +204,7 @@ class CliServiceTest { rootInputModule.getWorkDir().resolve("dependency-files.zip").toString(), "--directory", rootInputModule.getBaseDir().toString(), + "--recursive", "--exclude", "ignored.txt,.scannerwork/**", "--debug"); diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaPropertiesTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaPropertiesTest.java index e598a225b9c..70e7a6b6e53 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaPropertiesTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaPropertiesTest.java @@ -19,11 +19,9 @@ */ package org.sonar.scanner.sca; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.Set; import org.junit.jupiter.api.Test; import org.sonar.scanner.config.DefaultConfiguration; @@ -36,13 +34,12 @@ class ScaPropertiesTest { private final DefaultConfiguration configuration = mock(DefaultConfiguration.class); @Test - void buildFromScannerProperties_withNoProperties_returnsDefaultMap() { + void buildFromScannerProperties_withNoProperties_returnsEmptyMap() { when(configuration.get(anyString())).thenReturn(Optional.empty()); - var result = ScaProperties.buildFromScannerProperties(configuration, Collections.emptySet()); + var result = ScaProperties.buildFromScannerProperties(configuration); - assertThat(result).containsExactly( - Map.entry("TIDELIFT_RECURSIVE_MANIFEST_SEARCH", "true")); + assertThat(result).isEqualTo(Map.of()); } @Test @@ -51,14 +48,13 @@ class ScaPropertiesTest { inputProperties.put("sonar.sca.pythonBinary", "/usr/bin/python3"); inputProperties.put("sonar.sca.unknownProperty", "value"); inputProperties.put("sonar.somethingElse", "dont-include-non-sca"); - inputProperties.put("sonar.sca.ignoredProperty", "ignore-me"); + inputProperties.put("sonar.sca.recursiveManifestSearch", "ignore-me"); when(configuration.getProperties()).thenReturn(inputProperties); when(configuration.get(anyString())).thenAnswer(i -> Optional.ofNullable(inputProperties.get(i.getArgument(0, String.class)))); - var result = ScaProperties.buildFromScannerProperties(configuration, Set.of("sonar.sca.ignoredProperty")); + var result = ScaProperties.buildFromScannerProperties(configuration); assertThat(result).containsExactly( - Map.entry("TIDELIFT_RECURSIVE_MANIFEST_SEARCH", "true"), Map.entry("TIDELIFT_PYTHON_BINARY", "/usr/bin/python3"), Map.entry("TIDELIFT_UNKNOWN_PROPERTY", "value")); } @@ -79,7 +75,6 @@ class ScaPropertiesTest { inputProperties.put("sonar.sca.pythonBinary", "/usr/bin/python3"); inputProperties.put("sonar.sca.pythonNoResolve", "true"); inputProperties.put("sonar.sca.pythonResolveLocal", "false"); - inputProperties.put("sonar.sca.recursiveManifestSearch", "true"); when(configuration.getProperties()).thenReturn(inputProperties); when(configuration.get(anyString())).thenAnswer(i -> Optional.ofNullable(inputProperties.get(i.getArgument(0, String.class)))); @@ -97,37 +92,9 @@ class ScaPropertiesTest { expectedProperties.put("TIDELIFT_PYTHON_BINARY", "/usr/bin/python3"); expectedProperties.put("TIDELIFT_PYTHON_NO_RESOLVE", "true"); expectedProperties.put("TIDELIFT_PYTHON_RESOLVE_LOCAL", "false"); - expectedProperties.put("TIDELIFT_RECURSIVE_MANIFEST_SEARCH", "true"); - var result = ScaProperties.buildFromScannerProperties(configuration, Collections.emptySet()); + var result = ScaProperties.buildFromScannerProperties(configuration); assertThat(result).containsExactlyInAnyOrderEntriesOf(expectedProperties); } - - - @Test - void buildFromScannerProperties_withoutRecursiveModeProp_defaultsRecursiveModeTrue() { - var inputProperties = new HashMap<String, String>(); - when(configuration.getProperties()).thenReturn(inputProperties); - when(configuration.get(anyString())).thenAnswer(i -> Optional.ofNullable(inputProperties.get(i.getArgument(0, String.class)))); - - var result = ScaProperties.buildFromScannerProperties(configuration, Collections.emptySet()); - - assertThat(result).containsExactly( - Map.entry("TIDELIFT_RECURSIVE_MANIFEST_SEARCH", "true")); - } - - @Test - void buildFromScannerProperties_withRecursiveModeProp_usesPropAsOverride() { - var inputProperties = new HashMap<String, String>(); - inputProperties.put("sonar.sca.recursiveManifestSearch", "false"); - when(configuration.getProperties()).thenReturn(inputProperties); - when(configuration.get(anyString())).thenAnswer(i -> Optional.ofNullable(inputProperties.get(i.getArgument(0, String.class)))); - - var result = ScaProperties.buildFromScannerProperties(configuration, Collections.emptySet()); - - assertThat(result).containsExactly( - Map.entry("TIDELIFT_RECURSIVE_MANIFEST_SEARCH", "false")); - } - } |