aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTravis Collins <travistx@gmail.com>2025-04-24 03:48:23 -0600
committersonartech <sonartech@sonarsource.com>2025-04-24 20:03:15 +0000
commit460e0e9ef83870614049a251db4c7b2291890ea5 (patch)
tree697cdf1b4818b8a1453a0fa0531edf186e0d2b5d
parent818e46d627d107e1609b9707640922114139f0d2 (diff)
downloadsonarqube-460e0e9ef83870614049a251db4c7b2291890ea5.tar.gz
sonarqube-460e0e9ef83870614049a251db4c7b2291890ea5.zip
SCA-184 Remove recursiveManifestSearch config option
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliService.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/ScaProperties.java15
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java8
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaPropertiesTest.java45
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"));
- }
-
}