goPackages: Split into multiple derivations

This should reduce the closure size for end users who only need go
binaries as well as reduce the size of closures hydra builders consume.

Changed files
+44 -39
nixos
modules
services
misc
monitoring
security
pkgs
development
go-modules
generic
top-level
+1 -1
nixos/modules/services/misc/confd.nix
···
package = mkOption {
description = "Confd package to use.";
-
default = pkgs.goPackages.confd;
type = types.package;
};
};
···
package = mkOption {
description = "Confd package to use.";
+
default = pkgs.confd;
type = types.package;
};
};
+3 -3
nixos/modules/services/monitoring/grafana.nix
···
staticRootPath = mkOption {
description = "Root path for static assets.";
-
default = "${cfg.package}/share/go/src/github.com/grafana/grafana/public";
type = types.str;
};
package = mkOption {
description = "Package to use.";
-
default = pkgs.goPackages.grafana;
type = types.package;
};
···
wantedBy = ["multi-user.target"];
after = ["networking.target"];
serviceConfig = {
-
ExecStart = "${cfg.package}/bin/grafana --config ${cfgFile} web";
WorkingDirectory = cfg.dataDir;
User = "grafana";
};
···
staticRootPath = mkOption {
description = "Root path for static assets.";
+
default = "${cfg.package.out}/share/go/src/github.com/grafana/grafana/public";
type = types.str;
};
package = mkOption {
description = "Package to use.";
+
default = pkgs.grafana-backend;
type = types.package;
};
···
wantedBy = ["multi-user.target"];
after = ["networking.target"];
serviceConfig = {
+
ExecStart = "${cfg.package-backend}/bin/grafana --config ${cfgFile} web";
WorkingDirectory = cfg.dataDir;
User = "grafana";
};
+1 -1
nixos/modules/services/security/hologram.nix
···
wantedBy = [ "multi-user.target" ];
serviceConfig = {
-
ExecStart = "${pkgs.goPackages.hologram}/bin/hologram-server --debug --conf ${cfgFile}";
};
};
};
···
wantedBy = [ "multi-user.target" ];
serviceConfig = {
+
ExecStart = "${pkgs.hologram}/bin/hologram-server --debug --conf ${cfgFile}";
};
};
};
+13 -12
pkgs/development/go-modules/generic/default.nix
···
runHook preInstall
mkdir -p $out
-
if [ -z "$dontInstallSrc" ]; then
-
pushd "$NIX_BUILD_TOP/go"
-
while read f; do
-
echo "$f" | grep -q '^./\(src\|pkg/[^/]*\)/${goPackagePath}' || continue
-
mkdir -p "$(dirname "$out/share/go/$f")"
-
cp "$NIX_BUILD_TOP/go/$f" "$out/share/go/$f"
-
done < <(find . -type f)
-
popd
-
fi
-
dir="$NIX_BUILD_TOP/go/bin"
-
[ -e "$dir" ] && cp -r $dir $out
runHook postInstall
'';
···
cat $file ${removeExpr removeReferences} > $file.tmp
mv $file.tmp $file
chmod +x $file
-
done < <(find $out/bin -type f 2>/dev/null)
'';
disallowedReferences = lib.optional (!allowGoReference) go
···
passthru = passthru // lib.optionalAttrs (goPackageAliases != []) { inherit goPackageAliases; };
enableParallelBuilding = enableParallelBuilding;
meta = {
# Add default meta information
···
runHook preInstall
mkdir -p $out
+
pushd "$NIX_BUILD_TOP/go"
+
while read f; do
+
echo "$f" | grep -q '^./\(src\|pkg/[^/]*\)/${goPackagePath}' || continue
+
mkdir -p "$(dirname "$out/share/go/$f")"
+
cp "$NIX_BUILD_TOP/go/$f" "$out/share/go/$f"
+
done < <(find . -type f)
+
popd
+
mkdir $bin
dir="$NIX_BUILD_TOP/go/bin"
+
[ -e "$dir" ] && cp -r $dir $bin
runHook postInstall
'';
···
cat $file ${removeExpr removeReferences} > $file.tmp
mv $file.tmp $file
chmod +x $file
+
done < <(find $bin/bin -type f 2>/dev/null)
'';
disallowedReferences = lib.optional (!allowGoReference) go
···
passthru = passthru // lib.optionalAttrs (goPackageAliases != []) { inherit goPackageAliases; };
enableParallelBuilding = enableParallelBuilding;
+
+
# I prefer to call this dev but propagatedBuildInputs expects $out to exist
+
outputs = [ "out" "bin" ];
meta = {
# Add default meta information
+18 -13
pkgs/top-level/all-packages.nix
···
clib = callPackage ../tools/package-management/clib { };
-
consul = goPackages.consul;
consul-ui = callPackage ../servers/consul/ui.nix { };
-
consul-alerts = goPackages.consul-alerts;
-
consul-template = goPackages.consul-template;
corosync = callPackage ../servers/corosync { };
···
mcrypt = callPackage ../tools/misc/mcrypt { };
-
mongodb-tools = goPackages.mongo-tools;
mstflint = callPackage ../tools/misc/mstflint { };
···
gptfdisk = callPackage ../tools/system/gptfdisk { };
-
grafana = callPackage ../development/tools/misc/grafana { };
grafx2 = callPackage ../applications/graphics/grafx2 {};
···
lshw = callPackage ../tools/system/lshw { };
lxc = callPackage ../os-specific/linux/lxc { };
-
lxd = goPackages.lxd;
lzip = callPackage ../tools/compression/lzip { };
···
go-repo-root = callPackage ../development/tools/misc/go-repo-root { };
-
gox = goPackages.gox;
gprolog = callPackage ../development/compilers/gprolog { };
···
go = go_1_4;
buildGoPackage = import ../development/go-modules/generic {
go = go_1_4;
-
govers = go14Packages.govers;
inherit parallel lib;
};
overrides = (config.goPackageOverrides or (p: {})) pkgs;
···
go = go_1_5;
buildGoPackage = import ../development/go-modules/generic {
go = go_1_5;
-
govers = go15Packages.govers;
inherit parallel lib;
};
overrides = (config.goPackageOverrides or (p: {})) pkgs;
···
dovecot_pigeonhole = callPackage ../servers/mail/dovecot-pigeonhole { };
-
etcd = goPackages.etcd;
ejabberd = callPackage ../servers/xmpp/ejabberd {
erlang = erlangR16;
···
v8 = v8_3_24_10;
};
-
etcdctl = goPackages.etcd;
exim = callPackage ../servers/mail/exim { };
···
gotags = callPackage ../development/tools/gotags { };
-
golint = goPackages.lint;
godep = callPackage ../development/tools/godep { };
···
chessdb = callPackage ../games/chessdb { };
construoBase = lowPrio (callPackage ../games/construo {
mesa = null;
freeglut = null;
···
camlp5 = ocamlPackages.camlp5_strict;
};
isabelle = import ../applications/science/logic/isabelle {
inherit (pkgs) stdenv fetchurl nettools perl polyml;
inherit (pkgs.emacs24Packages) proofgeneral;
···
utf8proc = callPackage ../development/libraries/utf8proc { };
-
vault = goPackages.vault;
vbam = callPackage ../misc/emulators/vbam {
inherit (xlibs) libpthreadstubs;
···
clib = callPackage ../tools/package-management/clib { };
+
consul = goPackages.consul.bin // { outputs = [ "bin" ]; };
consul-ui = callPackage ../servers/consul/ui.nix { };
+
consul-alerts = goPackages.consul-alerts.bin // { outputs = [ "bin" ]; };
+
consul-template = goPackages.consul-template.bin // { outputs = [ "bin" ]; };
corosync = callPackage ../servers/corosync { };
···
mcrypt = callPackage ../tools/misc/mcrypt { };
+
mongodb-tools = goPackages.mongo-tools.bin // { outputs = [ "bin" ]; };
mstflint = callPackage ../tools/misc/mstflint { };
···
gptfdisk = callPackage ../tools/system/gptfdisk { };
+
grafana-frontend = callPackage ../development/tools/misc/grafana { };
+
grafana-backend = pkgs.goPackages.grafana.bin // { outputs = [ "bin" ]; };
grafx2 = callPackage ../applications/graphics/grafx2 {};
···
lshw = callPackage ../tools/system/lshw { };
lxc = callPackage ../os-specific/linux/lxc { };
+
lxd = goPackages.lxd.bin // { outputs = [ "bin" ]; };
lzip = callPackage ../tools/compression/lzip { };
···
go-repo-root = callPackage ../development/tools/misc/go-repo-root { };
+
gox = goPackages.gox.bin // { outputs = [ "bin" ]; };
gprolog = callPackage ../development/compilers/gprolog { };
···
go = go_1_4;
buildGoPackage = import ../development/go-modules/generic {
go = go_1_4;
+
govers = go14Packages.govers.bin;
inherit parallel lib;
};
overrides = (config.goPackageOverrides or (p: {})) pkgs;
···
go = go_1_5;
buildGoPackage = import ../development/go-modules/generic {
go = go_1_5;
+
govers = go15Packages.govers.bin;
inherit parallel lib;
};
overrides = (config.goPackageOverrides or (p: {})) pkgs;
···
dovecot_pigeonhole = callPackage ../servers/mail/dovecot-pigeonhole { };
+
etcd = goPackages.etcd.bin // { outputs = [ "bin" ]; };
ejabberd = callPackage ../servers/xmpp/ejabberd {
erlang = erlangR16;
···
v8 = v8_3_24_10;
};
+
etcdctl = etcd;
exim = callPackage ../servers/mail/exim { };
···
gotags = callPackage ../development/tools/gotags { };
+
golint = goPackages.lint.bin // { outputs = [ "bin" ]; };
godep = callPackage ../development/tools/godep { };
···
chessdb = callPackage ../games/chessdb { };
+
confd = pkgs.goPackages.conf.bin // { outputs = [ "bin" ]; };
+
construoBase = lowPrio (callPackage ../games/construo {
mesa = null;
freeglut = null;
···
camlp5 = ocamlPackages.camlp5_strict;
};
+
hologram = pkgs.goPackages.bin // { outputs = [ "bin" ]; };
+
isabelle = import ../applications/science/logic/isabelle {
inherit (pkgs) stdenv fetchurl nettools perl polyml;
inherit (pkgs.emacs24Packages) proofgeneral;
···
utf8proc = callPackage ../development/libraries/utf8proc { };
+
vault = goPackages.vault.bin // { outputs = [ "bin" ]; };
vbam = callPackage ../misc/emulators/vbam {
inherit (xlibs) libpthreadstubs;
+8 -9
pkgs/top-level/go-packages.nix
···
preConfigure = ''
# Make the builtin tools available here
-
mkdir -p $out/bin
eval $(go env | grep GOTOOLDIR)
find $GOTOOLDIR -type f | while read x; do
-
ln -sv "$x" "$out/bin"
done
-
export GOTOOLDIR=$out/bin
'';
excludedPackages = "\\("
···
};
consul = buildFromGitHub {
-
rev = "a6317f2fb2ba9d5ae695f7fa703cfb30a1c59af1";
-
date = "2015-07-24";
owner = "hashicorp";
repo = "consul";
-
sha256 = "0jixpl9yksasqx9rkidx8qmqc59m34kiibsqfsv56g87wzyp89rs";
buildInputs = [
circbuf armon.go-metrics go-radix gomdb bolt consul-migrate go-checkpoint
···
repo = "lint";
sha256 = "1bj7zv534hyh87bp2vsbhp94qijc5nixb06li1dzfz9n0wcmlqw9";
excludedPackages = "testdata";
-
dontInstallSrc = true;
buildInputs = [ tools ];
};
···
# Mongodb incorrectly names all of their binaries main
# Let's work around this with our own installer
installPhase = ''
-
mkdir -p $out/bin
while read b; do
rm -f go/bin/main
go install $goPackagePath/$b/main
-
cp go/bin/main $out/bin/$b
done < <(find go/src/$goPackagePath -name main | xargs dirname | xargs basename -a)
'';
};
···
preConfigure = ''
# Make the builtin tools available here
+
mkdir -p $bin/bin
eval $(go env | grep GOTOOLDIR)
find $GOTOOLDIR -type f | while read x; do
+
ln -sv "$x" "$binbin"
done
+
export GOTOOLDIR=$bin/bin
'';
excludedPackages = "\\("
···
};
consul = buildFromGitHub {
+
rev = "4adc0b5c660919e3f21c9a60f567fd872b9e3d1e";
+
date = "2015-08-27";
owner = "hashicorp";
repo = "consul";
+
sha256 = "1h4hbyr2c8yfmn5ijga5zx470mdplg231kbxbqfpvswrk69q89j3";
buildInputs = [
circbuf armon.go-metrics go-radix gomdb bolt consul-migrate go-checkpoint
···
repo = "lint";
sha256 = "1bj7zv534hyh87bp2vsbhp94qijc5nixb06li1dzfz9n0wcmlqw9";
excludedPackages = "testdata";
buildInputs = [ tools ];
};
···
# Mongodb incorrectly names all of their binaries main
# Let's work around this with our own installer
installPhase = ''
+
mkdir -p $bin/bin
while read b; do
rm -f go/bin/main
go install $goPackagePath/$b/main
+
cp go/bin/main $bin/bin/$b
done < <(find go/src/$goPackagePath -name main | xargs dirname | xargs basename -a)
'';
};