nixbuild/build.go
Ophestra 1c968c1e36
build: wrap nix build
These things currently require manual testing unfortunately since writing a nix stub would take a long time.
2025-07-14 22:10:48 +09:00

52 lines
953 B
Go

package nixbuild
import (
"context"
"iter"
"strings"
)
// 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)
}
stdin, err := cmd.StdinPipe()
if err != nil {
return err
}
if err = cmd.Start(); err != nil {
return err
}
for drv := range installables {
if strings.HasSuffix(drv, ".drv") {
// this is just what nix requires now :c
drv += "^*"
}
if _, err = stdin.Write([]byte(drv + "\n")); err != nil {
return err
}
}
if err = stdin.Close(); err != nil {
return err
}
return cmd.Wait()
}