From 59a985537371daa100cfbfcf4aa04e068d678e77 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 18 Sep 2023 13:44:00 +0200 Subject: [PATCH] [Wasm] Use Node.js with canary v8 that supports recent Wasm GC changes It's required to run wasm stdlib tests and compiler box tests with WASI. #KT-59720 --- build.gradle.kts | 7 +++++++ gradle/verification-metadata.xml | 18 ++++++++++++++++++ .../kotlin/resolve-dependencies.gradle.kts | 19 +++++++++++++++++++ .../src/main/kotlin/setupV8.kt | 1 - 4 files changed, 44 insertions(+), 1 deletion(-) 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 } }