nixbuild/build.go
Ophestra 5c632a9ad8
derivation: parse nix derivation show
This time it's JSON, and actual intended behaviour.
2025-07-15 01:51:55 +09:00

44 lines
837 B
Go

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()
}