如何在基于容器的基础架构中构建 GHC 7.10.2?

How do I build for GHC 7.10.2 in the container-based infrastructure?

我有一个项目需要 GHC 7.10.2,所以要使用 Travis CI 我必须在预安装步骤中自己安装所需版本的 GHC。

我目前正在使用

env:
 - CABALVER=1.22 GHCVER=7.10.2

before_install:
 - |
    travis_retry sudo add-apt-repository -y ppa:hvr/ghc
    travis_retry sudo apt-get update
    travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER
    export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH

在我的 .travis.yml 中;但由于我使用 sudo,所以只能使用 "legacy" 基础设施。

我想利用新的基于容器的基础架构,并尽可能遵循 migration docs,结果是

sudo: false

env:
 - CABALVER=1.22 GHCVER=7.10.2

addons:
  apt:
    sources:
    - hvr-ghc
    packages:
    - cabal-install-$CABALVER
    - ghc-$GHCVER

before_install:
 - |
    export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH

因为在我看来应该是上面的等价物。但这会继续使用 GHC 的默认 (7.4) 版本,这会导致构建失败。

如何在基于容器的基础架构中构建 Haskell 7.10.2?具体来说,我的 .travis.yml 应该有什么?

指南中解释了如何使用 Stack 执行此操作,您可以在以下位置查看完整示例:

https://github.com/commercialhaskell/stack/blob/master/doc/GUIDE.md#travis-with-caching

我怀疑您正在使用 language: haskell。你能试试 language: c.

我的理解是 travis 还没有真正支持 ghc-7.10.x(有未解决的问题)。解决方法是绕过并手动安装(使用 hvr-ghc ppa);因此 language: c 而不是 haskell.

另一个提示。首先删除 env。我很确定它不会在您的 addons 中工作。只需使用 ghc-7.10.2cabal-1.22。现在您的addons应该可以正常工作了。检查您的 travis 日志以确保。

我可以确认堆栈教程(Michael Snoyman 的link)非常好。但它应该可以使用或不使用堆栈。

这里有一个 travis 文件供参考,我在其中尝试将 sudo 的使用量降至最低限度:

https://github.com/PierreR/language-puppet/blob/450ca249e23300351085d24fd58dcf9f429769d5/.travis.yml

如你所见,我仍然使用旧的 travis infra,因为我需要 Ruby2.x 和 C header。

这是一个相同的 travis 文件,但没有使用堆栈(堆栈仅对缓存有用):

https://github.com/bartavelle/language-puppet/blob/master/.travis.yml