suspend fun execute()

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)
        }