diff --git a/go.mod b/go.mod index 0bbeadf..a7abe32 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,11 @@ module gitea.hbanafa.com/hesham/hooker go 1.21.1 + +require github.com/urfave/cli/v2 v2.25.7 + +require ( + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..54cdbc1 --- /dev/null +++ b/go.sum @@ -0,0 +1,8 @@ +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= diff --git a/hooker.go b/hooker.go index 7527d34..97b59fb 100644 --- a/hooker.go +++ b/hooker.go @@ -8,12 +8,16 @@ import ( "strconv" "sync" "time" + + "github.com/urfave/cli/v2" ) /* Listen for git web hooks and then execute a script. */ +var verbose bool + type TaskDefErr struct { message string } @@ -67,16 +71,7 @@ func InitTask() TaskManifest { } func init() { - TAG := "[ init ]" - l := func(msg string) { - log.Println(TAG, msg) - } - l("starting") - l("Validating Task") - task = InitTask() - - l("Registering handlers") mux := http.NewServeMux() mux.HandleFunc("/", handleRoot) @@ -90,12 +85,70 @@ func init() { } -func main() { +func runServer() error { log.Println("Task", task) log.Printf("Listening on %s", httpServer.Addr) log.Fatal(httpServer.ListenAndServe()) log.Println("Server Stopped") + + return nil +} + +func main() { + + app := cli.App{ + Name: "hooker", + Description: "Listen for git web hooks and then execute a script or executable", + Authors: []*cli.Author{ + { + Name: "Hesham T. Banafa", + Email: "hishaminv@gmail.com", + }, + }, + Flags: []cli.Flag{ + &cli.Uint64Flag{ + Name: "repo_id", + Usage: "Target Repo ID reported by git webhook", + Destination: &task.RepoID, + Required: true, + }, + &cli.StringFlag{ + Name: "owner", + Usage: "Repo Owner username", + Destination: &task.Owner, + Required: true, + }, + &cli.StringFlag{ + Name: "auth", + Usage: "Auth Secret", + Destination: &task.Auth, + Required: true, + }, + &cli.StringFlag{ + Name: "command", + Aliases: []string{"c"}, + Usage: "Command is the script or executable to be run upon webhook", + Destination: &task.Command, + Required: true, + }, + &cli.BoolFlag{ + Name: "verbose", + Aliases: []string{"v"}, + Value: false, + Usage: "Produce more verbose output", + Destination: &verbose, + }, + }, + Action: func(ctx *cli.Context) error { + err := runServer() + return err + }, + } + + if err := app.Run(os.Args); err != nil { + log.Fatal(err) + } }