如何指定解析器(和 GHC)Travis 应该用来测试我的 Haskell 包?

How do specify the resolver (and GHC) Travis should use to test my Haskell package?

我正在尝试测试 my Haskell package against several Stackage resolvers on Travis,但我的 --resolver 环境变量被忽略了。

例如,如果我指定

env:
- ARGS="--resolver lts-4.0"

在我的 .travis.yml, I still still seem to be using a different resolver (the one in my stack.yaml?) 和 GHC 中,如

等行所示
Installing library in
/home/travis/build/orome/crypto-enigma-hs/.stack-work/install/x86_64-linux/lts-9.1/8.0.2/lib/x86_64-linux-ghc-8.0.2/crypto-enigma-0.0.2.9-6Cs7XSzJkwSDxsEMnLKb0X

在相应的build log中,表示使用了不同的解析器(9.1)和相应的GHC(8.0.2)。

我的构建(stack.yaml.travis.yml 等)应该如何配置以确保我指定的解析器(和相应的 GHC)用于执行我的 Travis 构建和测试?

使用env,您只需定义环境变量。您仍然必须使用它们。 stack 本身不遵守 ARGS 变量,因此请在您的脚本中使用它,例如

install:
# Build dependencies
- stack $ARGS --no-terminal --install-ghc test --only-dependencies

script:
# Build the package, its tests, and its docs and run the tests
- stack $ARGS --no-terminal --install-ghc test --haddock --no-haddock-deps

您可能应该使用更好的名称,例如 RESOLVER:

env:
- RESOLVER=lts-4.0
- RESOLVER=lts-6.0
- RESOLVER=lts-8.0

install:
# Build dependencies
- stack --resolver $RESOLVER --no-terminal --install-ghc test --only-dependencies

script:
# Build the package, its tests, and its docs and run the tests
- stack --resolver $RESOLVER --no-terminal --install-ghc test --haddock --no-haddock-deps

另外请记住,使用多个 stack.yml 来保存特定 LTS 变体的配置通常是更好的主意。

有关详细信息,请参阅 stack's Travis documentation and Travis' environment variables documentation