From 075f8d47e8ce3fbc212ac9b6b77df1914d99fb5f Mon Sep 17 00:00:00 2001 From: "Dmitriy.Panov" Date: Wed, 24 Aug 2022 12:18:08 +0200 Subject: [PATCH] build scripts: clean build retry for incremental compilation GitOrigin-RevId: 2351142c2c5de9dfb48a166520fb6217b3b80a66 --- .../intellij/build/impl/JpsCompilationData.kt | 5 ++++ .../build/impl/compilation/CompiledClasses.kt | 29 ++++++++++++++++--- .../compilation/PortableCompilationCache.kt | 5 ++-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JpsCompilationData.kt b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JpsCompilationData.kt index 7808c1e31594..c26ed8e4367d 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JpsCompilationData.kt +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JpsCompilationData.kt @@ -11,4 +11,9 @@ class JpsCompilationData(val dataStorageRoot: Path, val buildLogFile: Path, cate var projectDependenciesResolved: Boolean = false val categoriesWithDebugLevel: String = categoriesWithDebugLevelNullable ?: "" + fun reset() { + compiledModules.clear() + compiledModuleTests.clear() + statisticsReported = false + } } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/CompiledClasses.kt b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/CompiledClasses.kt index 8b640135af8e..f66235412b37 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/CompiledClasses.kt +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/CompiledClasses.kt @@ -130,17 +130,38 @@ object CompiledClasses { context.messages.progress("Compiling project") context.compilationData.statisticsReported = false val runner = JpsCompilationRunner(context) + try { + runner.compile(context, moduleNames, includingTestsInModules) + } + catch (e: Exception) { + if (!context.options.incrementalCompilation) { + throw e + } + context.messages.warning("Incremental compilation failed. Re-trying with clean build.") + context.options.incrementalCompilation = false + context.compilationData.reset() + runner.compile(context, moduleNames, includingTestsInModules) + val successMessage = "Compilation successful after clean build retry" + context.messages.info(successMessage) + println("##teamcity[buildStatus status='SUCCESS' text='$successMessage']") + context.messages.reportStatisticValue("Incremental compilation failures", "1") + } + } + + private fun JpsCompilationRunner.compile(context: CompilationContext, + moduleNames: Collection?, + includingTestsInModules: List?) { when { - moduleNames != null -> runner.buildModules(moduleNames.map(context::findRequiredModule)) - includingTestsInModules != null -> runner.buildProduction() + moduleNames != null -> buildModules(moduleNames.map(context::findRequiredModule)) + includingTestsInModules != null -> buildProduction() else -> { - runner.buildAll() + buildAll() context.options.useCompiledClassesFromProjectOutput = true } } context.options.incrementalCompilation = true includingTestsInModules?.forEach { - runner.buildModuleTests(context.findRequiredModule(it)) + buildModuleTests(context.findRequiredModule(it)) } } } \ No newline at end of file diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/PortableCompilationCache.kt b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/PortableCompilationCache.kt index 57a88d3f004e..cf0896eb8f35 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/PortableCompilationCache.kt +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/compilation/PortableCompilationCache.kt @@ -182,12 +182,11 @@ class PortableCompilationCache(private val context: CompilationContext) { downloadCache() successMessage = "Compilation successful after retry with fresh Remote Cache" } - context.compilationData.compiledModules.clear() - context.compilationData.compiledModuleTests.clear() - context.compilationData.statisticsReported = false + context.compilationData.reset() jps.buildAll() context.messages.info(successMessage) println("##teamcity[buildStatus status='SUCCESS' text='$successMessage']") + context.messages.reportStatisticValue("Incremental compilation failures", "1") } }