project/DockerComposeHook.scala (23 lines of code) (raw):

import play.sbt.PlayRunHook import sbt._ import scala.sys.process.Process object DockerComposeHook { def apply(base: File): PlayRunHook = { object DockerComposeHook extends PlayRunHook { var process: Option[Process] = None val up = "docker compose up -d" val down = "docker compose down" override def afterStarted(): Unit = { process = Some( Process(up, base / "local-dev").run ) } override def afterStopped(): Unit = { Process(down, base / "local-dev").! process.foreach(p => p.destroy()) process = None } } DockerComposeHook } }