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