You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.3 KiB

package alfred.running
import alfred.BuildId
import alfred.Builds
import alfred.http.Security
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.io.File
import java.nio.file.Paths
import javax.enterprise.context.ApplicationScoped
import javax.inject.Inject
@ApplicationScoped
class ScriptRunner {
@field:Inject
lateinit var builds: Builds
@field:Inject
lateinit var handles: Handles
fun run(buildId: BuildId, rev: String): ProcessInfo {
val config = builds.buildConfig(buildId)
val logFile = builds.createLogFile(buildId)
logger.info("preparing process for build $buildId with config $config")
logger.info("log file: $logFile")
logFile.header(buildId, rev, Paths.get(config.workspace))
val process = processBuilder(config, logFile, rev)
.command(config.script)
.directory(File(config.workspace))
.start()
handles.add(Handle(process.toHandle(), buildId))
process.onExit().whenComplete { _, _ -> logFile.footer() }
val pid = process.pid()
logger.info("pid for build $buildId is: $pid")
return ProcessInfo(pid = pid, logFile = logFile)
}
val logger: Logger = LoggerFactory.getLogger(this::class.java)
}
data class ProcessInfo(
val pid: Long,
val logFile: File
)