diff --git a/pkg/cibot/pullrequest.go b/pkg/cibot/pullrequest.go
index 8fb12f1dbaf762d86fd0306dd46503bac7d98ce1..5e7e93271e9728c9402dc232979a97de739511e6 100644
--- a/pkg/cibot/pullrequest.go
+++ b/pkg/cibot/pullrequest.go
@@ -1,6 +1,7 @@
package cibot
import (
+ "encoding/base64"
"fmt"
"strings"
@@ -64,6 +65,107 @@ func (s *Server) HandlePullRequestEvent(event *gitee.PullRequestEvent) {
return
}
}
+ case "merge":
+ glog.Info("Received a pull request merge event")
+ diff := ""
+ prjname := ""
+ existinprj := false
+ // get pr commit file list
+ owner := event.Repository.Namespace
+ repo := event.Repository.Name
+ number := event.PullRequest.Number
+ lvos := &gitee.GetV5ReposOwnerRepoPullsNumberFilesOpts{}
+ lvos.AccessToken = optional.NewString(s.Config.GiteeToken)
+ fls, _, err := s.GiteeClient.PullRequestsApi.GetV5ReposOwnerRepoPullsNumberFiles(s.Context, owner, repo, number, lvos)
+
+ if err != nil {
+ glog.Errorf("unable to get pr file list. err: %v", err)
+ return
+ }
+
+ // check yaml has modified? and get diff
+ for _, file := range fls {
+ glog.Infof(file.Patch.Diff)
+ if strings.Contains(file.Filename, "src-openeuler.yaml") {
+ glog.Infof("src-openeuler.yaml has been modified")
+ diff = file.Patch.Diff
+ break
+ }
+ }
+
+ // get the yaml diff
+ glog.Infof(diff)
+ if strings.Contains(diff, "+- name:") {
+ difs := strings.Fields(diff)
+ glog.Infof(difs[0])
+ for idx, str := range difs {
+ // glog.Infof(str)
+ if str == "+-" && difs[idx+1] == "name:" {
+ prjname = difs[idx+2]
+ glog.Infof(prjname)
+ }
+ }
+ }
+
+ // get branch sha value for getting repo tree
+ repoinfra := "infrastructure"
+ branchm := "master"
+ lvosbranch := &gitee.GetV5ReposOwnerRepoBranchesBranchOpts{}
+ lvosbranch.AccessToken = optional.NewString(s.Config.GiteeToken)
+ branch, _, err := s.GiteeClient.RepositoriesApi.GetV5ReposOwnerRepoBranchesBranch(s.Context, owner, repoinfra, branchm, lvosbranch)
+
+ // look up the obs project in infrastructure
+ treesha := branch.Commit.Sha
+ lvostree := &gitee.GetV5ReposOwnerRepoGitTreesShaOpts{}
+ lvostree.AccessToken = optional.NewString(s.Config.GiteeToken)
+ lvostree.Recursive = optional.NewInt32(1)
+ tree, _, err := s.GiteeClient.GitDataApi.GetV5ReposOwnerRepoGitTreesSha(s.Context, owner, repoinfra, treesha, lvostree)
+ for _, dir := range tree.Tree {
+ if strings.Contains(dir.Path, "/"+prjname+"/") {
+ glog.Infof("path:%v, sha:%v", dir.Path, dir.Sha)
+ existinprj = true
+ }
+ }
+
+ // if not exist in obs project
+ if existinprj {
+ glog.Infof("Project already in obs, do not need create.")
+ return
+ }
+
+ glog.Infof("Begin to create new project file, project name:%v.", prjname)
+
+ newfbody := gitee.NewFileParam{}
+ newfbody.AccessToken = s.Config.GiteeToken
+ newfbody.AuthorName = event.PullRequest.User.Login
+ newfbody.AuthorEmail = event.PullRequest.User.Email
+ newfbody.CommitterName = event.PullRequest.User.Login
+ newfbody.CommitterEmail = event.PullRequest.User.Email
+ newfbody.Branch = branchm
+ newfbody.Message = "add project according to src-openeuler.yaml in repo community."
+
+ // add _service file
+ _servicepath := "obs/team_usage/obs_meta/projects/openEuler:Mainline/" + prjname + "/_service"
+ _service := "\n" +
+ " \n" +
+ " repo\n" +
+ " next/openEuler/" + prjname + "\n" +
+ " \n" +
+ ""
+ _serbase64 := base64.StdEncoding.EncodeToString([]byte(_service))
+ newfbody.Content = _serbase64
+ s.GiteeClient.RepositoriesApi.PostV5ReposOwnerRepoContentsPath(s.Context, owner, repoinfra, _servicepath, newfbody)
+
+ // add _meta file
+ _metapath := "obs/team_usage/obs_meta/projects/openEuler:Mainline/" + prjname + "/.osc/_meta"
+ _meta := "\n" +
+ " \n" +
+ " \n" +
+ "\n"
+ _metabase64 := base64.StdEncoding.EncodeToString([]byte(_meta))
+ newfbody.Content = _metabase64
+ //glog.Infof("owner:%v, repo:%v, _metapath:%v, _meta:%v", owner, repoinfra, _metapath, _meta)
+ s.GiteeClient.RepositoriesApi.PostV5ReposOwnerRepoContentsPath(s.Context, owner, repoinfra, _metapath, newfbody)
}
}
@@ -151,7 +253,7 @@ func (s *Server) legalForMerge(labels []gitee.Label) bool {
leastLgtm := 0
if s.Config.LgtmCountsRequired > 1 {
leastLgtm = s.Config.LgtmCountsRequired
- lgtmPrefix =fmt.Sprintf(LabelLgtmWithCommenter, "")
+ lgtmPrefix = fmt.Sprintf(LabelLgtmWithCommenter, "")
} else {
leastLgtm = 1
lgtmPrefix = LabelNameLgtm