func Binary(dest, pkg string) *BuildTarget { return &BuildTarget{ id: buildkit.ID(), dest: dest, pkgs: []string{pkg}, } }
// Service creates a new buildkit.Target for running and restarting binaries. func Service(binary, command string) *ServiceTarget { return &ServiceTarget{ id: buildkit.ID(), deps: []string{binary}, command: command, } }
// Generate runs the "go generate" command on pkg whenever deps change. func Generate(pkg string, dest []string, deps []string) (buildkit.Target, error) { path := FindImportPath(pkg) if path == "" { return nil, fmt.Errorf("could not find import path for package %q", pkg) } description := fmt.Sprintf("go.generate:%s:%d", pkg, buildkit.ID()) return buildkit.Command(description, []string{"go", "generate", pkg}, dest, deps), nil }
func PhonyBuilder(definition *config.Target) (buildkit.Target, error) { if err := config.Constrain().Actions.AtLeast(1).Dependencies.Exactly(0).Targets.Exactly(1).Verify(definition); err != nil { return nil, err } return &PhonyTarget{ id: buildkit.ID(), command: strings.Join(definition.Actions, "\n"), }, nil }
func ServiceBuilder(definition *config.Target) (buildkit.Target, error) { if err := config.Constrain().Actions.Exactly(1).Dependencies.AtLeast(0).Verify(definition); err != nil { return nil, err } return &ServiceTarget{ id: buildkit.ID(), deps: append(definition.Targets, definition.Dependencies...), command: strings.Join(definition.Actions, "\n"), }, nil }
func LessBuilder(definition *config.Target) (buildkit.Target, error) { if err := config.Constrain().Targets.Exactly(1).Dependencies.Exactly(1).Verify(definition); err != nil { return nil, err } return &LessTarget{ id: buildkit.ID(), dest: definition.Targets[0], source: definition.Dependencies[0], }, nil }
// PackageBuilder is a factory for building and installing Go packages. // // eg. // // package <pkg> [<pkg> ...] func PackageBuilder(definition *config.Target) (buildkit.Target, error) { if err := config.Constrain().Dependencies.Exactly(0).Verify(definition); err != nil { return nil, err } // TODO(alec): Correctly set "dest" to output archive. return &BuildTarget{ id: buildkit.ID(), name: "go.package", pkgs: definition.Targets, }, nil }
func BinaryBuilder(definition *config.Target) (buildkit.Target, error) { if err := config.Constrain().Dependencies.Exactly(1).Verify(definition); err != nil { return nil, err } return &BuildTarget{ id: buildkit.ID(), name: "go.binary", dest: definition.Targets[0], pkgs: definition.Dependencies, }, nil }
func (s *ServiceTarget) run() { log := s.log.New(buildkit.ID()) for { log.Printf("Starting %q", s.command) s.cmd = exec.Command("/bin/sh", "-c", s.command) s.cmd.Stdout = log s.cmd.Stderr = log err := s.cmd.Start() if err != nil { log.Printf("Failed to start service: %s", err) } else { err = s.cmd.Wait() if err != nil { log.Printf("Service failed: %s", err) } } time.Sleep(time.Second) } }
func Packages(pkgs ...string) *BuildTarget { return &BuildTarget{id: buildkit.ID(), pkgs: pkgs} }