Reusing go libs in deis build

This commit is contained in:
Kamil Chmielewski
2016-04-27 08:45:04 +02:00
parent 5c2628a704
commit 81f3092e11
5 changed files with 66 additions and 43 deletions

View File

@@ -1,4 +1,4 @@
{ go, govers, parallel, lib }:
{ go, govers, parallel, lib, fetchgit }:
{ name, buildInputs ? [], nativeBuildInputs ? [], passthru ? {}, preFixup ? ""
@@ -17,6 +17,9 @@
# Extra sources to include in the gopath
, extraSrcs ? [ ]
# go2nix dependency file
, goDeps ? null
, dontRenameImports ? false
# Do not enable this without good reason
@@ -27,6 +30,8 @@
if disabled then throw "${name} not supported for go ${go.meta.branch}" else
with builtins;
let
args = lib.filterAttrs (name: _: name != "extraSrcs") args';
@@ -35,6 +40,27 @@ let
removeExpr = refs: lib.flip lib.concatMapStrings refs (ref: ''
| sed "s,${ref},$(echo "${ref}" | sed "s,$NIX_STORE/[^-]*,$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee,"),g" \
'');
dep2src = goDep:
{
inherit (goDep) goPackagePath;
src = if goDep.fetch.type == "git" then
fetchgit {
inherit (goDep.fetch) url rev sha256;
}
else {};
};
importGodeps = { depsFile, filterPackages ? [] }:
let
deps = lib.importJSON depsFile;
external = filter (d: d ? include) deps;
direct = filter (d: d ? goPackagePath && (length filterPackages == 0 || elem d.goPackagePath filterPackages)) deps;
in
concatLists (map importGodeps (map (d: { depsFile = ./. + d.include; filterPackages = d.packages; }) external)) ++ (map dep2src direct);
goPath = if goDeps != null then importGodeps { depsFile = goDeps; } ++ extraSrcs
else extraSrcs;
in
go.stdenv.mkDerivation (
@@ -53,13 +79,13 @@ go.stdenv.mkDerivation (
mkdir -p "go/src/$(dirname "$goPackagePath")"
mv "$sourceRoot" "go/src/$goPackagePath"
'' + lib.flip lib.concatMapStrings extraSrcs ({ src, goPackagePath }: ''
mkdir extraSrc
(cd extraSrc; unpackFile "${src}")
'' + lib.flip lib.concatMapStrings goPath ({ src, goPackagePath }: ''
mkdir goPath
(cd goPath; unpackFile "${src}")
mkdir -p "go/src/$(dirname "${goPackagePath}")"
chmod -R u+w extraSrc/*
mv extraSrc/* "go/src/${goPackagePath}"
rmdir extraSrc
chmod -R u+w goPath/*
mv goPath/* "go/src/${goPackagePath}"
rmdir goPath
'') + ''
export GOPATH=$NIX_BUILD_TOP/go:$GOPATH

View File

@@ -25,5 +25,23 @@
"rev": "a83829b6f1293c91addabc89d0571c246397bbf4",
"sha256": "1m4dsmk90sbi17571h6pld44zxz7jc4lrnl4f27dpd1l8g5xvjhh"
}
},
{
"goPackagePath": "github.com/docopt/docopt-go",
"fetch": {
"type": "git",
"url": "https://github.com/docopt/docopt-go",
"rev": "784ddc588536785e7299f7272f39101f7faccc3f",
"sha256": "13x00cnady5znysfwca3x59dl04m8rvnk2yprgyqqpg2y4v0xmbf"
}
},
{
"goPackagePath": "golang.org/x/crypto",
"fetch": {
"type": "git",
"url": "https://go.googlesource.com/crypto",
"rev": "1f22c0103821b9390939b6776727195525381532",
"sha256": "05ahvn9g9cj7797n8ryfxv2g26v3lx1pza9d9pg97iw0rvar9i1h"
}
}
]
]