develop

package
v0.4.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2023 License: AGPL-3.0 Imports: 17 Imported by: 0

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL