gitea-page/internal/gitea/gitea.go

72 lines
1.6 KiB
Go
Raw Normal View History

2022-10-14 12:30:40 +00:00
package gitea
import (
"encoding/json"
"gitea-page/internal/config"
"gitea-page/internal/git"
"gitea-page/internal/promote"
"github.com/rs/zerolog/log"
"io"
"net/http"
"time"
)
type webhookContent struct {
Ref string `json:"ref"`
Before string `json:"before"`
Repository webhookContentRepository `json:"repository"`
}
type webhookContentRepository struct {
Name string `json:"name"`
Owner webhookContentRepositoryOwner `json:"owner"`
SSHUrl string `json:"ssh_url"`
}
type webhookContentRepositoryOwner struct {
Username string `json:"username"`
}
type GiteaWebhook struct {
Config config.GiteaPagesConfig
Git git.GitHandler
Promoter promote.Promote
}
func (g GiteaWebhook) WebhookEndpoint(w http.ResponseWriter, r *http.Request) {
log.Debug().Msg("Webhook Endpoint called")
body, err := io.ReadAll(r.Body)
if err != nil {
log.Warn().Err(err).Msg("Cant get request Body from Request")
w.WriteHeader(400)
return
}
hook := webhookContent{}
err = json.Unmarshal(body, &hook)
if err != nil {
log.Warn().Err(err).Msg("Cant pars request")
w.WriteHeader(400)
return
}
log.Debug().Interface("hook", hook).Msg("Webhook parsed")
if hook.Ref != g.Config.Branch {
return
}
go func() {
time.Sleep(3 * time.Second)
g.updateServer(hook)
}()
w.WriteHeader(201)
}
func (g GiteaWebhook) updateServer(hook webhookContent) {
log.Debug().Msg("Update Server")
g.Git.GetRepository(hook.Repository.Name, hook.Repository.Owner.Username, hook.Repository.SSHUrl)
g.Promoter.PromoteRepo(hook.Repository.Name, hook.Repository.Owner.Username)
log.Debug().Msg("Update Server done")
}