Travis CI build中development version中最近的my Haskell package报告错误
MissingH必须匹配> = 1.3.0.1,但是堆栈配置没有指定的版本(最新匹配的版本是1.4.0.1)
when building for GHC 8.6.1,即使我有
MissingH >=1.3.0.1
in my build-depends
。
我不明白这个错误:这似乎是矛盾的。我对MissingH没有上限,为什么会出错并且不使用最新的?
答案 0 :(得分:1)
您需要将MissingH
添加到stack.yaml
。
extra-deps:
- 'MissingH-1.4.0.1'
您软件包的*.cabal
文件说明了哪些版本的依赖项与您的软件包兼容。这是一个宽松的规范,并非所有组合都可能真正起作用(因为它们在传递依赖项上可能有冲突的界限,或者未测试的特定版本会发生无法预料的破坏)。
相反,stack.yaml
描述了特定的软件包快照,它们固定在特定的版本上。确切地说,“我的软件包可用于这些版本”。当然,维护每个依赖项的版本很繁琐,并且对于Stackage团队来说,维护一个“解析器”是一套可以协同工作的精选软件包版本,可用于一次指定许多软件包的版本。 ,通过适当设置resolver:
的{{1}}字段。解析程序仅列出Hackage上软件包的子集,因此当您的依赖项不在其中时,您需要将其作为stack.yaml
添加到stack.yaml
中。
更新:在讨论之后,需要有关配置travis的更多详细信息。
首先,我目前对Haskell项目CI的首选解决方案是不打扰堆栈,而使用https://github.com/haskell-CI/haskell-ci来使用cabal-install生成travis脚本。
现在寻求一个不太激进的解决方案。
当前travis script仅改变了extra-dep
选项,但据我所知,没有命令行选项可以添加额外的dep。看来--resolver
文件是唯一的方法。此外,我们只想将stack.yaml
指定为最新夜间的额外服务,因为LTS已经包含了它。
因此,我建议以下内容:
仅为夜间解析器创建一个单独的MissingH
,由于您已经拥有一个stack.yaml
stack-nightly.yaml
设置为每天晚上解析器指向packages:
- .
extra-deps:
- 'MissingH-1.4.0.1'
的环境变量,
stack-nightly.yaml
否则,您可以使用env:
...
- $RESOLVER=nightly STACK_YAML=stack-nightly.yaml
# Not sure of the syntax.
命令行选项。