Skip to content

Commit

Permalink
JS-19 Do not deploy Node.js embedded runtime when sonar.scanner.skipN…
Browse files Browse the repository at this point in the history
…odeProvisioning is set (#4826)
  • Loading branch information
yassin-kammoun-sonarsource authored Sep 18, 2024
1 parent 4a83af3 commit 0ad18cd
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@
import static java.util.Collections.emptyList;
import static org.sonar.plugins.javascript.bridge.NetUtils.findOpenPort;
import static org.sonar.plugins.javascript.nodejs.NodeCommandBuilderImpl.NODE_EXECUTABLE_PROPERTY;
import static org.sonar.plugins.javascript.nodejs.NodeCommandBuilderImpl.NODE_FORCE_HOST_PROPERTY;
import static org.sonar.plugins.javascript.nodejs.NodeCommandBuilderImpl.SKIP_NODE_PROVISIONING_PROPERTY;

public class BridgeServerImpl implements BridgeServer {

Expand Down Expand Up @@ -165,11 +167,18 @@ int getTimeoutSeconds() {
*/
void deploy(Configuration configuration) throws IOException {
bundle.deploy(temporaryDeployLocation);
if (configuration.get(NODE_EXECUTABLE_PROPERTY).isPresent()) {
LOG.info(
"'{}' is set. Skipping embedded Node.js runtime deployment.",
NODE_EXECUTABLE_PROPERTY
);
if (configuration.get(NODE_EXECUTABLE_PROPERTY).isPresent() ||
configuration.getBoolean(SKIP_NODE_PROVISIONING_PROPERTY).orElse(false) ||
configuration.getBoolean(NODE_FORCE_HOST_PROPERTY).orElse(false)) {
String property;
if (configuration.get(NODE_EXECUTABLE_PROPERTY).isPresent()) {
property = NODE_EXECUTABLE_PROPERTY;
} else if (configuration.get(SKIP_NODE_PROVISIONING_PROPERTY).isPresent()) {
property = SKIP_NODE_PROVISIONING_PROPERTY;
} else {
property = NODE_FORCE_HOST_PROPERTY;
}
LOG.info("'{}' is set. Skipping embedded Node.js runtime deployment.", property);
return;
}
embeddedNode.deploy();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ public class NodeCommandBuilderImpl implements NodeCommandBuilder {
"package/node_modules/run-node/run-node";

public static final String NODE_EXECUTABLE_PROPERTY = "sonar.nodejs.executable";
private static final String NODE_FORCE_HOST_PROPERTY = "sonar.nodejs.forceHost";
private static final String SKIP_NODE_PROVISIONING_PROPERTY = "sonar.scanner.skipNodeProvisioning";
public static final String NODE_FORCE_HOST_PROPERTY = "sonar.nodejs.forceHost";
public static final String SKIP_NODE_PROVISIONING_PROPERTY = "sonar.scanner.skipNodeProvisioning";

private static final Pattern NODEJS_VERSION_PATTERN = Pattern.compile(
"v?(\\d+)\\.(\\d+)\\.(\\d+)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
import static org.slf4j.event.Level.WARN;
import static org.sonar.plugins.javascript.bridge.AnalysisMode.DEFAULT_LINTER_ID;
import static org.sonar.plugins.javascript.nodejs.NodeCommandBuilderImpl.NODE_EXECUTABLE_PROPERTY;
import static org.sonar.plugins.javascript.nodejs.NodeCommandBuilderImpl.NODE_FORCE_HOST_PROPERTY;
import static org.sonar.plugins.javascript.nodejs.NodeCommandBuilderImpl.SKIP_NODE_PROVISIONING_PROPERTY;

class BridgeServerImplTest {

Expand Down Expand Up @@ -788,6 +790,41 @@ void should_not_deploy_runtime_if_sonar_nodejs_executable_is_set() {
"'" + NODE_EXECUTABLE_PROPERTY + "' is set. Skipping embedded Node.js runtime deployment."
);
}

@Test
void should_not_deploy_runtime_if_skip_node_provisioning_is_set() throws Exception {
var script = "logging.js";
bridgeServer = createBridgeServer(script);

var settings = new MapSettings().setProperty(SKIP_NODE_PROVISIONING_PROPERTY, true);
context.setSettings(settings);

var config = BridgeServerConfig.fromSensorContext(context);
bridgeServer.startServerLazily(config);

assertThat(logTester.logs(INFO))
.contains(
"'" + SKIP_NODE_PROVISIONING_PROPERTY + "' is set. Skipping embedded Node.js runtime deployment."
);
}

@Test
void should_not_deploy_runtime_if_node_force_host_is_set() throws Exception {
var script = "logging.js";
bridgeServer = createBridgeServer(script);

var settings = new MapSettings().setProperty(NODE_FORCE_HOST_PROPERTY, true);
context.setSettings(settings);

var config = BridgeServerConfig.fromSensorContext(context);
bridgeServer.startServerLazily(config);

assertThat(logTester.logs(INFO))
.contains(
"'" + NODE_FORCE_HOST_PROPERTY + "' is set. Skipping embedded Node.js runtime deployment."
);
}

private BridgeServerImpl createBridgeServer(String startServerScript) {
return new BridgeServerImpl(
builder(),
Expand Down

0 comments on commit 0ad18cd

Please sign in to comment.