oro*_*ome 4 haskell cabal travis-ci stackage
我的 Haskell 包的开发版本的最新Travis CI 构建报告了错误
MissingH 必须匹配 >=1.3.0.1,但堆栈配置没有指定版本(最新匹配版本为 1.4.0.1)
在构建 GHC 8.6.1 时,即使我有
MissingH >=1.3.0.1
Run Code Online (Sandbox Code Playgroud)
在我的 build-depends。
我不明白这个错误:这似乎是矛盾的。我对MissingH没有上限,那为什么会出错并且没有使用最新的呢?
您需要添加MissingH到stack.yaml.
extra-deps:
- 'MissingH-1.4.0.1'
Run Code Online (Sandbox Code Playgroud)
您的包的*.cabal文件说明了哪些版本的依赖项与您的包兼容。这是一个松散的规范,并非所有组合实际上都可以工作(因为它们可能在传递依赖项上有冲突的界限,或者您尚未测试的特定版本存在一些不可预见的破坏)。
相反,描述了固定到特定版本的包的stack.yaml特定快照。这确切地说“我的包已知可以与这些版本一起使用”。当然,维护每个依赖项的版本是很乏味的,为此 Stackage 团队维护了一个“解析器”,这是一组已知可以协同工作的精选包版本,您可以使用它同时指定许多包的版本,通过适当设置resolver:的字段stack.yaml。解析器仅列出 Hackage 上的软件包的子集,因此当您的某个依赖项不在那里时,您需要将其stack.yaml作为extra-dep.
更新:在讨论之后,需要一些有关配置 travis 的更多详细信息。
首先,我目前首选的 Haskell 项目 CI 解决方案是不使用堆栈,而是使用https://github.com/haskell-CI/haskell-ci,它使用 cabal-install 生成 travis 脚本。
现在寻求一个不太激进的解决方案。
目前travis 脚本仅改变--resolver选项,但据我所知,没有命令行选项来添加额外的 dep。看来stack.yaml文件是唯一的方法。此外,我们只想指定MissingH为最新夜间新闻的额外深度,因为 LTS 已经包含它。
因此我建议如下:
仅为夜间解析器创建一个单独的stack.yaml解析器,将其命名为其他名称,因为您已经有一个解析器,例如stack-nightly.yaml
packages:
- .
extra-deps:
- 'MissingH-1.4.0.1'
Run Code Online (Sandbox Code Playgroud)设置一个环境变量来指向stack-nightly.yaml解析器是否为夜间解析器,也许:
env:
...
- $RESOLVER=nightly STACK_YAML=stack-nightly.yaml
# Not sure of the syntax.
Run Code Online (Sandbox Code Playgroud)
否则,您可以使用--stack-yaml命令行选项。
| 归档时间: |
|
| 查看次数: |
5676 次 |
| 最近记录: |