[Gradle, JS] Configuration cache friendly

This commit is contained in:
Ilya Goncharov
2021-07-01 15:27:46 +03:00
committed by TeamCityServer
parent 81ac48390c
commit 065a5d98fb
@@ -12,6 +12,8 @@ import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.logging.kotlinInfo
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
import org.jetbrains.kotlin.gradle.utils.ArchiveOperationsCompat
import org.jetbrains.kotlin.gradle.utils.FileSystemOperationsCompat
import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics
import java.io.File import java.io.File
import java.net.URI import java.net.URI
@@ -21,6 +23,8 @@ open class YarnSetupTask : DefaultTask() {
@Transient @Transient
private val settings = project.yarn private val settings = project.yarn
private val env by lazy { settings.requireConfigured() } private val env by lazy { settings.requireConfigured() }
private val fileSystemOperations = FileSystemOperationsCompat(project)
private val archiveOperations = ArchiveOperationsCompat(project)
@Suppress("MemberVisibilityCanBePrivate") @Suppress("MemberVisibilityCanBePrivate")
val downloadUrl val downloadUrl
@@ -48,27 +52,26 @@ open class YarnSetupTask : DefaultTask() {
@Suppress("unused") // as it called by Gradle before task execution and used to resolve artifact @Suppress("unused") // as it called by Gradle before task execution and used to resolve artifact
@get:Classpath @get:Classpath
val yarnDist: File val yarnDist: File by lazy {
get() { val repo = project.repositories.ivy { repo ->
val repo = project.repositories.ivy { repo -> repo.name = "Yarn Distributions at ${downloadUrl}"
repo.name = "Yarn Distributions at ${downloadUrl}" repo.url = URI(downloadUrl)
repo.url = URI(downloadUrl) repo.patternLayout {
repo.patternLayout { it.artifact("v[revision]/[artifact](-v[revision]).[ext]")
it.artifact("v[revision]/[artifact](-v[revision]).[ext]")
}
repo.metadataSources { it.artifact() }
repo.content { it.includeModule("com.yarnpkg", "yarn") }
} }
val startDownloadTime = System.currentTimeMillis() repo.metadataSources { it.artifact() }
val dist = _yarnDist repo.content { it.includeModule("com.yarnpkg", "yarn") }
val downloadDuration = System.currentTimeMillis() - startDownloadTime
if (downloadDuration > 0) {
KotlinBuildStatsService.getInstance()
?.report(NumericalMetrics.ARTIFACTS_DOWNLOAD_SPEED, dist.length() * 1000 / downloadDuration)
}
project.repositories.remove(repo)
return dist
} }
val startDownloadTime = System.currentTimeMillis()
val dist = _yarnDist
val downloadDuration = System.currentTimeMillis() - startDownloadTime
if (downloadDuration > 0) {
KotlinBuildStatsService.getInstance()
?.report(NumericalMetrics.ARTIFACTS_DOWNLOAD_SPEED, dist.length() * 1000 / downloadDuration)
}
project.repositories.remove(repo)
dist
}
@TaskAction @TaskAction
fun setup() { fun setup() {
@@ -79,8 +82,8 @@ open class YarnSetupTask : DefaultTask() {
private fun extract(archive: File, destination: File) { private fun extract(archive: File, destination: File) {
val dirInTar = archive.name.removeSuffix(".tar.gz") val dirInTar = archive.name.removeSuffix(".tar.gz")
project.copy { fileSystemOperations.copy {
it.from(project.tarTree(archive)) it.from(archiveOperations.tarTree(archive))
it.into(destination) it.into(destination)
it.includeEmptyDirs = false it.includeEmptyDirs = false
it.eachFile { fileCopy -> it.eachFile { fileCopy ->