git-webhook-ci/main.go

82 lines
1.4 KiB
Go
Raw Normal View History

2023-02-25 22:32:10 +01:00
package main
import (
"fmt"
"log"
"os"
"os/exec"
"filelistener/cfg"
"github.com/fsnotify/fsnotify"
)
func main() {
isProd := os.Getenv("ENV") == "prod"
config := cfg.NewConfig(isProd)
// Create new watcher.
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
// Start listening for events.
go func() {
for {
select {
case event, ok := <-watcher.Events:
if !ok {
log.Printf("<-watcher.Events: %s\n", err)
return
}
if !event.Has(fsnotify.Write) {
log.Printf("is not Write: %s\n", event.Name)
continue
}
if err := deploy(config.ScriptBinaryPath, config.WebhookScriptPath); err != nil {
log.Printf("deploy: %s\n", err)
continue
}
case err, ok := <-watcher.Errors:
if !ok {
return
}
log.Printf("<-watcher.Errors: %s\n", err)
}
}
}()
// Add a path.
err = watcher.Add(config.FileToWatchPath)
if err != nil {
log.Fatal(err)
}
// Block main goroutine forever.
<-make(chan struct{})
}
func deploy(binaryPath, scriptPath string) error {
err := execute(binaryPath, scriptPath)
if err != nil {
return fmt.Errorf("execute: %s", err)
}
log.Println("deploy done")
return nil
}
func execute(binaryPath, scriptPath string) error {
cmd := exec.Command(binaryPath, scriptPath)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return fmt.Errorf("cmd.Run %s", err)
}
return nil
}