11package main
22
33import (
4- "encoding/json"
54 "fmt"
65)
76
@@ -11,24 +10,20 @@ type BuildResult struct {
1110}
1211
1312func buildClosure (spec JobSpec , drvPath string , builder string ) (string , error ) {
14- var buildOut []byte
1513 var err error
14+ var results []BuildResult
1615
1716 // Build the closure locally or on the remote builder
1817 if builder != "localhost" {
19- buildOut , err = runJSON ("nix" , "build" , "--no-link" , "--json" , "--store" , "ssh-ng://" + builder , drvPath + "^*" )
18+ results , err = runJSON [[] BuildResult ] ("nix" , "build" , "--no-link" , "--json" , "--store" , "ssh-ng://" + builder , drvPath + "^*" )
2019 } else {
21- buildOut , err = runJSON ("nix" , "build" , "--no-link" , "--json" , drvPath + "^*" )
20+ results , err = runJSON [[] BuildResult ] ("nix" , "build" , "--no-link" , "--json" , drvPath + "^*" )
2221 }
2322 if err != nil {
2423 return "" , fmt .Errorf ("failed to build %s on %s: %w" , spec .Output , builder , err )
2524 }
2625
2726 // Parse the output path
28- var results []BuildResult
29- if err := json .Unmarshal (buildOut , & results ); err != nil {
30- return "" , fmt .Errorf ("invalid build JSON for %s: %w\n Raw: %s" , spec .Output , err , string (buildOut ))
31- }
3227 if len (results ) == 0 {
3328 return "" , fmt .Errorf ("build result for %s was empty" , spec .Output )
3429 }
@@ -83,14 +78,13 @@ func instantiateDrvPath(flake string, name string, builder string) (string, erro
8378 drvExpr := expr + ".drvPath"
8479
8580 // Evaluate the .drv path locally
86- data , err := runJSON ("nix" , "eval" , "--json" , drvExpr )
81+ drvPath , err := runJSON [ string ] ("nix" , "eval" , "--json" , drvExpr )
8782 if err != nil {
8883 return "" , fmt .Errorf ("failed to evaluate drvPath for job '%s': %w" , name , err )
8984 }
9085
91- var drvPath string
92- if err := json .Unmarshal (data , & drvPath ); err != nil {
93- return "" , fmt .Errorf ("failed to parse JSON for job '%s': %w" , name , err )
86+ if err != nil {
87+ return "" , fmt .Errorf ("failed to evaluate drvPath for job '%s': %w" , name , err )
9488 }
9589
9690 // Copy the .drv to the remote builder (if needed)
0 commit comments