问题标签 [shake-build-system]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
shake-build-system - 如何使用抖动跟踪“运行时”依赖项?
我想扩展我们基于抖动的构建系统以包括运行集成测试,但是运行这些测试需要启动一些 docker 容器,这些容器依赖于测试并且可能会或可能不会作为构建过程的一部分进行重建。
简而言之,我需要跟踪“实时”进程,如果它们的底层图像发生变化,则杀死/重新启动它们。我怎么能用摇晃来实现呢?
haskell - 通过电子邮件发送文件的虚假目标?
我想执行一个命令,该命令在项目中获取特定文件(根据需要构建它)并将其发送到外部某处。例如,它可能是上传网页或发送电子邮件的命令。它甚至可能会写入一些额外的文件,例如日志,但这不是调用它的目的。
换句话说,这个动作是通过命名它的来源而不是目标来引起的——要么是因为没有切实的目标,要么它是微不足道的,而这个动作主要是因为它的副作用而需要的。
我看到必须提供一个额外的命令行参数,如下所示:
上面的命令应该等同于以下内容:
可以(并且“应该”)使用shake
构建系统执行此操作吗?
PS正如丹尼尔在回答中建议的那样,我可以扩展shake
的参数解析器。但我不确定这是否是此类案例的最佳实践。它似乎与行为方式有点不一致shake
,将每个命令行参数都视为一个独立的目标。对于操作员来说,这也是一个全新的设计逻辑,对于这样一个卑微的任务来说,开销太大了。
receipt
为每个发送的文件请求一个文件可能更直观box
。例如:
— 则相当于:
不利的一面是,正如我从附近一个问题的官方回答中了解到的那样,我们不能有一个这样的伪目标pizza.send
,它实际上不会导致文件pizza.send
被创建。因此,我再次不确定这是否是正确的方法。
PS 2如果我们可以用自定义代码替换默认的“文件存在”成功验证器,那就更好了。例如,我们可能会打电话给客户并询问他们是否喜欢午餐,而不是验证确实创建了文件pizza.receipt
(否则我们不需要) 。如果我们可以安排,那么我们可以使用“伪文件”目标调用相应的规则pizza.send
。一般来说,构建工件根本不需要驻留在本地文件系统上,只要给出了可以验证和检索它们的代码即可。
shake-build-system - 我可以“强制”并行执行依赖目标吗?
假设我有一个A
依赖于的目标,B
但我可以并行运行。用 Shake 可以吗?当然,这似乎使动作顺序化,这完全有道理,但这是一个“特殊”情况。A
B
need ...
shake-build-system - 在 Shake 中,Rules 的定义顺序重要吗?
如果我有针对目标文件的通用构建规则,*.o
但针对目标文件有更具体的构建规则foo.o
,那么定义顺序是否重要?
shake-build-system - 源文件更改时摇动不重建
我正在使用 Shake 构建 lilypond 文件,然后将其放入网页中。我试图模仿手册中Build.hs
的第一个示例:
预期的行为是“构建 index.html 文件,所有 PDF 都应www/static
从各自的src/lilypond/*.ly
文件生成”。这适用于干净的构建,但编辑源.ly
文件不会触发重建,我不知道为什么。(更新:编辑src/www/index.html
也不会触发重建)
我尝试过的事情:
- 通过诸如
shake-build www/static/muppets.pdf
. 相同的行为。 - 生成一个
--profile
. 这里没有什么让我感到兴奋的。 - 详细输出。不知道在这里寻找什么,所以怀疑 PDF 规则实际上并不取决于
.ly
文件?在输出中看到depends = []
,预计非空。 need [c]
在 PDF 规则中明确。
我觉得这里有一个我错过的基本概念:/
shake-build-system - Shake 是否可以更改源文件?
当运行带有“自动更正”选项的格式化程序和 linting 工具等工具时,a 的输入和输出Rule
可能是同一个文件;例如:
这似乎“正确”工作(如果源文件已编辑并已更改,则规则将重新运行need
),但我们不确定这是一个愉快的巧合还是shake
按设计工作 - 特别是当我们开始考虑缓存结果时shakeShare
或者在未来的Cloud Shake。这是处理此类规则的最佳方法,还是有更好的方法?
shake-build-system - 摇一摇:命令失败后自动删除文件
使用Shake创建一个 mp3(这只是一个学习示例),我使用 lame,然后使用 id3v2 对其进行标记。
如果 lame 成功,但 id3v2 失败,那么我只剩下 mp3 文件了;但当然这是“错误的”。如果产生命令错误,我正在寻找一个自动删除目标文件的选项,但我找不到任何东西。我可以通过检查退出代码并使用removeFiles手动执行此操作,或者通过在临时目录中构建并作为最后一步移动;但这似乎是一个足够普遍的要求(make 默认情况下会这样做),所以我想知道是否有我没有看到的功能或简单技术。
shake-build-system - 摇一摇:继承标准错误
使用Shake,我正在调用cdparanoia。 cdparanoia
当 stderr 连接到终端时,输出一个有用的进度表(包括显示问题的图形);但并非如此。强制一些进度输出,--stderr-progress
但它没有那么有用,并且需要大量工作来解释。
我想运行 cdparanoia 命令,其 stderr 直接继承,(或以其他方式连接到/dev/tty
)。我曾尝试使用FileStderr
设置为 的选项/dev/tty
,但这无济于事 - 我猜shake
它仍在吸入 stderr,然后将其传递给 /dev/tty。
有没有办法说服shake运行一个真正继承其stderr的命令?或者我应该为此使用 System.Process (或类似的)?
干杯,
haskell - actionFinally 没有运行在处理程序内部调用的 cmd
我有以下代码片段:
无论操作是否成功,它都应该杀死容器。但是我注意到当操作失败时容器仍然保持启动并运行,这很烦人。我究竟做错了什么?
haskell - Haskell Shake build:如何使用shakeShare 和/或shakeCloud 设置共享缓存文件夹?
我知道这是 GHC 的 Hadrian 构建系统正在开发的一项新功能,因此工作流程可能是先进的、奇怪的特定的或仍在不断发展的。到目前为止,我阅读了这些:
听起来它应该适用于我的用例:一种用于生物信息学的特定领域语言,它将极大地受益于缓存大型基因组之间的比较。我很乐意从一个基本的最小示例或在哪里查看的描述开始工作。但是我也包含了关于我的程序的更多细节,以防它们让它更容易......
快捷解释器构建了许多工件,其名称源自其输入的哈希(有点像 Nix),理论上它们应该可以跨机器甚至操作系统移植。一个小程序运行可能会生成这样的文件+符号链接:
我尝试添加shakeShare = Just "sharedir"
到我的 Shake 选项中。当我运行构建,删除所有工件并重新运行时,它找不到缓存文件:
这是意料之中的,但现在我该如何解决呢?哈希值应该是稳定的,因为所有符号链接都相对于顶级 tmpdir(~/.shortcut
此处)。并且 Shake 应该知道他们每个人,因为我一定要打电话trackWrite
。
我是否需要在构建时使用 、 和/或 oracle 将所有文件显式添加到缓存中newCache
,newCacheIO
或者我是否缺少更简单的东西?
理想情况下,我将有一个共享目录来缓存演示服务器上完成的所有内容,并让用户可以选择将自己的实例连接到它,就像 Nix 二进制缓存一样。