nixbuild/build.go
Yonah 69c6128ff5
exec: replace global state with interface
This is cleaner, and finally enables writing tests for the nix invoking functions.
2025-07-18 13:40:46 +09:00

30 lines
634 B
Go

package nixbuild
import (
"context"
"iter"
)
// Build builds all entries yielded by installables.
func Build(ctx Context, installables iter.Seq[string]) error {
c, cancel := context.WithCancel(ctx.Unwrap())
defer cancel()
stdout, stderr := ctx.Streams()
cmd := ctx.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)
}
_, err := ctx.WriteStdin(cmd, installables, nil)
return err
}