feat: CLI
This commit is contained in:
		
							parent
							
								
									71d36d63fe
								
							
						
					
					
						commit
						c348a0ba67
					
				
							
								
								
									
										8
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								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
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								go.sum
									
									
									
									
									
										Normal file
									
								
							@ -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=
 | 
			
		||||
							
								
								
									
										73
									
								
								hooker.go
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								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)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user