diff --git a/sonar-plugin/bridge/src/main/java/org/sonar/plugins/javascript/bridge/EmbeddedNode.java b/sonar-plugin/bridge/src/main/java/org/sonar/plugins/javascript/bridge/EmbeddedNode.java
index a794b09be7..0a03e79df3 100644
--- a/sonar-plugin/bridge/src/main/java/org/sonar/plugins/javascript/bridge/EmbeddedNode.java
+++ b/sonar-plugin/bridge/src/main/java/org/sonar/plugins/javascript/bridge/EmbeddedNode.java
@@ -62,6 +62,7 @@ public class EmbeddedNode {
enum Platform {
WIN_X64,
+ LINUX_ARM64,
LINUX_X64,
DARWIN_ARM64,
DARWIN_X64,
@@ -71,6 +72,8 @@ private String pathInJar() {
switch (this) {
case WIN_X64:
return "/win-x64/";
+ case LINUX_ARM64:
+ return "/linux-arm64/";
case LINUX_X64:
return "/linux-x64/";
case DARWIN_ARM64:
@@ -115,6 +118,8 @@ static Platform detect(Environment env) {
var lowerCaseOsName = osName.toLowerCase(Locale.ROOT);
if (osName.contains("Windows") && isX64(env)) {
return WIN_X64;
+ } else if (lowerCaseOsName.contains("linux") && isARM64(env) ) {
+ return LINUX_ARM64;
} else if (lowerCaseOsName.contains("linux") && isX64(env) && !env.isAlpine()) {
// alpine linux is using musl libc, which is not compatible with linux-x64
return LINUX_X64;
diff --git a/sonar-plugin/bridge/src/test/java/org/sonar/plugins/javascript/bridge/EmbeddedNodeTest.java b/sonar-plugin/bridge/src/test/java/org/sonar/plugins/javascript/bridge/EmbeddedNodeTest.java
index bbdabe75c0..bff2d72bbc 100644
--- a/sonar-plugin/bridge/src/test/java/org/sonar/plugins/javascript/bridge/EmbeddedNodeTest.java
+++ b/sonar-plugin/bridge/src/test/java/org/sonar/plugins/javascript/bridge/EmbeddedNodeTest.java
@@ -26,6 +26,7 @@
import static org.mockito.Mockito.when;
import static org.sonar.plugins.javascript.bridge.EmbeddedNode.Platform.DARWIN_ARM64;
import static org.sonar.plugins.javascript.bridge.EmbeddedNode.Platform.DARWIN_X64;
+import static org.sonar.plugins.javascript.bridge.EmbeddedNode.Platform.LINUX_ARM64;
import static org.sonar.plugins.javascript.bridge.EmbeddedNode.Platform.LINUX_X64;
import static org.sonar.plugins.javascript.bridge.EmbeddedNode.Platform.UNSUPPORTED;
import static org.sonar.plugins.javascript.bridge.EmbeddedNode.Platform.WIN_X64;
@@ -115,7 +116,14 @@ void should_detect_platform_for_mac_os_x64_environment() {
}
@Test
- void should_detect_platform_for_linux_environment() {
+ void should_detect_platform_for_linux_arm64_environment() {
+ var platform = Platform.detect(createLinuxArm64Environment());
+ assertThat(platform).isEqualTo(LINUX_ARM64);
+ assertThat(platform.archivePathInJar()).isEqualTo("/linux-arm64/node.xz");
+ }
+
+ @Test
+ void should_detect_platform_for_linux_x64_environment() {
var linux = mock(Environment.class);
when(linux.getOsName()).thenReturn("linux");
when(linux.getOsArch()).thenReturn("amd64");
@@ -188,6 +196,13 @@ private Environment createTestEnvironment() {
return mockEnvironment;
}
+ private Environment createLinuxArm64Environment() {
+ Environment mockEnvironment = mock(Environment.class);
+ when(mockEnvironment.getOsName()).thenReturn("linux");
+ when(mockEnvironment.getOsArch()).thenReturn("aarch64");
+ return mockEnvironment;
+ }
+
private Environment createMacOSArm64Environment() {
Environment mockEnvironment = mock(Environment.class);
when(mockEnvironment.getOsName()).thenReturn("mac os x");
diff --git a/sonar-plugin/sonar-javascript-plugin/pom.xml b/sonar-plugin/sonar-javascript-plugin/pom.xml
index d4ba69e446..6b203b0331 100644
--- a/sonar-plugin/sonar-javascript-plugin/pom.xml
+++ b/sonar-plugin/sonar-javascript-plugin/pom.xml
@@ -256,6 +256,34 @@
+
+ linux-arm64
+ package
+
+ shade
+
+
+ true
+ linux-arm64
+
+
+
+
+ ${project.version}
+
+
+
+ linux-arm64/node.xz
+ ${project.build.directory}/node/linux-arm64/node.xz
+
+
+ linux-arm64/version.txt
+ ${project.build.directory}/node/linux-arm64/version.txt
+
+
+
+
+
multi
package
diff --git a/tools/fetch-node/node-distros.mjs b/tools/fetch-node/node-distros.mjs
index 4380730566..ad812b4e9a 100644
--- a/tools/fetch-node/node-distros.mjs
+++ b/tools/fetch-node/node-distros.mjs
@@ -33,6 +33,13 @@ export const DISTROS = [
sha: 'fc5b73f2a78c17bbe926cdb1447d652f9f094c79582f1be6471b4b38a2e1ccc8',
binPath: 'bin/node',
},
+ {
+ id: 'linux-arm64',
+ url: `${NODE_ORG_URL}-linux-arm64.tar.gz`,
+ artifactoryUrl: `${NODE_ARTIFACTORY_URL}-linux-arm64.tar.gz`,
+ sha: 'd2a7dbeeb274bfd16b579d2cafb92f673010df36c83a5b55de3916aad6806a6a',
+ binPath: 'bin/node',
+ },
{
id: 'linux-x64',
url: `${NODE_ORG_URL}-linux-x64.tar.gz`,
diff --git a/tools/fetch-node/pom.xml b/tools/fetch-node/pom.xml
index 35b7dba8ea..927d595a5e 100644
--- a/tools/fetch-node/pom.xml
+++ b/tools/fetch-node/pom.xml
@@ -48,6 +48,7 @@
${project.basedir}/downloads/runtimes/darwin-arm64/node
${project.basedir}/downloads/runtimes/darwin-x64/node
+ ${project.basedir}/downloads/runtimes/linux-arm64/node
${project.basedir}/downloads/runtimes/linux-x64/node
${project.basedir}/downloads/runtimes/win-x64/node.exe