Nix: Haskell paketi kurarken ünite atlama testleri


9

Sınırlı kaynaklara sahip paylaşılan bir ana bilgisayara paketleri evime (ikili paketler olmadan) yüklemek için Nix kullanıyorum. Git-ek'i kurmaya çalışıyorum. Bağımlılıklarından biri olan haskell-lensi oluştururken, birim testleri o kadar çok bellek tüketir ki öldürülür ve kurulum başarısız olur.

Paketi kurmak için birim testlerini atlamanın bir yolu var mı? Cabal üreticisine baktım haskell-packages.nixve bana enableCheckPhaseyanlış olarak ayarlayarak testleri devre dışı bırakabileceğiniz anlaşılıyor . Aşağıdakileri denedim ~/.nixpkgs/config.nix, ancak testler hala çalışıyor:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                self.lens = self.disableTest self.lens;
            };
        };
    };
}

Yanıtlar:


2

Lens paketlerinden testi kaldırmak için disableTestbulundu haskell-package.nix. Tam olarak neden ihtiyaçlarınızı karşılamadığını söylemek için bazı testler yapmak zorunda kalacağım.

Ben genel geçersiz kılma engelli test var cabalpaketi config.nixiçin cabalNoTest. Bu, cabaltestin kapatılmasıyla geri kalan haskell paketlerinin kullandığı paketi geçersiz kılar .

Normalde böyle yazıyorum:

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}

12

nixpkgskabul edilen cevabın yayınlanmasından bu yana yeniden düzenlenmiştir ve testleri devre dışı bırakmak için yeni bir işlev vardır. Artık herhangi bir Haskell paketini pkgs.haskell.lib.dontChecktestleri devre dışı bırakma işleviyle sarıyorsunuz . İşte shared-memoryOS X üzerine inşa ederken bağımlılık için testleri devre dışı bırakmak zorunda kaldığım Haskell projelerimden birinden Nix ifadesi :

{ pkgs ? import <nixpkgs> {}, compiler ? "ghc7103" }:
pkgs.haskell.packages.${compiler}.callPackage ./my-project.nix
    {   shared-memory =
            let shared-memory = pkgs.haskell.packages.${compiler}.shared-memory;
            in  if pkgs.stdenv.isDarwin
                then pkgs.haskell.lib.dontCheck shared-memory
                else shared-memory;
    }

nix-build --disable-check-phaseTürev / çıkış karmasını değiştirmeden testi (etkileşimli kullanım perspektifinden gibi ) seçici olarak devre dışı bırakmanın bir yolu var mı ?
CMCDragonkai

@CMCDragonkai: Karma değiştirmeden testleri devre dışı bırakamazsınız (deterministik ikili çıktıya sahip sabit çıktı türevleri hariç). Karma değiştirme konusunda iyi olsanız bile, bildiğim komut satırından bunu yapmanın ergonomik bir yolu yok
Gabriel Gonzalez

3

Endişenizi farklı bir açıdan ele alan alternatif bir cevap, paketlerinizi daha güçlü bir makinede test ederek oluşturmaktır. Sonra gerektiğinde kapatmayı uzak ana bilgisayara kopyalayın.

Aynı mimari üzerindeyseniz ve söz konusu yazılım iki makinede farklı olan herhangi bir donanıma sıkıca bağlı değilse, bu iyi çalışır.

Paketleri nix kılavuzundaki makineler arasında nasıl paylaşacağınız hakkında bilgi edinin .

Bu, nix'in paket yönetimine yaklaşımını sağlayan güzel bir özelliktir. Yerel makinem için bol miktarda yazılım oluşturmak için daha güçlü uzak makineler kullanarak bu özelliği tersine sık sık kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.