rizla

Rizla builds, runs and monitors your Go Applications with ease. See https://github.com/kataras/iris-cli for Iris users.

MIT License

Stars
189

Rizla builds, runs and monitors your Go Applications with ease.

Installation

The only requirement is the Go Programming Language, at least 1.7.

$ go get -u github.com/kataras/rizla

Getting Started

$ rizla main.go #single project monitoring
$ rizla C:/myprojects/project1/main.go C:/myprojects/project2/main.go #multi projects monitoring
$ rizla -walk main.go #prepend '-walk' only when the default file changes scanning method doesn't works for you.
$ rizla -delay=5s main.go # if delay > 0 then it delays the reload, also note that it accepts the first change but the rest of changes every "delay".

Want to use it from your project's source code? easy

$ cat from_code_simple.go
package main

import (
    "github.com/kataras/rizla/rizla"
)

func main() {
  // Build, run & start monitoring the projects
  rizla.Run("C:/iris-project/main.go", "C:/otherproject/main.go")
  // watcher, _ := rizla.WatcherFromFlag("-walk")
  // rizla.RunWith(watcher, "./main.go", 0)
}
$ cat from_code_pro.go
package main

import (
    "path/filepath"
    "runtime"
    "time"
    "os"

    "github.com/kataras/rizla/rizla"
)

func main() {
  // Create a new project by the main source file
  project := rizla.NewProject("C:/myproject/main.go")

  // The below are optional

  // Optionally, change the out for info logs and error messages.
  project.Out.SetOutput(os.Stdout)
  project.Err.SetOutput(os.Stderr)

  project.Name = "My super project"
  // Allow reload every 3 seconds or more no less
  project.AllowReloadAfter = time.Duration(3) * time.Second
  // Custom subdirectory matcher, for the watcher, return true to include this folder to the watcher
  // the default is:
  project.Watcher = func(absolutePath string) bool {
        base := filepath.Base(abs)
        return !(base == ".git" || base == "node_modules" || base == "vendor")
  }
  // Custom file matcher on runtime (file change), return true to reload when a file with this file name changed
  // the default is:
  project.Matcher = func(filename string) bool {
        isWindows = runtime.GOOS == "windows"
        goExt     = ".go"
        return (filepath.Ext(fullname) == goExt) ||
        (!isWindows && strings.Contains(fullname, goExt))
  }
  // Add arguments, these will be used from the executable file
  project.Args = []string{"-myargument","the value","-otherargument","a value"}
  // Custom callback before reload, the default is:
  project.OnReload = func(string) {
        fromproject := ""
        if p.Name != "" {
            fromproject = "From project '" + project.Name + "': "
        }
        project.Out.Infof("%sA change has been detected, reloading now...", fromproject)
   }
   // Custom callback after reload, the default is:
   project.OnReloaded = func(string) {
        
   }

  // End of optional

  // Add the project to the rizla container
  rizla.Add(project)
  //  Build, run & start monitoring the project(s)
  rizla.Run(nil)
}

That's all!

FAQ

Ask questions and get real-time answers from the Chat.

Features

  • Super easy - is created for everyone.
  • You can use it either as command line tool either as part of your project's source code!
  • Multi-Monitoring - Supports monitoring of unlimited projects.
  • Rizla, by-default, uses the operating system's signals to fire a change because it is the fastest way and it consumes the minimal CPU.
    • You 're still able to change the watcher to use the filepath.Walk too with -walk flag.
  • delay reload on detect change with -delay

People


If you'd like to discuss this package, or ask questions about it, feel free to Chat.

The author of rizla is @kataras.

Versioning

Current: v0.1.1

HISTORY file is your best friend!

Read more about Semantic Versioning 2.0.0

Todo

  • Tests
  • Provide full examples.

Third-Party Licenses

Third-Party Licenses can be found here

License

This project is licensed under the MIT License.

License can be found here.