base commit
This commit is contained in:
parent
4d7acdc014
commit
5d40de4bf3
3 changed files with 125 additions and 0 deletions
11
cmd/hoboken/main.go
Normal file
11
cmd/hoboken/main.go
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "git.barakmich.com/barak/hoboken"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
p, err := hoboken.NewProjects("./")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
hoboken.WatchDir("./...", p)
|
||||||
|
}
|
||||||
95
types.go
Normal file
95
types.go
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
package hoboken
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
log "github.com/Sirupsen/logrus"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Project struct {
|
||||||
|
Name string `yaml:"name"`
|
||||||
|
Script string `yaml:"script"`
|
||||||
|
GitURL string `yaml:"gitURL"`
|
||||||
|
path string
|
||||||
|
scriptPath string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p Project) Exec() error {
|
||||||
|
tmpdir, err := ioutil.TempDir("", "hoboken")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
cmd := exec.Command(p.scriptPath, tmpdir)
|
||||||
|
out, err := cmd.CombinedOutput()
|
||||||
|
log.Infoln(string(out))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
type Projects struct {
|
||||||
|
sync.RWMutex
|
||||||
|
projects []Project
|
||||||
|
path string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewProjects(path string) (*Projects, error) {
|
||||||
|
p := &Projects{
|
||||||
|
path: path,
|
||||||
|
}
|
||||||
|
return p, p.Reload()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Projects) Reload() error {
|
||||||
|
p.Lock()
|
||||||
|
defer p.Unlock()
|
||||||
|
p.projects = nil
|
||||||
|
filepath.Walk(p.path, walkPath(p))
|
||||||
|
log.Infof("%#v", p.projects)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var suffixes = []string{".yaml", ".yml"}
|
||||||
|
|
||||||
|
func HasYamlSuffix(s string) bool {
|
||||||
|
for _, suffix := range suffixes {
|
||||||
|
if strings.HasSuffix(strings.ToLower(s), suffix) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func walkPath(p *Projects) filepath.WalkFunc {
|
||||||
|
return func(path string, info os.FileInfo, err error) error {
|
||||||
|
if info == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if HasYamlSuffix(info.Name()) {
|
||||||
|
log.Println("Found", path)
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Error opening %s: %s", path, err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
b, err := ioutil.ReadAll(f)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Error reading %s: %s", path, err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var newp Project
|
||||||
|
yaml.Unmarshal(b, &newp)
|
||||||
|
newp.scriptPath = filepath.Clean(filepath.Join(filepath.Dir(path), newp.Script))
|
||||||
|
newp.path = path
|
||||||
|
p.projects = append(p.projects, newp)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
19
watch.go
Normal file
19
watch.go
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
package hoboken
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/rjeczalik/notify"
|
||||||
|
)
|
||||||
|
|
||||||
|
func WatchDir(path string, p *Projects) {
|
||||||
|
c := make(chan notify.EventInfo, 1)
|
||||||
|
if err := notify.Watch(path, c, notify.All); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer notify.Stop(c)
|
||||||
|
|
||||||
|
for _ = range c {
|
||||||
|
p.Reload()
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue