diff --git a/build.gradle.kts b/build.gradle.kts
index 28620213e1a..57e8e522729 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -964,8 +964,15 @@ gradle.taskGraph.whenReady(checkYarnAndNPMSuppressed)
plugins.withType(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin::class) {
extensions.configure(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension::class.java) {
+ // Node.js with canary v8 that supports recent Wasm GC changes
+ nodeVersion = "21.0.0-v8-canary202309167e82ab1fa2"
+ nodeDownloadBaseUrl = "https://nodejs.org/download/v8-canary"
+
npmInstallTaskProvider.configure {
args += listOf("--network-concurrency", "1", "--mutex", "network")
+ // It's required to pass compatibility checks in some NPM packages while using Node.js with Canary v8.
+ // TODO remove as soon as we switch to release build of Node.js.
+ args += listOf("--ignore-engines")
}
}
}
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 453da7d3790..bbcf081c7bf 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -4535,6 +4535,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/resolve-dependencies.gradle.kts b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/resolve-dependencies.gradle.kts
index 2371e0e16e0..bb6ffa7f244 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/resolve-dependencies.gradle.kts
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/resolve-dependencies.gradle.kts
@@ -1,5 +1,6 @@
import java.net.URI
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootExtension
+import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension
import org.spdx.sbom.gradle.SpdxSbomExtension
@@ -56,6 +57,24 @@ tasks.register("resolveDependencies") {
)
}
+ rootProject.extensions.findByType()?.run {
+ project.resolveDependencies(
+ "org.nodejs:node:$nodeVersion:linux-x64@tar.gz",
+ "org.nodejs:node:$nodeVersion:win-x64@zip",
+ "org.nodejs:node:$nodeVersion:darwin-x64@tar.gz",
+ "org.nodejs:node:$nodeVersion:darwin-arm64@tar.gz"
+ ) {
+ ivy {
+ url = URI(nodeDownloadBaseUrl)
+ patternLayout {
+ artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]")
+ }
+ metadataSources { artifact() }
+ content { includeModule("org.nodejs", "node") }
+ }
+ }
+ }
+
rootProject.extensions.findByType()?.run {
project.resolveDependencies("com.yarnpkg:yarn:$version@tar.gz") {
ivy {
diff --git a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/setupV8.kt b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/setupV8.kt
index 34a7507cfd9..59583128fc0 100644
--- a/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/setupV8.kt
+++ b/repo/gradle-build-conventions/buildsrc-compat/src/main/kotlin/setupV8.kt
@@ -38,7 +38,6 @@ private object NodeJsUtils {
fun useNodeJsPlugin(project: Project) {
nodeJsPlugin = NodeJsRootPlugin.apply(project.rootProject)
- nodeJsPlugin.nodeVersion = project.nodejsVersion
}
}