// log func log(ccmd *cobra.Command, args []string) { // if stream is true, we connect to the live logs... if stream { fmt.Printf(stylish.Bullet("Opening log stream")) // stream logs (blocking) mistutil.Stream([]string{"log", "app"}, mistutil.ProcessLogStream) // ...otherwise load historical logs } else { // v := url.Values{} v.Add("level", level) v.Add("limit", fmt.Sprintf("%v", count)) v.Add("offset", fmt.Sprintf("%v", offset)) // show Mist history if err := server.Logs(v.Encode()); err != nil { server.Fatal("[commands/log] server.Logs() failed", err.Error()) } } }
// bootstrap func bootstrap(ccmd *cobra.Command, args []string) { // PreRun: boot fmt.Printf(stylish.Bullet("Bootstrapping codebase...")) // stream bootstrap output go mistutil.Stream([]string{"log", "deploy"}, mistutil.PrintLogStream) // listen for status updates errch := make(chan error) go func() { errch <- mistutil.Listen([]string{"job", "bootstrap"}, mistutil.BootstrapUpdates) }() // run a bootstrap if err := server.Bootstrap(""); err != nil { server.Fatal("[commands/bootstrap] server.Bootstrap() failed", err.Error()) } // wait for a status update (blocking) err := <-errch // if err != nil { fmt.Printf(err.Error()) return } // PostRun: halt }
// updateImages func updateImages(ccmd *cobra.Command, args []string) { // PreRun: boot // stream update output go mistutil.Stream([]string{"log", "deploy"}, mistutil.PrintLogStream) // listen for status updates errch := make(chan error) go func() { errch <- mistutil.Listen([]string{"job", "imageupdate"}, mistutil.ImageUpdates) }() fmt.Printf(stylish.Bullet("Updating nanobox docker images (this may take a while)...")) // run an image update if err := server.Update(""); err != nil { server.Fatal("[commands/update-images] server.Update() failed", err.Error()) } // wait for a status update (blocking) err := <-errch // if err != nil { fmt.Printf(err.Error()) return } // PostRun: halt }
// deploy func deploy(ccmd *cobra.Command, args []string) { // PreRun: boot fmt.Printf(stylish.Bullet("Deploying codebase...")) // stream deploy output go mistutil.Stream([]string{"log", "deploy"}, mistutil.PrintLogStream) // listen for status updates errch := make(chan error) go func() { errch <- mistutil.Listen([]string{"job", "deploy"}, mistutil.DeployUpdates) }() v := url.Values{} v.Add("reset", strconv.FormatBool(config.Force)) v.Add("run", strconv.FormatBool(install)) // remount the engine file at ~/.nanobox/apps/<app>/<engine> so any new scripts // will be used during the deploy if err := engineutil.RemountLocal(); err != nil { config.Debug("No engine mounted (not found locally).") } // run a deploy if err := server.Deploy(v.Encode()); err != nil { server.Fatal("[commands/deploy] server.Deploy() failed", err.Error()) } // wait for a status update (blocking) err := <-errch // if err != nil { fmt.Printf(err.Error()) return } // reset "reloaded" to false after a successful deploy so as NOT to deploy on // subsequent runnings of "nanobox dev" config.VMfile.ReloadedIs(false) // PostRun: halt }
// build func build(ccmd *cobra.Command, args []string) { // PreRun: boot fmt.Printf(stylish.Bullet("Building codebase...")) // stream build output go mistutil.Stream([]string{"log", "deploy"}, mistutil.PrintLogStream) // listen for status updates errch := make(chan error) go func() { errch <- mistutil.Listen([]string{"job", "build"}, mistutil.BuildUpdates) }() // remount the engine file at ~/.nanobox/apps/<app>/<engine> so any new scripts // are used during the build if err := engineutil.RemountLocal(); err != nil { config.Debug("No engine mounted (not found locally).") } // run a build if err := server.Build(""); err != nil { server.Fatal("[commands/build] server.Build() failed", err.Error()) } // wait for a status update (blocking) err := <-errch // if err != nil { fmt.Printf(err.Error()) return } // PostRun: halt }
// run func run(ccmd *cobra.Command, args []string) { // PreRun: boot fmt.Printf(stylish.Bullet("Deploying codebase...")) // stream deploy output go mistutil.Stream([]string{"log", "deploy"}, mistutil.PrintLogStream) // listen for status updates errch := make(chan error) go func() { errch <- mistutil.Listen([]string{"job", "deploy"}, mistutil.DeployUpdates) }() // remount the engine file at ~/.nanobox/apps/<app>/<engine> so any new scripts // will be used during the deploy if err := engineutil.RemountLocal(); err != nil { config.Debug("No engine mounted (not found locally).") } // run a deploy if err := server.Deploy("run=true"); err != nil { server.Fatal("[commands/run] server.Deploy() failed", err.Error()) } // wait for a status update (blocking) err := <-errch // if err != nil { fmt.Printf(err.Error()) return } fmt.Printf(` -------------------------------------------------------------------------------- [√] APP SUCCESSFULLY BUILT /// DEV URL : %v -------------------------------------------------------------------------------- `, config.Nanofile.Domain) // if in background mode just exist w/o streaming logs or watching files if config.VMfile.IsBackground() { fmt.Println(` To stream logs and watch files while in 'background mode' you can use 'nanobox log' and 'nanobox watch' `) return } // if not in background mode begin streaming logs and watching files fmt.Printf(` ++> STREAMING LOGS (ctrl-c to exit) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `) // stream app output go mistutil.Stream([]string{"log", "app"}, mistutil.ProcessLogStream) // begin watching for file changes (blocking) if err := notify.Watch(config.CWDir, server.NotifyRebuild); err != nil { fmt.Printf(err.Error()) } // PostRun: halt }