diff --git a/cmd/gitea-sonarqube-bot/main.go b/cmd/gitea-sonarqube-bot/main.go index 4cf2821..cf719be 100644 --- a/cmd/gitea-sonarqube-bot/main.go +++ b/cmd/gitea-sonarqube-bot/main.go @@ -1,19 +1,28 @@ package main import ( + "context" + "errors" "fmt" "log" + "net/http" "os" + "os/signal" + "syscall" + "time" "gitea-sonarqube-pr-bot/internal/api" giteaSdk "gitea-sonarqube-pr-bot/internal/clients/gitea" sonarQubeSdk "gitea-sonarqube-pr-bot/internal/clients/sonarqube" "gitea-sonarqube-pr-bot/internal/settings" - "github.com/fvbock/endless" "github.com/urfave/cli/v2" ) +var ( + HammerTime time.Duration = 15 * time.Second +) + func main() { app := &cli.App{ Name: "gitea-sonarqube-bot", @@ -46,15 +55,40 @@ func main() { } func serveApi(c *cli.Context) error { - fmt.Println("Hi! I'm the Gitea-SonarQube-PR bot. At your service.") - config := c.Path("config") settings.Load(config) - fmt.Printf("Config file in use: %s\n", config) + + log.Println("Hi! I'm Gitea SonarQube Bot. At your service.") + log.Println("Config file in use:", config) giteaHandler := api.NewGiteaWebhookHandler(giteaSdk.New(), sonarQubeSdk.New()) sqHandler := api.NewSonarQubeWebhookHandler(giteaSdk.New(), sonarQubeSdk.New()) server := api.New(giteaHandler, sqHandler) - return endless.ListenAndServe(fmt.Sprintf(":%d", c.Int("port")), server.Engine) + srv := &http.Server{ + Addr: fmt.Sprintf(":%d", c.Int("port")), + Handler: server.Engine, + } + + go func() { + if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { + log.Fatalln(err) + } + }() + + log.Println("Listen on", srv.Addr) + + quit := make(chan os.Signal) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + log.Println("Shutting down server...") + + ctx, cancel := context.WithTimeout(context.Background(), HammerTime) + defer cancel() + + if err := srv.Shutdown(ctx); err != nil { + log.Fatal("[STOP - Hammer Time] Forcefully shutting down\n", err) + } + + return nil } diff --git a/go.mod b/go.mod index c3a0701..08f4879 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.17 require ( code.gitea.io/sdk/gitea v0.15.1 - github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6 github.com/gin-gonic/gin v1.7.7 github.com/spf13/viper v1.11.0 github.com/stretchr/testify v1.7.1 diff --git a/go.sum b/go.sum index 47defd0..b00e033 100644 --- a/go.sum +++ b/go.sum @@ -117,8 +117,6 @@ github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUork github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6 h1:6VSn3hB5U5GeA6kQw4TwWIWbOhtvR2hmbBJnTOtqTWc= -github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6/go.mod h1:YxOVT5+yHzKvwhsiSIWmbAYM3Dr9AEEbER2dVayfBkg= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=