override fun buildStarted()

in agent/src/main/kotlin/org/jetbrains/teamcity/sccache/SCCacheBuildFeature.kt [86:134]


    override fun buildStarted(runningBuild: AgentRunningBuild) {
        val feature = runningBuild.getBuildFeaturesOfType(BuildFeatureSettings.FEATURE_TYPE).firstOrNull()
                ?: return

        val settings = SCCacheBuildFeatureSettings(feature.parameters)

        val logger = runningBuild.buildLogger
        logger.activity("Configuring and starting sccache server", BuildFeatureSettings.FEATURE_TYPE) {
            if (settings.port == -1) settings.port = NetworkUtil.getFreePort(4226)
            val backendConfig = getBackendConfigFromSharedParameters(runningBuild.sharedConfigParameters, settings.backendId)
            settings.backendConfig = backendConfig

            // user may override parameter in build configuration, otherwise use agent one
            val executable = runningBuild.sharedConfigParameters[SCCacheConstants.AGENT_SCCACHE_PATH_PARAMETER]
                    ?: runningBuild.agentConfiguration.configurationParameters[SCCacheConstants.AGENT_SCCACHE_PATH_PARAMETER]
                    ?: findExecutableInPath()
                    ?: "sccache"

            val server = SCCacheServer(settings, executable)

            // stop any running server
            try {
                server.stop(logger, true)
            } catch (e: Exception) {
                LOG.warn("Failed to stop running sccache server before starting our", e)
            }

            if (backendConfig != null) {
                if (!backendConfig.validate(HashMap())) {
                    logger.internalError(feature.type, "Remote backend configuration is incorrect, check build and project feature settings: $backendConfig", null)
                    return@activity
                }
                backendConfig.getSecureValues().forEach {
                    runningBuild.passwordReplacer.addPassword(it)
                }
            }
            try {
                servers[runningBuild.buildId] = server
                server.start(logger, runningBuild)
                logger.message("Server successfully started on port ${settings.port}")
            } catch (e: Exception) {
                logger.error("Failed to start server on port ${settings.port}: " + e.message)
                logger.exception(e)
                return@activity
            }

            runningBuild.addSharedEnvironmentVariable(AgentEnvironment.SCCACHE_SERVER_PORT, settings.port.toString())
        }
    }