build scripts: clean build retry for incremental compilation

GitOrigin-RevId: 2351142c2c5de9dfb48a166520fb6217b3b80a66
This commit is contained in:
Dmitriy.Panov
2022-08-25 18:26:12 +00:00
committed by intellij-monorepo-bot
parent f7d09ea56a
commit 075f8d47e8
3 changed files with 32 additions and 7 deletions
@@ -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
}
}
@@ -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<String>?,
includingTestsInModules: List<String>?) {
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))
}
}
}
@@ -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")
}
}