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