72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
|
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")
|
||
|
}
|