commit
f912c8b63a
25
README.md
25
README.md
|
@ -71,6 +71,16 @@ A Go build system with file watchers, output streams and live reload. Run, build
|
||||||
```
|
```
|
||||||
$ realize add --name="My Project" --path="projects/package" --build --no-run
|
$ realize add --name="My Project" --path="projects/package" --build --no-run
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you want, you can specify additional arguments for your project.
|
||||||
|
**The additional arguments must go after the options of "Realize"**
|
||||||
|
|
||||||
|
```
|
||||||
|
$ realize add --path="/print/printer" --no-run yourParams --yourFlags // correct
|
||||||
|
|
||||||
|
$ realize add yourParams --yourFlags --path="/print/printer" --no-run // wrong
|
||||||
|
```
|
||||||
|
|
||||||
- Remove a project by its name
|
- Remove a project by its name
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -93,7 +103,7 @@ A Go build system with file watchers, output streams and live reload. Run, build
|
||||||
$ realize fast
|
$ realize fast
|
||||||
```
|
```
|
||||||
|
|
||||||
The fast command supports the following custom parameters:
|
The fast command supports the following custom parameters:
|
||||||
|
|
||||||
```
|
```
|
||||||
--build -> Enables the build
|
--build -> Enables the build
|
||||||
|
@ -103,6 +113,15 @@ A Go build system with file watchers, output streams and live reload. Run, build
|
||||||
--config -> Take the defined settings if exist a config file
|
--config -> Take the defined settings if exist a config file
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The "fast" command supporst addittional arguments as the "add" command.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ realize fast --no-run yourParams --yourFlags // correct
|
||||||
|
|
||||||
|
$ realize fast yourParams --yourFlags --no-run // wrong
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
#### Color reference
|
#### Color reference
|
||||||
|
|
||||||
- Blue: outputs of the project
|
- Blue: outputs of the project
|
||||||
|
@ -124,6 +143,9 @@ A Go build system with file watchers, output streams and live reload. Run, build
|
||||||
app_bin: true -> enable/disable go install
|
app_bin: true -> enable/disable go install
|
||||||
app_build: false -> enable/disable go build
|
app_build: false -> enable/disable go build
|
||||||
app_fmt: true -> enable/disable go fmt
|
app_fmt: true -> enable/disable go fmt
|
||||||
|
app_params:
|
||||||
|
- --flag1
|
||||||
|
- param1
|
||||||
app_watcher:
|
app_watcher:
|
||||||
preview: true -> prints the observed files on startup
|
preview: true -> prints the observed files on startup
|
||||||
paths: -> paths to observe for live reload
|
paths: -> paths to observe for live reload
|
||||||
|
@ -158,6 +180,7 @@ A Go build system with file watchers, output streams and live reload. Run, build
|
||||||
- [x] Watcher files preview
|
- [x] Watcher files preview
|
||||||
- [x] Support for directories with duplicates names
|
- [x] Support for directories with duplicates names
|
||||||
- [ ] Go test support
|
- [ ] Go test support
|
||||||
|
- [x] Additional arguments
|
||||||
- [x] Go fmt support
|
- [x] Go fmt support
|
||||||
- [x] Cli fast run
|
- [x] Cli fast run
|
||||||
- [x] Execution times for build/install
|
- [x] Execution times for build/install
|
||||||
|
|
|
@ -19,8 +19,45 @@ type Config struct {
|
||||||
Projects []Project
|
Projects []Project
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New method puts the cli params in the struct
|
||||||
|
func New(params *cli.Context) *Config {
|
||||||
|
return &Config{
|
||||||
|
file: AppFile,
|
||||||
|
Version: AppVersion,
|
||||||
|
Projects: []Project{
|
||||||
|
{
|
||||||
|
Name: nameFlag(params),
|
||||||
|
Path: filepath.Clean(params.String("path")),
|
||||||
|
Build: params.Bool("build"),
|
||||||
|
Bin: boolFlag(params.Bool("no-bin")),
|
||||||
|
Run: boolFlag(params.Bool("no-run")),
|
||||||
|
Fmt: boolFlag(params.Bool("no-fmt")),
|
||||||
|
Params: argsParam(params),
|
||||||
|
Watcher: Watcher{
|
||||||
|
Paths: watcherPaths,
|
||||||
|
Ignore: watcherIgnores,
|
||||||
|
Exts: watcherExts,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// argsParam parse one by one the given argumentes
|
||||||
|
func argsParam(params *cli.Context) []string {
|
||||||
|
argsN := params.NArg()
|
||||||
|
if argsN > 0 {
|
||||||
|
var args []string
|
||||||
|
for i := 0; i <= argsN-1; i++ {
|
||||||
|
args = append(args, params.Args().Get(i))
|
||||||
|
}
|
||||||
|
return args
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// NameParam check the project name presence. If empty takes the working directory name
|
// NameParam check the project name presence. If empty takes the working directory name
|
||||||
func nameParam(params *cli.Context) string {
|
func nameFlag(params *cli.Context) string {
|
||||||
var name string
|
var name string
|
||||||
if params.String("name") == "" && params.String("path") == "" {
|
if params.String("name") == "" && params.String("path") == "" {
|
||||||
return WorkingDir()
|
return WorkingDir()
|
||||||
|
@ -33,7 +70,7 @@ func nameParam(params *cli.Context) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// BoolParam is used to check the presence of a bool flag
|
// BoolParam is used to check the presence of a bool flag
|
||||||
func boolParam(b bool) bool {
|
func boolFlag(b bool) bool {
|
||||||
if b {
|
if b {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -49,29 +86,6 @@ func WorkingDir() string {
|
||||||
return filepath.Base(dir)
|
return filepath.Base(dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// New method puts the cli params in the struct
|
|
||||||
func New(params *cli.Context) *Config {
|
|
||||||
return &Config{
|
|
||||||
file: AppFile,
|
|
||||||
Version: AppVersion,
|
|
||||||
Projects: []Project{
|
|
||||||
{
|
|
||||||
Name: nameParam(params),
|
|
||||||
Path: filepath.Clean(params.String("path")),
|
|
||||||
Build: params.Bool("build"),
|
|
||||||
Bin: boolParam(params.Bool("no-bin")),
|
|
||||||
Run: boolParam(params.Bool("no-run")),
|
|
||||||
Fmt: boolParam(params.Bool("no-fmt")),
|
|
||||||
Watcher: Watcher{
|
|
||||||
Paths: watcherPaths,
|
|
||||||
Ignore: watcherIgnores,
|
|
||||||
Exts: watcherExts,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Duplicates check projects with same name or same combinations of main/path
|
// Duplicates check projects with same name or same combinations of main/path
|
||||||
func Duplicates(value Project, arr []Project) (error, Project) {
|
func Duplicates(value Project, arr []Project) (error, Project) {
|
||||||
for _, val := range arr {
|
for _, val := range arr {
|
||||||
|
@ -127,12 +141,13 @@ func (h *Config) Add(params *cli.Context) error {
|
||||||
err := h.Read()
|
err := h.Read()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
new := Project{
|
new := Project{
|
||||||
Name: nameParam(params),
|
Name: nameFlag(params),
|
||||||
Path: filepath.Clean(params.String("path")),
|
Path: filepath.Clean(params.String("path")),
|
||||||
Build: params.Bool("build"),
|
Build: params.Bool("build"),
|
||||||
Bin: boolParam(params.Bool("no-bin")),
|
Bin: boolFlag(params.Bool("no-bin")),
|
||||||
Run: boolParam(params.Bool("no-run")),
|
Run: boolFlag(params.Bool("no-run")),
|
||||||
Fmt: boolParam(params.Bool("no-fmt")),
|
Fmt: boolFlag(params.Bool("no-fmt")),
|
||||||
|
Params: argsParam(params),
|
||||||
Watcher: Watcher{
|
Watcher: Watcher{
|
||||||
Paths: watcherPaths,
|
Paths: watcherPaths,
|
||||||
Exts: watcherExts,
|
Exts: watcherExts,
|
||||||
|
@ -186,6 +201,7 @@ func (h *Config) List() error {
|
||||||
fmt.Println(MagentaS("|"), "\t", Yellow("Build"), ":", MagentaS(val.Build))
|
fmt.Println(MagentaS("|"), "\t", Yellow("Build"), ":", MagentaS(val.Build))
|
||||||
fmt.Println(MagentaS("|"), "\t", Yellow("Install"), ":", MagentaS(val.Bin))
|
fmt.Println(MagentaS("|"), "\t", Yellow("Install"), ":", MagentaS(val.Bin))
|
||||||
fmt.Println(MagentaS("|"), "\t", Yellow("Fmt"), ":", MagentaS(val.Fmt))
|
fmt.Println(MagentaS("|"), "\t", Yellow("Fmt"), ":", MagentaS(val.Fmt))
|
||||||
|
fmt.Println(MagentaS("|"), "\t", Yellow("Params"), ":", MagentaS(val.Params))
|
||||||
fmt.Println(MagentaS("|"), "\t", Yellow("Watcher"), ":")
|
fmt.Println(MagentaS("|"), "\t", Yellow("Watcher"), ":")
|
||||||
fmt.Println(MagentaS("|"), "\t\t", Yellow("After"), ":", MagentaS(val.Watcher.After))
|
fmt.Println(MagentaS("|"), "\t\t", Yellow("After"), ":", MagentaS(val.Watcher.After))
|
||||||
fmt.Println(MagentaS("|"), "\t\t", Yellow("Before"), ":", MagentaS(val.Watcher.Before))
|
fmt.Println(MagentaS("|"), "\t\t", Yellow("Before"), ":", MagentaS(val.Watcher.Before))
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
package realize
|
|
||||||
|
|
||||||
import (
|
|
||||||
"gopkg.in/urfave/cli.v2"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
var context *cli.Context
|
|
||||||
|
|
||||||
func TestNew(t *testing.T) {
|
|
||||||
actual := New(context)
|
|
||||||
expected := &Config{file: AppFile, Version: AppVersion}
|
|
||||||
if actual == expected {
|
|
||||||
t.Errorf("Test failed, expected: '%s', got: '%s'", expected, actual)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,20 +16,26 @@ import (
|
||||||
type Project struct {
|
type Project struct {
|
||||||
reload time.Time
|
reload time.Time
|
||||||
base string
|
base string
|
||||||
Name string `yaml:"app_name,omitempty"`
|
Name string `yaml:"app_name,omitempty"`
|
||||||
Path string `yaml:"app_path,omitempty"`
|
Path string `yaml:"app_path,omitempty"`
|
||||||
Run bool `yaml:"app_run,omitempty"`
|
Run bool `yaml:"app_run,omitempty"`
|
||||||
Bin bool `yaml:"app_bin,omitempty"`
|
Bin bool `yaml:"app_bin,omitempty"`
|
||||||
Build bool `yaml:"app_build,omitempty"`
|
Build bool `yaml:"app_build,omitempty"`
|
||||||
Fmt bool `yaml:"app_fmt,omitempty"`
|
Fmt bool `yaml:"app_fmt,omitempty"`
|
||||||
Watcher Watcher `yaml:"app_watcher,omitempty"`
|
Params []string `yaml:"app_params,omitempty"`
|
||||||
|
Watcher Watcher `yaml:"app_watcher,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GoRun is an implementation of the bin execution
|
// GoRun is an implementation of the bin execution
|
||||||
func (p *Project) GoRun(channel chan bool, runner chan bool, wr *sync.WaitGroup) error {
|
func (p *Project) GoRun(channel chan bool, runner chan bool, wr *sync.WaitGroup) error {
|
||||||
|
|
||||||
stop := make(chan bool, 1)
|
stop := make(chan bool, 1)
|
||||||
build := exec.Command(filepath.Join(os.Getenv("GOBIN"), filepath.Base(p.Path)))
|
var build *exec.Cmd
|
||||||
|
if len(p.Params) != 0 {
|
||||||
|
build = exec.Command(filepath.Join(os.Getenv("GOBIN"), filepath.Base(p.Path)), p.Params...)
|
||||||
|
} else {
|
||||||
|
build = exec.Command(filepath.Join(os.Getenv("GOBIN"), filepath.Base(p.Path)))
|
||||||
|
}
|
||||||
build.Dir = p.base
|
build.Dir = p.base
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := build.Process.Kill(); err != nil {
|
if err := build.Process.Kill(); err != nil {
|
||||||
|
|
Loading…
Reference in New Issue