package nixbuild import ( "context" "errors" "io" "iter" ) // Build builds all entries yielded by installables. func Build(ctx context.Context, installables iter.Seq[string]) error { c, cancel := context.WithCancel(ctx) defer cancel() cmd := Nix(c, CommandBuild, FlagKeepGoing, FlagNoLink, FlagStdin) if Stdout != nil { cmd.Stdout = Stdout cmd.Args = append(cmd.Args, FlagPrintBuildLogs) } else { cmd.Args = append(cmd.Args, FlagQuiet) } if Stderr != nil { cmd.Stderr = Stderr cmd.Args = append(cmd.Args, FlagVerbose) } ir, iw := io.Pipe() cmd.Stdin = ir if err := cmd.Start(); err != nil { return err } if _, err := WriteStdin(iw, installables); err != nil { return errors.Join(err, cmd.Wait()) } if err := iw.Close(); err != nil { return errors.Join(err, cmd.Wait()) } return cmd.Wait() }