build scripts: failing-fast upon a failure reported during a local execution

IJI-1455

(cherry picked from commit 24db0490b9a6fc5d8dfabfd31580449e7cd64acf)

GitOrigin-RevId: 8a0cfe2c3c8b7aee86f2275db3408f92cfef1219
This commit is contained in:
Dmitriy.Panov
2024-10-29 14:28:27 +01:00
committed by intellij-monorepo-bot
parent 58072bd39b
commit 8b8c09642f
3 changed files with 19 additions and 12 deletions

View File

@@ -2,6 +2,7 @@
package org.jetbrains.intellij.build.logging
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.intellij.build.BuildScriptsLoggedError
abstract class BuildMessageLogger {
abstract fun processMessage(message: LogMessage)
@@ -35,9 +36,18 @@ class ConsoleBuildMessageLogger : BuildMessageLoggerBase() {
}
override fun processMessage(message: LogMessage) {
// reported by trace exporter
if (message.kind != LogMessage.Kind.BLOCK_STARTED && message.kind != LogMessage.Kind.BLOCK_FINISHED) {
super.processMessage(message)
when (message.kind) {
// reported by trace exporter
LogMessage.Kind.BLOCK_STARTED, LogMessage.Kind.BLOCK_FINISHED -> {}
// failing-fast upon a build problem
LogMessage.Kind.BUILD_PROBLEM -> throw BuildScriptsLoggedError(message.text)
LogMessage.Kind.COMPILATION_ERRORS -> {
check(message is CompilationErrorsLogMessage) {
"Unexpected compilation errors message type: ${message::class.java.canonicalName}"
}
throw BuildScriptsLoggedError(message.errorMessages.joinToString(prefix = "${message.text}:\n", separator = "\n"))
}
else -> super.processMessage(message)
}
}

View File

@@ -7,7 +7,6 @@ import kotlinx.collections.immutable.PersistentMap
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.coroutines.CoroutineScope
import kotlinx.serialization.Serializable
import org.jetbrains.intellij.build.dependencies.TeamCityHelper
import org.jetbrains.intellij.build.io.DEFAULT_TIMEOUT
import org.jetbrains.intellij.build.productRunner.IntellijProductRunner
import org.jetbrains.intellij.build.telemetry.use
@@ -185,14 +184,9 @@ suspend inline fun <T> BuildContext.executeStep(
throw e
}
catch (e: Throwable) {
if (TeamCityHelper.isUnderTeamCity) {
span.recordException(e)
options.buildStepListener.onFailure(stepId = stepId, failure = e, messages = messages)
null
}
else {
throw e
}
span.recordException(e)
options.buildStepListener.onFailure(stepId = stepId, failure = e, messages = messages)
null
}
finally {
options.buildStepListener.onCompletion(stepId, messages)

View File

@@ -187,6 +187,9 @@ private class DebugLogger {
}
}
/**
* Used unconditionally by both [TeamCityBuildMessageLogger] and [ConsoleBuildMessageLogger]
*/
private class PrintWriterBuildMessageLogger(
private val output: StringBuilder,
private val disposer: Consumer<PrintWriterBuildMessageLogger>,