【问题标题】:Testing multiple Haskell dependency versions with Hydra使用 Hydra 测试多个 Haskell 依赖版本
【发布时间】:2015-02-27 21:42:22
【问题描述】:

我想使用持续集成来测试我的 Haskell 库及其依赖项的不同版本。有没有一种简单的方法可以使用 Hydra (http://nixos.org/hydra) 来实现这一点?

一种解决方案是覆盖感兴趣的依赖项的版本,并为其他依赖项使用 Nixpkgs 版本。但是,我不知道如何覆盖一个 Haskell 包版本,同时确保使用覆盖的包调用所有其他 Haskell 包。

这是我尝试在 release.nix 中覆盖 Haskell 依赖项的简化。引用的 Nix 表达式是使用 cabal2nix 创建的。构建依赖json-assertions,依赖aeson,依赖mtl。由于不使用覆盖的 mtl 调用 aeson,因此表达式指定了 mtl 的两个版本。两个版本的 mtl 导致构建失败。

let pkgs = import <nixpkgs> {};
in {
  example = pkgs.haskellPackages.cabal.mkDerivation (self: {
    pname = "example";
    version = "0.1.0.0";
    isExecutable = true;
    src = ./.;
    buildDepends = [ (pkgs.haskellPackages.ghcWithPackages (self:
                     [ self.cabalInstall_1_18_0_3
                      (self.callPackage (import ./mtl_2_2.nix) {
                         transformers = self.callPackage (import ./transformers_0_4_2_0.nix) {};
                       })
                      (self.callPackage (import ./jsonAssertions_1_0_4.nix) {})
                     ]))
                   ];
  });
}

另一种解决方案是使用公开可用的 Nix 表达式来兼容除 Nixpkgs 中的 Haskell 包集。不过我还没有找到。

是否有任何在线项目使用 Hydra 来针对多个版本的依赖项测试 Haskell 包,我可以将其用作示例?

【问题讨论】:

    标签: haskell nix nix-hydra


    【解决方案1】:

    我发现了如何使用 Nixpkgs 的新 Haskell 基础架构来重写我的示例 release.nix。此表达式覆盖 mtl,以便使用覆盖的版本调用依赖于 mtl 默认版本的所有包。但是,其他版本的不一致会阻止该示例的构建。

    with (import <nixpkgs> {}).pkgs;
    let haskellPackages =
          pkgs.haskell-ng.packages.ghc784.override {
            overrides = self: super: {
              mtl = self.callPackage ./mtl_2_2.nix {};
              transformers = self.callPackage ./transformers_0_4_2_0.nix {};
              json-assertions = self.callPackage ./json-assertions_1_0_4.nix {};
            };
          };
    in {
      example = haskellPackages.mkDerivation {
        pname = "example";
        version = "0.1.0.0";
        isExecutable = true;
        src = ./.;
        buildDepends = with haskellPackages; [ mtl json-assertions ];
        license = pkgs.stdenv.lib.licenses.bsd3;
      };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 2012-03-07
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多