如何使用 shake 跟踪 "runtime" 依赖关系?

How to track "runtime" dependencies with shake?

我想扩展我们基于 shake 的构建系统以包括 运行 集成测试,但是 运行 这些测试需要启动一些测试所依赖的 docker 容器,并且作为构建过程的一部分,它可能会或可能不会被重建。

简而言之,我需要跟踪 "live" 个进程,并且 kill/restart 如果它们的基础映像发生变化,则需要跟踪它们。我怎么能用摇晃来实现呢?

我假设我们想要 运行 docker image 并在 image 更改时更改(将其概括为任何名称并不难,但会分散重要部分的注意力).

想象一下,该服务始终 运行ning,永不崩溃,并且完全由 Shake 控制。我们可以写:

"runner" %> \out -> do
     need ["image"]
     cmd_ "docker kill"
     cmd_ "docker start image"
     writeFile' out ""

这里我们有一个生成 runner 的规则,作为副作用取决于 image 和 starts/stops docker。任何使用 运行ner 的测试都应该在开始之前进行 need ["runner"]。如果他们还依赖于图像的内容,他们应该做 need ["runner","image"].

如果图像不受 Shake 的控制,而其他人正在刺激它们,您可能想要 addOracle 定义一个 oracle 来检测当前 运行ning docker 图片,并依赖于 runner.