func addBuilder(pm *PluginManager) { //these are internally used pm.Add("builder", func(config *BuildConfig, options Plugins, c chan bool) { pwd, _ := os.Getwd() _, binName := filepath.Split(config.Package) // bin := filepath.Join(pwd, config.Bin) var clientdir string outputdir := filepath.Join(pwd, config.Client.StaticDir) if config.Client.Dir != "" { clientdir = filepath.Join(pwd, config.Client.Dir) } goget := builders.GoInstallerWith("./") jsbuild := builders.JSLauncher(builders.JSBuildConfig{ Package: config.ClientPackage, Folder: outputdir, FileName: config.Client.Name, Tags: config.Client.BuildTags, Verbose: config.Client.UseVerbose, PackageDir: clientdir, }) gobuild := builders.GoBuilderWith(builders.BuildConfig{ Path: filepath.Join(pwd, config.Bin), Name: binName, Args: config.BinArgs, }) goget.Bind(jsbuild, true) //send out the build command after js build jsbuild.React(func(root flux.Reactor, _ error, _ interface{}) { gobuild.Send(true) }, true) //run go installer goget.Send(true) flux.GoDefer("watchBuildRun:kill", func() { <-c //close our builders goget.Close() gobuild.Close() }) }) }
func addWatchBuildRun(pm *PluginManager) { //these are internally used pm.Add("watchBuildRun", func(config *BuildConfig, options Plugins, c chan bool) { pwd, _ := os.Getwd() _, binName := filepath.Split(config.Package) binDir := filepath.Join(pwd, config.Bin) binfile := filepath.Join(binDir, binName) pkgs := append([]string{}, config.Package, "github.com/influx6/relay/relay", "github.com/influx6/relay/engine") packages, err := assets.GetAllPackageLists(pkgs) if err != nil { panic(err) } fmt.Printf("--> Retrieved package directories %s \n", config.Package) goget := builders.GoInstallerWith("./") goget.React(func(root flux.Reactor, err error, data interface{}) { if err != nil { fmt.Printf("---> goget.Error occured: %s\n", err) } else { fmt.Printf("--> Sending signal for 'go get'\n") } }, true) buildbin := builders.BinaryBuildLauncher(builders.BinaryBuildConfig{ Path: binDir, Name: binName, RunArgs: config.BinArgs, }) buildbin.React(func(root flux.Reactor, err error, data interface{}) { if err != nil { fmt.Printf("---> buildbin.Error occured: %s\n", err) } else { fmt.Printf("--> Building Binary") } }, true) goget.Bind(buildbin, true) fmt.Printf("--> Initializing File Watcher using package dependecies at %d\n", len(packages)) watcher := fs.WatchSet(fs.WatchSetConfig{ Path: packages, Validator: func(base string, info os.FileInfo) bool { if strings.Contains(base, ".git") { return false } if strings.Contains(base, binDir) || base == binDir { return false } if strings.Contains(base, binfile) || base == binfile { return false } if info != nil && info.IsDir() { return true } if filepath.Ext(base) != ".go" { return false } return true }, }) watcher.React(func(root flux.Reactor, err error, data interface{}) { if err != nil { fmt.Printf("---> watcher.Error occured: %s\n", err) } else { if ev, ok := data.(fsnotify.Event); ok { fmt.Printf("--> File as changed: %+s\n", ev.String()) } } }, true) watcher.Bind(buildbin, true) watcher.Bind(goget, true) //run go installer goget.Send(true) fmt.Printf("--> Initializing Interrupt Signal Watcher for %s@%s\n", binName, binfile) flux.GoDefer("watchBuildRun:kill", func() { <-c //close our builders watcher.Close() goget.Close() buildbin.Close() }) }) }