From f373ecec8f49b24c3070ab4f66a680bee06980a5 Mon Sep 17 00:00:00 2001 From: zimbatm Date: Sat, 28 Dec 2019 20:36:42 +0000 Subject: buildGoModule: support impure modules (#76532) When modSha256 is null, disable the nix sandbox instead of using a fixed-output derivation. This requires the nix-daemon to have `sandbox = relaxed` set in their config to work properly. Because the output is (hopefully) deterministic based on the inputs, this should give a reproducible output. This is useful for development outside of nixpkgs where re-generating the modSha256 on each mod.sum changes is cumbersome. Don't use this in nixpkgs! This is why null is not the default value. --- pkgs/development/go-modules/generic/default.nix | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'pkgs/development/go-modules/generic') diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix index b3c583da51e..1bffb71e8f9 100644 --- a/pkgs/development/go-modules/generic/default.nix +++ b/pkgs/development/go-modules/generic/default.nix @@ -14,6 +14,10 @@ , modRoot ? "./" # modSha256 is the sha256 of the vendored dependencies +# +# CAUTION: if `null` is used as a value, the derivation won't be a +# fixed-output derivation but disable the build sandbox instead. Don't use +# this in nixpkgs as Hydra won't build those packages. , modSha256 # We want parallel builds by default @@ -84,10 +88,16 @@ let ''; dontFixup = true; - outputHashMode = "recursive"; - outputHashAlgo = "sha256"; - outputHash = modSha256; - }; in modArgs // overrideModAttrs modArgs); + }; in modArgs // ( + if modSha256 == null then + { __noChroot = true; } + else + { + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = modSha256; + } + ) // overrideModAttrs modArgs); package = go.stdenv.mkDerivation (args // { nativeBuildInputs = [ removeReferencesTo go ] ++ nativeBuildInputs; -- cgit 1.4.1