.
This commit is contained in:
parent
598ecbbd5a
commit
8639c53977
@ -1,14 +1,5 @@
|
|||||||
all: build
|
all: build
|
||||||
|
|
||||||
api.json:
|
build:
|
||||||
curl -o api.json https://src.opensuse.org/swagger.v1.json
|
|
||||||
|
|
||||||
generated/client/gitea_api_client.go: api.json
|
|
||||||
[ -d generated ] || mkdir generated
|
|
||||||
podman run --rm -v $$(pwd):/api ghcr.io/go-swagger/go-swagger generate client -f /api/api.json -t /api/generated
|
|
||||||
|
|
||||||
api: generated/client/gitea_api_client.go
|
|
||||||
|
|
||||||
build: api
|
|
||||||
go build
|
go build
|
||||||
|
|
||||||
|
@ -1,48 +1,23 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"src.opensuse.org/autogits/common"
|
"src.opensuse.org/autogits/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
func processRepositoryAction(h *common.RequestHandler) error {
|
||||||
GitAuthor = "GiteaBot - AutoDevel"
|
|
||||||
BotName = "prjgit-updater"
|
|
||||||
)
|
|
||||||
|
|
||||||
var GiteaToken string
|
|
||||||
|
|
||||||
type ClonedRepository struct {
|
|
||||||
}
|
|
||||||
|
|
||||||
type RequestHandler struct {
|
|
||||||
r *common.RequestHandler
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rw *RequestHandler) processRepositoryAction() {
|
|
||||||
h := rw.r
|
|
||||||
if h.HasError() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
action := h.Request.Data.(common.RepositoryAction)
|
action := h.Request.Data.(common.RepositoryAction)
|
||||||
|
|
||||||
if action.Repository.Name == "_ObsPrj" {
|
if action.Repository.Name == "_ObsPrj" {
|
||||||
h.Log("repository event %s for _ObsPrj. Ignoring", action.Action)
|
h.Log("repository event %s for _ObsPrj. Ignoring", action.Action)
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
h.CreateRepositoryIfNotExist(action.Organization, common.DefaultGitPrj)
|
h.CreateRepositoryIfNotExist(action.Organization, common.DefaultGitPrj)
|
||||||
if stat, err := os.Stat(filepath.Join(h.GitPath, common.DefaultGitPrj)); err != nil || !stat.IsDir() {
|
h.GitExec("", "clone", "--depth", "1", action.PrjGit, common.DefaultGitPrj)
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
|
||||||
h.GitExec("", "clone", "--depth", "1", action.PrjGit, common.DefaultGitPrj)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch action.Action {
|
switch action.Action {
|
||||||
case "created":
|
case "created":
|
||||||
@ -52,34 +27,29 @@ func (rw *RequestHandler) processRepositoryAction() {
|
|||||||
case "deleted":
|
case "deleted":
|
||||||
if stat, err := os.Stat(filepath.Join(h.GitPath, common.DefaultGitPrj, action.Repository.Name)); err != nil || !stat.IsDir() {
|
if stat, err := os.Stat(filepath.Join(h.GitPath, common.DefaultGitPrj, action.Repository.Name)); err != nil || !stat.IsDir() {
|
||||||
h.Log("delete event for %s -- not in project. Ignoring", action.Repository.Name)
|
h.Log("delete event for %s -- not in project. Ignoring", action.Repository.Name)
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
h.GitExec(common.DefaultGitPrj, "rm", action.Repository.Name)
|
h.GitExec(common.DefaultGitPrj, "rm", action.Repository.Name)
|
||||||
h.GitExec(common.DefaultGitPrj, "commit", "-m", "Automatic package removal")
|
h.GitExec(common.DefaultGitPrj, "commit", "-m", "Automatic package removal")
|
||||||
h.GitExec(common.DefaultGitPrj, "push")
|
h.GitExec(common.DefaultGitPrj, "push")
|
||||||
default:
|
default:
|
||||||
h.LogError("%s: %s", "Unknown action type", action.Action)
|
return fmt.Errorf("%s: %s", "Unknown action type", action.Action)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rw *RequestHandler) processPushAction() {
|
func processPushAction(h *common.RequestHandler) error {
|
||||||
h := rw.r
|
|
||||||
if h.HasError() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
action := h.Request.Data.(common.PushRequest)
|
action := h.Request.Data.(common.PushRequest)
|
||||||
|
|
||||||
if action.Repository.Name == "_ObsPrj" {
|
if action.Repository.Name == "_ObsPrj" {
|
||||||
h.Log("push to _ObsPrj -- ignoring")
|
h.Log("push to _ObsPrj -- ignoring")
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
h.GitExec("", "clone", "--depth", "1", h.PrjGit, common.DefaultGitPrj)
|
h.GitExec("", "clone", "--depth", "1", h.PrjGit, common.DefaultGitPrj)
|
||||||
if stat, err := os.Stat(filepath.Join(h.GitPath, common.DefaultGitPrj, action.Repository.Name)); err != nil || !stat.IsDir() {
|
if stat, err := os.Stat(filepath.Join(h.GitPath, common.DefaultGitPrj, action.Repository.Name)); err != nil || !stat.IsDir() {
|
||||||
h.Error = fmt.Errorf("Pushed to package that is not part of the project. Ignoring.")
|
return fmt.Errorf("Pushed to package that is not part of the project. Ignoring. : %v", err)
|
||||||
h.LogError("%v: %v", h.Error, err)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
h.GitExec(common.DefaultGitPrj, "submodule", "update", "--init", "--depth", "1", "--checkout", action.Repository.Name)
|
h.GitExec(common.DefaultGitPrj, "submodule", "update", "--init", "--depth", "1", "--checkout", action.Repository.Name)
|
||||||
id, _ := h.GitBranchHead(filepath.Join(common.DefaultGitPrj, action.Repository.Name), action.Repository.Default_Branch)
|
id, _ := h.GitBranchHead(filepath.Join(common.DefaultGitPrj, action.Repository.Name), action.Repository.Default_Branch)
|
||||||
@ -89,76 +59,22 @@ func (rw *RequestHandler) processPushAction() {
|
|||||||
h.GitExec(filepath.Join(common.DefaultGitPrj, action.Repository.Name), "checkout", id)
|
h.GitExec(filepath.Join(common.DefaultGitPrj, action.Repository.Name), "checkout", id)
|
||||||
h.GitExec(common.DefaultGitPrj, "commit", "-a", "-m", "Automatic update via push")
|
h.GitExec(common.DefaultGitPrj, "commit", "-a", "-m", "Automatic update via push")
|
||||||
h.GitExec(common.DefaultGitPrj, "push")
|
h.GitExec(common.DefaultGitPrj, "push")
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h.Log("push of refs not on the main branch. ignoring.")
|
h.Log("push of refs not on the main branch. ignoring.")
|
||||||
}
|
|
||||||
|
|
||||||
func createListenServer() {
|
|
||||||
http.HandleFunc("/" + BotName, func(res http.ResponseWriter, req *http.Request) {
|
|
||||||
var h RequestHandler;
|
|
||||||
h.r = common.CreateRequestHandler(GitAuthor, BotName)
|
|
||||||
// defer h.Close()
|
|
||||||
|
|
||||||
if len(req.Header.Get("Content-Type")) == 0 ||
|
|
||||||
req.Header["Content-Type"][0] != "application/json" ||
|
|
||||||
req.Method != "POST" {
|
|
||||||
|
|
||||||
h.r.WriteError()
|
|
||||||
res.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
hdr := req.Header[common.GiteaRequestHeader]
|
|
||||||
if len(hdr) != 1 {
|
|
||||||
h.r.LogError("Unsupported number of %s headers: %d: %#v\n", common.GiteaRequestHeader, len(hdr), hdr)
|
|
||||||
h.r.WriteError()
|
|
||||||
res.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
reqType := hdr[0]
|
|
||||||
|
|
||||||
switch reqType {
|
|
||||||
case "repository":
|
|
||||||
h.r.ParseRepositoryRequest(req.Body)
|
|
||||||
h.processRepositoryAction()
|
|
||||||
case "push":
|
|
||||||
h.r.ParsePushRequest(req.Body)
|
|
||||||
h.processPushAction()
|
|
||||||
default:
|
|
||||||
h.r.LogError("Unsupported request type: %s", reqType)
|
|
||||||
res.WriteHeader(http.StatusInternalServerError)
|
|
||||||
}
|
|
||||||
|
|
||||||
if h.r.HasError() {
|
|
||||||
h.r.WriteError()
|
|
||||||
res.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
res.Header().Add("Content-Type", "application/json")
|
|
||||||
res.WriteHeader(http.StatusOK)
|
|
||||||
})
|
|
||||||
|
|
||||||
log.Fatal(http.ListenAndServe("[::1]:8000", nil))
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseGiteaSecretToken() error {
|
|
||||||
GiteaToken = os.Getenv(common.GiteaTokenEnv)
|
|
||||||
if len(GiteaToken) < 10 {
|
|
||||||
return errors.New(common.GiteaTokenEnv + " not provided")
|
|
||||||
}
|
|
||||||
|
|
||||||
err := os.Setenv(common.GiteaTokenEnv, "")
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("%s: %v", "Cannot reset "+common.GiteaTokenEnv, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
parseGiteaSecretToken()
|
var defs common.ListenDefinitions
|
||||||
createListenServer()
|
|
||||||
|
defs.Url = "prjgit-updater"
|
||||||
|
defs.GitAuthor = "GiteaBot - AutoDevel"
|
||||||
|
defs.Handlers[common.RequestType_Push] = processPushAction
|
||||||
|
defs.Handlers[common.RequestType_Repository] = processRepositoryAction
|
||||||
|
|
||||||
|
common.RequireGiteaSecretToken()
|
||||||
|
common.StartServer(defs)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user