Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var Command = &cli.Command{ Name: "develop", Flags: []cli.Flag{ &cli.StringFlag{ Name: "addr", EnvVars: []string{"KARTUSCHE_ADDR"}, Value: "localhost:5001", }, }, Action: func(c *cli.Context) (err error) { defer func() { if err != nil { err = cli.Exit(fmt.Errorf("while running dev server: %w", err), 1) } }() dl, err := zap.NewDevelopment() if err != nil { return fmt.Errorf("while starting logger: %w", err) } defer dl.Sync() log := zapr.NewLogger(dl) dir := "." _, err = os.Stat(".kartusche") if os.IsNotExist(err) { err = os.Mkdir(".kartusche", 0700) } if err != nil { return err } _, err = os.Stat(".kartusche/development") if os.IsNotExist(err) { err = runtime.InitializeNew(".kartusche/development", dir) } if err != nil { return fmt.Errorf("while initializing runtime: %w", err) } l, err := net.Listen("tcp", c.String("addr")) if err != nil { return fmt.Errorf("while creating listener: %w", err) } log.Info("listening for HTTP requests", "url", fmt.Sprintf("http://%s/", l.Addr().String())) rt, err := runtime.Open(".kartusche/development", log) if err != nil { return fmt.Errorf("while starting runtime: %w", err) } s := &http.Server{ Handler: rt, } w, err := fsnotify.NewWatcher() if err != nil { return fmt.Errorf("while creating fs notify watcher") } go func() { names := make(chan string, 20) names <- "." done := make(chan error) go watch(dir, w, names, done) for range names { inner: for { select { case <-names: case <-time.NewTimer(100 * time.Millisecond).C: break inner } } err := updateRuntimeCode(rt, dir) if err != nil { fmt.Println(fmt.Errorf("failed to update runtime: %w", err)) continue } fmt.Println("updated runtime") err = tests.Run(dir) if err != nil { fmt.Println(err) } } }() return s.Serve(l) }, }
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.