in server/src/main/kotlin/com/jetbrains/teamcity/plugins/unrealengine/server/build/status/ugs/UgsCommitStatusPublisher.kt [110:157]
suspend fun execute(
event: CommitStatusPublisher.Event,
revision: BuildRevision,
build: SBuild,
parameters: Map<String, String>,
) {
val state =
when (event) {
CommitStatusPublisher.Event.STARTED -> BadgeState.Starting
CommitStatusPublisher.Event.FINISHED -> if (build.buildStatus.isSuccessful) BadgeState.Success else BadgeState.Failure
CommitStatusPublisher.Event.INTERRUPTED -> BadgeState.Skipped
CommitStatusPublisher.Event.FAILURE_DETECTED -> BadgeState.Failure
CommitStatusPublisher.Event.MARKED_AS_SUCCESSFUL -> BadgeState.Success
else -> raise("Received unsupported event type: $event")
}
ensure(
revision.root.vcsName == SwarmClientManager.PERFORCE_VCS_NAME,
"Attempt to publish UGS badge for a non-Perforce VCS root. Skipping publication since UGS is specific to Perforce",
)
val change =
ensureNotNull(
revision.getPerforceChangelistNumber(),
"Unable to parse Perforce changelist number from ${revision.revision}",
)
val (metadataServerUrl, badgeName, project) =
parametersParser.parse(parameters).getOrElse { errors ->
raise(
"""
Unable to parse parameters from the build feature.
${errors.joinToString(separator = ", ") { it.propertyName + ": " + it.message }}
""".trimIndent(),
)
}
val metadata =
UgsBuildMetadata(
change = change,
badgeName = badgeName.value,
badgeState = state,
url = links.getViewResultsUrl(build),
projectDirectory = PerforceDepotPath(project.value),
)
metadataServerClient.postBuildMetadata(metadataServerUrl, metadata)
}