summary refs log tree commit diff
path: root/pkgs/development/go-modules
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2015-07-29 18:16:56 -0700
committerWilliam A. Kennington III <william@wkennington.com>2015-07-29 18:16:56 -0700
commita4707aed5524e54e54ea41c44607630977364efc (patch)
treecbe66ba52698bd9c5747324817d0dc9a3186abdf /pkgs/development/go-modules
parentc6bb486641a0784b0230fc6e076df2cd40f6e3e1 (diff)
downloadnixlib-a4707aed5524e54e54ea41c44607630977364efc.tar
nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.gz
nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.bz2
nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.lz
nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.xz
nixlib-a4707aed5524e54e54ea41c44607630977364efc.tar.zst
nixlib-a4707aed5524e54e54ea41c44607630977364efc.zip
go: Run builds in parallel
Diffstat (limited to 'pkgs/development/go-modules')
-rw-r--r--pkgs/development/go-modules/generic/default.nix43
1 files changed, 32 insertions, 11 deletions
diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix
index d7b4b1f3b4c1..72b6ad7fdf94 100644
--- a/pkgs/development/go-modules/generic/default.nix
+++ b/pkgs/development/go-modules/generic/default.nix
@@ -66,13 +66,16 @@ go.stdenv.mkDerivation (
 
     runHook renameImports
 
+    PIDS=()
     if [ -n "$subPackages" ] ; then
         for p in $subPackages ; do
-            go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $goPackagePath/$p
+            go install $buildFlags "''${buildFlagsArray[@]}" -p $NIX_BUILD_CORES -v $goPackagePath/$p &
+            PIDS+=("$!")
         done
     else
-        (cd go/src
-        find $goPackagePath -type f -name \*.go -exec dirname {} \; | sort | uniq | while read d; do
+        pushd go/src
+        while read d; do
+          {
             echo "$d" | grep -q "/_" && continue
             [ -n "$excludedPackages" ] && echo "$d" | grep -q "$excludedPackages" && continue
             local OUT
@@ -85,26 +88,43 @@ go.stdenv.mkDerivation (
             if [ -n "$OUT" ]; then
               echo "$OUT" >&2
             fi
-        done)
+          } &
+          PIDS+=("$!")
+        done < <(find $goPackagePath -type f -name \*.go -exec dirname {} \; | sort | uniq)
+        popd
     fi
 
+    # Exit on error from the parallel process
+    for PID in "''${PIDS[@]}"; do
+        wait $PID || exit 1
+    done
+
     runHook postBuild
   '';
 
   checkPhase = args.checkPhase or ''
     runHook preCheck
 
+    PIDS=()
     if [ -n "$subPackages" ] ; then
         for p in $subPackages ; do
-            go test -p $NIX_BUILD_CORES -v $goPackagePath/$p
+            go test -p $NIX_BUILD_CORES -v $goPackagePath/$p &
         done
+        PIDS+=("$!")
     else
-        (cd go/src
-        find $goPackagePath -type f -name \*_test.go -exec dirname {} \; | sort | uniq | while read d; do
+        pushd go/src
+        while read d; do
             go test -p $NIX_BUILD_CORES -v $d
-        done)
+        done < <(find $goPackagePath -type f -name \*_test.go -exec dirname {} \; | sort | uniq)
+        popd
+        PIDS+=("$!")
     fi
 
+    # Exit on error from the parallel process
+    for PID in "''${PIDS[@]}"; do
+        wait $PID || exit 1
+    done
+
     runHook postCheck
   '';
 
@@ -114,12 +134,13 @@ go.stdenv.mkDerivation (
     mkdir -p $out
 
     if [ -z "$dontInstallSrc" ]; then
-        (cd "$NIX_BUILD_TOP/go"
-        find . -type f | while read f; do
+        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)
+        done < <(find . -type f)
+        popd
     fi
 
     dir="$NIX_BUILD_TOP/go/bin"