diff --git a/scm/const.go b/scm/const.go index 638560da3..66551e2ac 100644 --- a/scm/const.go +++ b/scm/const.go @@ -121,6 +121,7 @@ const ( DriverBitbucket DriverStash DriverCoding + DriverGitee ) // String returns the string representation of Driver. @@ -140,6 +141,8 @@ func (d Driver) String() (s string) { return "stash" case DriverCoding: return "coding" + case DriverGitee: + return "gitee" default: return "unknown" } diff --git a/scm/driver/gitee/content.go b/scm/driver/gitee/content.go new file mode 100644 index 000000000..7ac8d6445 --- /dev/null +++ b/scm/driver/gitee/content.go @@ -0,0 +1,142 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/base64" + "fmt" + + "github.com/drone/go-scm/scm" +) + +type contentService struct { + client *wrapper +} + +func (s *contentService) Find(ctx context.Context, repo, path, ref string) (*scm.Content, *scm.Response, error) { + endpoint := fmt.Sprintf("repos/%s/contents/%s?ref=%s", repo, path, ref) + out := new(content) + res, err := s.client.do(ctx, "GET", endpoint, nil, out) + raw, _ := base64.StdEncoding.DecodeString(out.Content) + return &scm.Content{ + Path: out.Path, + Data: raw, + Sha: out.Sha, + }, res, err +} + +func (s *contentService) Create(ctx context.Context, repo, path string, params *scm.ContentParams) (*scm.Response, error) { + endpoint := fmt.Sprintf("repos/%s/contents/%s", repo, path) + in := &contentCreateUpdate{ + Message: params.Message, + Branch: params.Branch, + Content: params.Data, + Committer: commitAuthor{ + Name: params.Signature.Name, + Email: params.Signature.Email, + }, + Author: commitAuthor{ + Name: params.Signature.Name, + Email: params.Signature.Email, + }, + } + + res, err := s.client.do(ctx, "POST", endpoint, in, nil) + return res, err +} + +func (s *contentService) Update(ctx context.Context, repo, path string, params *scm.ContentParams) (*scm.Response, error) { + endpoint := fmt.Sprintf("repos/%s/contents/%s", repo, path) + in := &contentCreateUpdate{ + Message: params.Message, + Branch: params.Branch, + Content: params.Data, + Sha: params.Sha, + Committer: commitAuthor{ + Name: params.Signature.Name, + Email: params.Signature.Email, + }, + Author: commitAuthor{ + Name: params.Signature.Name, + Email: params.Signature.Email, + }, + } + res, err := s.client.do(ctx, "PUT", endpoint, in, nil) + return res, err +} + +func (s *contentService) Delete(ctx context.Context, repo, path string, params *scm.ContentParams) (*scm.Response, error) { + endpoint := fmt.Sprintf("repos/%s/contents/%s", repo, path) + in := &contentCreateUpdate{ + Message: params.Message, + Branch: params.Branch, + Sha: params.Sha, + Committer: commitAuthor{ + Name: params.Signature.Name, + Email: params.Signature.Email, + }, + Author: commitAuthor{ + Name: params.Signature.Name, + Email: params.Signature.Email, + }, + } + res, err := s.client.do(ctx, "DELETE", endpoint, in, nil) + return res, err +} + +func (s *contentService) List(ctx context.Context, repo, path, ref string, _ scm.ListOptions) ([]*scm.ContentInfo, *scm.Response, error) { + endpoint := fmt.Sprintf("repos/%s/contents/%s?ref=%s", repo, path, ref) + out := []*content{} + res, err := s.client.do(ctx, "GET", endpoint, nil, &out) + return convertContentInfoList(out), res, err +} + +type content struct { + Name string `json:"name"` + Path string `json:"path"` + Sha string `json:"sha"` + Content string `json:"content"` + Type string `json:"type"` +} + +type contentCreateUpdate struct { + Branch string `json:"branch"` + Message string `json:"message"` + Content []byte `json:"content"` + Sha string `json:"sha"` + Author commitAuthor `json:"author"` + Committer commitAuthor `json:"committer"` +} + +type commitAuthor struct { + Name string `json:"name"` + Date string `json:"date"` + Email string `json:"email"` +} + +func convertContentInfoList(from []*content) []*scm.ContentInfo { + to := []*scm.ContentInfo{} + for _, v := range from { + to = append(to, convertContentInfo(v)) + } + return to +} +func convertContentInfo(from *content) *scm.ContentInfo { + to := &scm.ContentInfo{Path: from.Path} + switch from.Type { + case "file": + to.Kind = scm.ContentKindFile + case "dir": + to.Kind = scm.ContentKindDirectory + case "symlink": + to.Kind = scm.ContentKindSymlink + case "submodule": + to.Kind = scm.ContentKindGitlink + default: + to.Kind = scm.ContentKindUnsupported + } + return to +} diff --git a/scm/driver/gitee/content_test.go b/scm/driver/gitee/content_test.go new file mode 100644 index 000000000..8006b4ac1 --- /dev/null +++ b/scm/driver/gitee/content_test.go @@ -0,0 +1,198 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "github.com/drone/go-scm/scm" + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" + "io/ioutil" + "testing" +) + +func TestContentFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/contents/README.md"). + MatchParam("ref", "d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/content.json") + + client := NewDefault() + got, res, err := client.Contents.Find( + context.Background(), + "kit101/drone-yml-test", + "README.md", + "d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83", + ) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Content) + raw, _ := ioutil.ReadFile("testdata/content.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestContentCreate(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Post("/repos/kit101/drone-yml-test/contents/apitest/CreateByDroneGiteeProvider.md"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/content_create.json") + + params := &scm.ContentParams{ + Message: "my commit message", + Data: []byte("bY3JlYXRlIGJ5IGRyb25lLXNjbSBnaXRlZSBwcm92aWRlci4gMjAyMS0wOC0xNyAyMzowNToxNi4="), + Signature: scm.Signature{ + Name: "kit101", + Email: "kit101@gitee.com", + }, + } + + client := NewDefault() + res, err := client.Contents.Create( + context.Background(), + "kit101/drone-yml-test", + "apitest/CreateByDroneGiteeProvider.md", + params, + ) + + if err != nil { + t.Error(err) + return + } + + if res.Status != 201 { + t.Errorf("Unexpected Results") + } +} + +func TestContentUpdate(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Put("/repos/kit101/drone-yml-test/contents/apitest/UpdateByDroneGiteeProvider.md"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/content_update.json") + + params := &scm.ContentParams{ + Message: "my commit message by update", + Data: []byte("bdXBkYXRlIGJ5IGRyb25lLXNjbSBnaXRlZSBwcm92aWRlci4gMjAyMS0wOC0xNyAyMzozMDozNy4="), + Sha: "9de0cf94e1e3c1cbe0a25c3865de4cc9ede7ad3e", + Signature: scm.Signature{ + Name: "kit101", + Email: "kit101@gitee.com", + }, + } + + client := NewDefault() + res, err := client.Contents.Update( + context.Background(), + "kit101/drone-yml-test", + "apitest/UpdateByDroneGiteeProvider.md", + params, + ) + + if err != nil { + t.Error(err) + return + } + + if res.Status != 200 { + t.Errorf("Unexpected Results") + } +} + +func TestContentDelete(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Delete("/repos/kit101/drone-yml-test/contents/apitest/DeleteByDroneGiteeProvider.md"). + Reply(204). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/content_delete.json") + + contentParams := scm.ContentParams{ + Branch: "master", + Sha: "ae0653e4ab697cd77fc559cd798bdb30e8bb4d7e", + Message: "delete commit message", + Signature: scm.Signature{ + Name: "kit101", + Email: "kit101@gitee.com", + }, + } + client := NewDefault() + res, err := client.Contents.Delete( + context.Background(), + "kit101/drone-yml-test", + "apitest/DeleteByDroneGiteeProvider.md", + &contentParams, + ) + if err != nil { + t.Error(err) + return + } + + if got, want := res.Status, 204; got != want { + t.Errorf("Want response status %d, got %d", want, got) + } + t.Run("Request", testRequest(res)) +} + +func TestContentList(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/contents/apitest"). + MatchParam("ref", "master"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/content_list.json") + + client := NewDefault() + got, res, err := client.Contents.List( + context.Background(), + "kit101/drone-yml-test", + "apitest", + "master", + scm.ListOptions{}, + ) + if err != nil { + t.Error(err) + return + } + + want := []*scm.ContentInfo{} + raw, _ := ioutil.ReadFile("testdata/content_list.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} diff --git a/scm/driver/gitee/git.go b/scm/driver/gitee/git.go new file mode 100644 index 000000000..c70ceade5 --- /dev/null +++ b/scm/driver/gitee/git.go @@ -0,0 +1,301 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + "github.com/drone/go-scm/scm" + "time" +) + +type gitService struct { + client *wrapper +} + +func (s *gitService) CreateBranch(ctx context.Context, repo string, params *scm.CreateBranch) (*scm.Response, error) { + path := fmt.Sprintf("repos/%s/branches", repo) + in := &branchCreate{ + Refs: params.Sha, + BranchName: params.Name, + } + res, err := s.client.do(ctx, "POST", path, in, nil) + return res, err +} + +func (s *gitService) FindBranch(ctx context.Context, repo, name string) (*scm.Reference, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/branches/%s", repo, name) + out := new(branch) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertBranch(out), res, err +} + +func (s *gitService) FindCommit(ctx context.Context, repo, ref string) (*scm.Commit, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/commits/%s", repo, ref) + out := new(commit) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertCommit(out), res, err +} + +func (s *gitService) FindTag(ctx context.Context, repo, name string) (*scm.Reference, *scm.Response, error) { + tags, res, err := s.ListTags(ctx, repo, scm.ListOptions{}) + if err != nil { + return nil, nil, err + } + for _, tag := range tags { + if tag.Name == name { + return tag, res, err + } + } + return nil, res, err +} + +func (s *gitService) ListBranches(ctx context.Context, repo string, _ scm.ListOptions) ([]*scm.Reference, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/branches", repo) + out := []*branch{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertBranchList(out), res, err +} + +func (s *gitService) ListCommits(ctx context.Context, repo string, opts scm.CommitListOptions) ([]*scm.Commit, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/commits?%s", repo, encodeCommitListOptions(opts)) + out := []*commit{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertCommitList(out), res, err +} + +func (s *gitService) ListTags(ctx context.Context, repo string, _ scm.ListOptions) ([]*scm.Reference, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/tags", repo) + out := []*releasesTags{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertTagList(out), res, err +} + +func (s *gitService) ListChanges(ctx context.Context, repo, ref string, _ scm.ListOptions) ([]*scm.Change, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/commits/%s", repo, ref) + out := new(commit) + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertChangeList(out.Files), res, err +} + +func (s *gitService) CompareChanges(ctx context.Context, repo, source, target string, _ scm.ListOptions) ([]*scm.Change, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/compare/%s...%s", repo, source, target) + out := new(compare) + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertChangeList(out.Files), res, err +} + +type branchCreate struct { + Refs string `json:"refs"` + BranchName string `json:"branch_name"` +} + +type branch struct { + //Links string `json:"_links"` + Name string `json:"name"` + Commit tree `json:"commit"` + Protected bool `json:"protected"` + ProtectionURL string `json:"protection_url"` +} + +type commit struct { + URL string `json:"url"` + Sha string `json:"sha"` + HtmlURL string `json:"html_url"` + CommentsURL string `json:"comments_url"` + Commit struct { + Author committer `json:"author"` + Committer committer `json:"committer"` + Message string `json:"message"` + Tree tree `json:"tree"` + } `json:"commit"` + Author author `json:"author"` + Committer author `json:"committer"` + Parents []tree `json:"parents"` + Stats struct { + ID string `json:"id"` + Additions int64 `json:"additions"` + Deletions int64 `json:"deletions"` + Total int64 `json:"total"` + } `json:"stats"` + Files []*file `json:"files"` +} + +type committer struct { + Name string `json:"name"` + Date time.Time `json:"date"` + Email string `json:"email"` +} + +type tree struct { + Sha string `json:"sha"` + URL string `json:"url"` +} + +type file struct { + SHA string `json:"sha"` + Filename string `json:"filename"` + Status string `json:"status"` + Additions int64 `json:"additions"` + Deletions int64 `json:"deletions"` + Changes int64 `json:"changes"` + BlobURL string `json:"blob_url"` + RawURL string `json:"raw_url"` + ContentURL string `json:"content_url"` + Patch string `json:"patch"` +} + +type compare struct { + BaseCommit struct { + URL string `json:"url"` + Sha string `json:"sha"` + HTMLURL string `json:"html_url"` + CommentsURL string `json:"comments_url"` + Commit compareCommit `json:"commit"` + Author compareAuthor `json:"author"` + Committer committer `json:"committer"` + Parents []tree `json:"parents"` + } `json:"base_commit"` + MergeBaseCommit struct { + URL string `json:"url"` + Sha string `json:"sha"` + HTMLURL string `json:"html_url"` + CommentsURL string `json:"comments_url"` + Commit compareCommit `json:"commit"` + Author compareAuthor `json:"author"` + Committer committer `json:"committer"` + Parents []tree `json:"parents"` + } `json:"merge_base_commit"` + Commits []struct { + URL string `json:"url"` + Sha string `json:"sha"` + HTMLURL string `json:"html_url"` + CommentsURL string `json:"comments_url"` + Commit compareCommit `json:"commit"` + Author compareAuthor `json:"author"` + Committer committer `json:"committer"` + Parents []tree `json:"parents"` + } `json:"commits"` + Files []*file `json:"files"` +} +type compareAuthor struct { + Name string `json:"name"` + Date time.Time `json:"date"` + Email string `json:"email"` +} +type compareCommit struct { + Author compareAuthor `json:"author"` + Committer committer `json:"committer"` + Message string `json:"message"` + Tree tree `json:"tree"` +} + +type releasesTags struct { + Name string `json:"name"` + Message string `json:"message"` + Commit struct { + Sha string `json:"sha"` + Date time.Time `json:"date"` + } `json:"commit"` +} + +type author struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + AvatarURL string `json:"avatar_url"` + URL string `json:"url"` + HTMLURL string `json:"html_url"` + FollowersURL string `json:"followers_url"` + FollowingURL string `json:"following_url"` + GistsURL string `json:"gists_url"` + StarredURL string `json:"starred_url"` + SubscriptionsURL string `json:"subscriptions_url"` + OrganizationsURL string `json:"organizations_url"` + ReposURL string `json:"repos_url"` + EventsURL string `json:"events_url"` + ReceivedEventsURL string `json:"received_events_url"` + Type string `json:"type"` +} + +func convertCommitList(from []*commit) []*scm.Commit { + to := []*scm.Commit{} + for _, v := range from { + to = append(to, convertCommit(v)) + } + return to +} + +func convertCommit(from *commit) *scm.Commit { + return &scm.Commit{ + Message: from.Commit.Message, + Sha: from.Sha, + Link: from.HtmlURL, + Author: scm.Signature{ + Name: from.Commit.Author.Name, + Email: from.Commit.Author.Email, + Date: from.Commit.Author.Date, + Login: from.Author.Login, + Avatar: from.Author.AvatarURL, + }, + Committer: scm.Signature{ + Name: from.Commit.Committer.Name, + Email: from.Commit.Committer.Email, + Date: from.Commit.Committer.Date, + Login: from.Committer.Login, + Avatar: from.Committer.AvatarURL, + }, + } +} + +func convertBranchList(from []*branch) []*scm.Reference { + to := []*scm.Reference{} + for _, v := range from { + to = append(to, convertBranch(v)) + } + return to +} + +func convertBranch(from *branch) *scm.Reference { + return &scm.Reference{ + Name: scm.TrimRef(from.Name), + Path: scm.ExpandRef(from.Name, "refs/heads/"), + Sha: from.Commit.Sha, + } +} + +func convertTagList(from []*releasesTags) []*scm.Reference { + to := []*scm.Reference{} + for _, v := range from { + to = append(to, convertTag(v)) + } + return to +} + +func convertTag(from *releasesTags) *scm.Reference { + return &scm.Reference{ + Name: scm.TrimRef(from.Name), + Path: scm.ExpandRef(from.Name, "refs/tags/"), + Sha: from.Commit.Sha, + } +} + +func convertChangeList(from []*file) []*scm.Change { + to := []*scm.Change{} + for _, v := range from { + to = append(to, convertChange(v)) + } + return to +} + +func convertChange(from *file) *scm.Change { + return &scm.Change{ + Path: from.Filename, + Added: from.Status == "added", + Deleted: from.Status == "removed", + Renamed: from.Status == "modified" && from.Additions == 0 && from.Deletions == 0 && from.Changes == 0, + BlobID: from.SHA, + } +} diff --git a/scm/driver/gitee/git_test.go b/scm/driver/gitee/git_test.go new file mode 100644 index 000000000..b62cd951c --- /dev/null +++ b/scm/driver/gitee/git_test.go @@ -0,0 +1,279 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "io/ioutil" + "testing" + + "github.com/drone/go-scm/scm" + + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" +) + +func TestGitCreateBranch(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Post("/repos/kit101/drone-yml-test/branches"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders) + + client := NewDefault() + input := scm.CreateBranch{ + Name: "create-by-api", + Sha: "b72a4c4a2d838d96a545a42d41d7776ae5566f4a", + } + res, err := client.Git.CreateBranch(context.Background(), "kit101/drone-yml-test", &input) + if err != nil { + t.Error(err) + return + } + + if got, want := res.Status, 201; got != want { + t.Errorf("Want response status %d, got %d", want, got) + } + t.Run("Request", testRequest(res)) +} + +func TestGitFindBranch(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/branches/master"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/branch.json") + + client := NewDefault() + got, res, err := client.Git.FindBranch(context.Background(), "kit101/drone-yml-test", "master") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Reference) + raw, _ := ioutil.ReadFile("testdata/branch.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestGitFindCommit(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/commit.json") + + client := NewDefault() + got, res, err := client.Git.FindCommit(context.Background(), "kit101/drone-yml-test", "e3c0ff4d5cef439ea11b30866fb1ed79b420801d") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Commit) + raw, _ := ioutil.ReadFile("testdata/commit.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestGitFindTag(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/tags"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/tags.json") + + client := NewDefault() + got, res, err := client.Git.FindTag(context.Background(), "kit101/drone-yml-test", "1.0") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Reference) + raw, _ := ioutil.ReadFile("testdata/tag.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestGitListBranches(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/branches"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/branches.json") + + client := NewDefault() + got, res, err := client.Git.ListBranches(context.Background(), "kit101/drone-yml-test", scm.ListOptions{}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Reference{} + raw, _ := ioutil.ReadFile("testdata/branches.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestGitListCommits(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/commits"). + MatchParam("sha", "master"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/commits.json") + + client := NewDefault() + got, res, err := client.Git.ListCommits(context.Background(), "kit101/drone-yml-test", + scm.CommitListOptions{Ref: "master", Page: 1, Size: 3}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Commit{} + raw, _ := ioutil.ReadFile("testdata/commits.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestGitListTags(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/tags"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/tags.json") + + client := NewDefault() + got, res, err := client.Git.ListTags(context.Background(), "kit101/drone-yml-test", scm.ListOptions{}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Reference{} + raw, _ := ioutil.ReadFile("testdata/tags.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestGitListChanges(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com"). + Get("/repos/kit101/drone-yml-test/commits/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/changes.json") + + client := NewDefault() + got, res, err := client.Git.ListChanges(context.Background(), "kit101/drone-yml-test", "7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", scm.ListOptions{}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Change{} + raw, _ := ioutil.ReadFile("testdata/changes.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestGitCompareChanges(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/compare/e3c0ff4d5cef439ea11b30866fb1ed79b420801d...2700445cd84c08546f4d003f8aa54d2099a006b7"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/compare.json") + + client := NewDefault() + got, res, err := client.Git.CompareChanges(context.Background(), "kit101/drone-yml-test", "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", "2700445cd84c08546f4d003f8aa54d2099a006b7", scm.ListOptions{}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Change{} + raw, _ := ioutil.ReadFile("testdata/compare.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} diff --git a/scm/driver/gitee/gitee.go b/scm/driver/gitee/gitee.go new file mode 100644 index 000000000..1403a7fe4 --- /dev/null +++ b/scm/driver/gitee/gitee.go @@ -0,0 +1,154 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package gitee implements a Gitee client. +package gitee + +import ( + "bytes" + "context" + "encoding/json" + "net/url" + "strconv" + "strings" + + "github.com/drone/go-scm/scm" +) + +// New returns a new Gitee API client. +func New(uri string) (*scm.Client, error) { + base, err := url.Parse(uri) + if err != nil { + return nil, err + } + if !strings.HasSuffix(base.Path, "/") { + base.Path = base.Path + "/" + } + client := &wrapper{new(scm.Client)} + client.BaseURL = base + // initialize services + client.Driver = scm.DriverGitee + client.Linker = &linker{websiteAddress(base)} + client.Contents = &contentService{client} + client.Git = &gitService{client} + client.Issues = &issueService{client} + client.Organizations = &organizationService{client} + client.PullRequests = &pullService{client} + client.Repositories = &RepositoryService{client} + client.Reviews = &reviewService{client} + client.Users = &userService{client} + client.Webhooks = &webhookService{client} + return client.Client, nil +} + +// NewDefault returns a new Gitee API client using the +// default gitee.com/api/v5 address. +func NewDefault() *scm.Client { + client, _ := New("https://gitee.com/api/v5") + return client +} + +// wrapper wraps the Client to provide high level helper functions +// for making http requests and unmarshaling the response. +type wrapper struct { + *scm.Client +} + +// do wraps the Client.Do function by creating the Request and +// unmarshalling the response. +func (c *wrapper) do(ctx context.Context, method, path string, in, out interface{}) (*scm.Response, error) { + req := &scm.Request{ + Method: method, + Path: path, + } + // if we are posting or putting data, we need to + // write it to the body of the request. + if in != nil { + buf := new(bytes.Buffer) + json.NewEncoder(buf).Encode(in) + req.Header = map[string][]string{ + "Content-Type": {"application/json"}, + } + req.Body = buf + } + // execute the http request + res, err := c.Client.Do(ctx, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + // parse the gitee request id. + res.ID = res.Header.Get("X-Request-Id") + + // gitee pageValues + populatePageValues(req, res) + + // if an error is encountered, unmarshal and return the + // error response. + if res.Status > 300 { + err := new(Error) + json.NewDecoder(res.Body).Decode(err) + return res, err + } + + if out == nil { + return res, nil + } + + // if a json response is expected, parse and return + // the json response. + return res, json.NewDecoder(res.Body).Decode(out) +} + +// Error represents a Gitee error. +type Error struct { + Message string `json:"message"` +} + +func (e *Error) Error() string { + return e.Message +} + +// helper function converts the Gitee API url to +// the website url. +func websiteAddress(u *url.URL) string { + host, proto := u.Host, u.Scheme + switch host { + case "gitee.com/api/v5": + return "https://gitee.com/" + } + return proto + "://" + host + "/" +} + +// populatePageValues parses the HTTP Link response headers +// and populates the various pagination link values in the +// Response. +// response header: total_page, total_count +func populatePageValues(req *scm.Request, resp *scm.Response) { + last, totalError := strconv.Atoi(resp.Header.Get("total_page")) + reqURL, err := url.Parse(req.Path) + if err != nil { + return + } + current, currentError := strconv.Atoi(reqURL.Query().Get("page")) + if totalError != nil && currentError != nil { + return + } + resp.Page.First = 1 + if last != 0 { + resp.Page.Last = last + } + if current != 0 { + if current < resp.Page.Last { + resp.Page.Next = current + 1 + } else { + resp.Page.Next = resp.Page.Last + } + if current > resp.Page.First { + resp.Page.Prev = current - 1 + } else { + resp.Page.Prev = resp.Page.First + } + } +} diff --git a/scm/driver/gitee/gitee_test.go b/scm/driver/gitee/gitee_test.go new file mode 100644 index 000000000..df990b06d --- /dev/null +++ b/scm/driver/gitee/gitee_test.go @@ -0,0 +1,97 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "net/url" + "testing" + + "github.com/drone/go-scm/scm" +) + +var mockHeaders = map[string]string{ + "X-Request-Id": "7cb049dbf1fafae67b4f0aa81ca7e870", +} + +var mockPageHeaders = map[string]string{ + "total_page": `3`, +} + +func TestClient(t *testing.T) { + client, err := New("https://gitee.com/api/v5") + if err != nil { + t.Error(err) + } + if got, want := client.BaseURL.String(), "https://gitee.com/api/v5/"; got != want { + t.Errorf("Want Client URL %q, got %q", want, got) + } +} + +func TestClient_Base(t *testing.T) { + client, err := New("https://gitee.com/api/v5") + if err != nil { + t.Error(err) + } + got, want := client.BaseURL.String(), "https://gitee.com/api/v5/" + if got != want { + t.Errorf("Want Client URL %q, got %q", want, got) + } +} + +func TestClient_Default(t *testing.T) { + client := NewDefault() + if got, want := client.BaseURL.String(), "https://gitee.com/api/v5/"; got != want { + t.Errorf("Want Client URL %q, got %q", want, got) + } +} + +func TestClient_Error(t *testing.T) { + _, err := New("http://a b.com/") + if err == nil { + t.Errorf("Expect error when invalid URL") + } +} + +func testPage(res *scm.Response) func(t *testing.T) { + return func(t *testing.T) { + if got, want := res.Page.Prev, 1; got != want { + t.Errorf("Want prev page %d, got %d", want, got) + } + if got, want := res.Page.Next, 2; got != want { + t.Errorf("Want next page %d, got %d", want, got) + } + if got, want := res.Page.Last, 3; got != want { + t.Errorf("Want last page %d, got %d", want, got) + } + if got, want := res.Page.First, 1; got != want { + t.Errorf("Want first page %d, got %d", want, got) + } + } +} + +func testRequest(res *scm.Response) func(t *testing.T) { + return func(t *testing.T) { + if got, want := res.ID, "7cb049dbf1fafae67b4f0aa81ca7e870"; got != want { + t.Errorf("Want X-Request-Id %q, got %q", want, got) + } + } +} + +func TestWebsiteAddress(t *testing.T) { + tests := []struct { + api string + web string + }{ + {"https://gitee.com/api/v5/", "https://gitee.com/"}, + } + + for _, test := range tests { + parsed, _ := url.Parse(test.api) + got, want := websiteAddress(parsed), test.web + if got != want { + t.Errorf("Want website address %q, got %q", want, got) + } + } +} diff --git a/scm/driver/gitee/integration/content_test.go b/scm/driver/gitee/integration/content_test.go new file mode 100644 index 000000000..8e0404906 --- /dev/null +++ b/scm/driver/gitee/integration/content_test.go @@ -0,0 +1,54 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +func testContents(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testContentFind(client)) + t.Run("Find/Branch", testContentFindBranch(client)) + } +} + +func testContentFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Contents.Find(context.Background(), "kit101/drone-yml-test", "main.py", "5e7876efb3468ff679410b82a72f7c002382d41e") + if err != nil { + t.Error(err) + return + } + if got, want := result.Path, "main.py"; got != want { + t.Errorf("Got file path %q, want %q", got, want) + } + if got, want := string(result.Data), "if __name__ == '__main__':\r\n print('Hello world.')"; got != want { + t.Errorf("Got file data %q, want %q", got, want) + } + } +} + +func testContentFindBranch(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Contents.Find(context.Background(), "kit101/drone-yml-test", "main.py", "feat-4") + if err != nil { + t.Error(err) + return + } + if got, want := result.Path, "main.py"; got != want { + t.Errorf("Got file path %q, want %q", got, want) + } + if got, want := string(result.Data), "if __name__ == '__main__':\r\n print('Hello world.')"; got != want { + t.Errorf("Got file data %q, want %q", got, want) + } + } +} diff --git a/scm/driver/gitee/integration/git_test.go b/scm/driver/gitee/integration/git_test.go new file mode 100644 index 000000000..d7267fc60 --- /dev/null +++ b/scm/driver/gitee/integration/git_test.go @@ -0,0 +1,214 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +// +// git sub-tests +// + +func testGit(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Branches", testBranches(client)) + t.Run("Commits", testCommits(client)) + t.Run("Tags", testTags(client)) + } +} + +// +// branch sub-tests +// + +func testBranches(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testBranchFind(client)) + t.Run("List", testBranchList(client)) + } +} + +func testBranchFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Git.FindBranch(context.Background(), "kit101/drone-yml-test", "feat-4") + if err != nil { + t.Error(err) + return + } + t.Run("Branch", testBranch(result)) + } +} + +func testBranchList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.ListOptions{} + result, _, err := client.Git.ListBranches(context.Background(), "kit101/drone-yml-test", opts) + if err != nil { + t.Error(err) + return + } + if len(result) == 0 { + t.Errorf("Want a non-empty branch list") + } + for _, branch := range result { + if branch.Name == "feat-4" { + t.Run("Branch", testBranch(branch)) + } + } + } +} + +// +// branch sub-tests +// + +func testTags(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testTagFind(client)) + t.Run("List", testTagList(client)) + } +} + +func testTagFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + tag, _, err := client.Git.FindTag(context.Background(), "kit101/drone-yml-test", "1.1") + if err != nil { + t.Error(err) + return + } + t.Run("Tag", testTag(tag)) + } +} + +func testTagList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.ListOptions{} + result, _, err := client.Git.ListTags(context.Background(), "kit101/drone-yml-test", opts) + if err != nil { + t.Error(err) + return + } + if len(result) == 0 { + t.Errorf("Want a non-empty tag list") + } + for _, tag := range result { + if tag.Name == "1.1" { + t.Run("Tag", testTag(tag)) + } + } + } +} + +// +// commit sub-tests +// + +func testCommits(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testCommitFind(client)) + t.Run("List", testCommitList(client)) + } +} + +func testCommitFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Git.FindCommit(context.Background(), "kit101/drone-yml-test", "e3c0ff4d5cef439ea11b30866fb1ed79b420801d") + if err != nil { + t.Error(err) + return + } + t.Run("Commit", testCommit(result)) + } +} + +func testCommitList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.CommitListOptions{ + Ref: "feat-4", + } + result, _, err := client.Git.ListCommits(context.Background(), "kit101/drone-yml-test", opts) + if err != nil { + t.Error(err) + return + } + if len(result) == 0 { + t.Errorf("Want a non-empty commit list") + } + for _, commit := range result { + if commit.Sha == "e3c0ff4d5cef439ea11b30866fb1ed79b420801d" { + t.Run("Commit", testCommit(commit)) + } + } + } +} + +// +// struct sub-tests +// + +func testBranch(branch *scm.Reference) func(t *testing.T) { + return func(t *testing.T) { + if got, want := branch.Name, "feat-4"; got != want { + t.Errorf("Want branch Name %q, got %q", want, got) + } + if got, want := branch.Sha, "2eac1cac02c325058cf959725c45b0612d3e8177"; got != want { + t.Errorf("Want branch Avatar %q, got %q", want, got) + } + } +} + +func testTag(tag *scm.Reference) func(t *testing.T) { + return func(t *testing.T) { + if got, want := tag.Name, "1.1"; got != want { + t.Errorf("Want tag Name %q, got %q", want, got) + } + if got, want := tag.Sha, "5e7876efb3468ff679410b82a72f7c002382d41e"; got != want { + t.Errorf("Want tag Avatar %q, got %q", want, got) + } + } +} + +func testCommit(commit *scm.Commit) func(t *testing.T) { + return func(t *testing.T) { + if got, want := commit.Message, "add/update/delete/rename\n"; got != want { + t.Errorf("Want commit Message %q, got %q", want, got) + } + if got, want := commit.Sha, "e3c0ff4d5cef439ea11b30866fb1ed79b420801d"; got != want { + t.Errorf("Want commit Sha %q, got %q", want, got) + } + if got, want := commit.Author.Name, "kit101"; got != want { + t.Errorf("Want commit author Name %q, got %q", want, got) + } + if got, want := commit.Author.Email, "qkssk1711@163.com"; got != want { + t.Errorf("Want commit author Email %q, got %q", want, got) + } + if got, want := commit.Author.Date.Unix(), int64(1629733553); got != want { + t.Errorf("Want commit author Date %d, got %d", want, got) + } + if got, want := commit.Committer.Name, "kit101"; got != want { + t.Errorf("Want commit author Name %q, got %q", want, got) + } + if got, want := commit.Committer.Email, "qkssk1711@163.com"; got != want { + t.Errorf("Want commit author Email %q, got %q", want, got) + } + if got, want := commit.Committer.Date.Unix(), int64(1629733553); got != want { + t.Errorf("Want commit author Date %d, got %d", want, got) + } + } +} diff --git a/scm/driver/gitee/integration/gitee_test.go b/scm/driver/gitee/integration/gitee_test.go new file mode 100644 index 000000000..cb9918130 --- /dev/null +++ b/scm/driver/gitee/integration/gitee_test.go @@ -0,0 +1,37 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "net/http" + "os" + "testing" + + "github.com/drone/go-scm/scm/driver/gitee" + "github.com/drone/go-scm/scm/transport" +) + +func TestGitee(t *testing.T) { + accessToken := os.Getenv("GITEE_TOKEN") + if accessToken == "" { + t.Skipf("missing GITEE_TOKEN environment variable") + return + } + + client := gitee.NewDefault() + client.Client = &http.Client{ + Transport: &transport.BearerToken{ + Token: accessToken, + }, + } + + t.Run("Contents", testContents(client)) + t.Run("Git", testGit(client)) + t.Run("Issues", testIssues(client)) + t.Run("Organizations", testOrgs(client)) + t.Run("PullRequests", testPullRequests(client)) + t.Run("Repositories", testRepos(client)) + t.Run("Users", testUsers(client)) +} diff --git a/scm/driver/gitee/integration/integration.go b/scm/driver/gitee/integration/integration.go new file mode 100644 index 000000000..acc0ad401 --- /dev/null +++ b/scm/driver/gitee/integration/integration.go @@ -0,0 +1,5 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration diff --git a/scm/driver/gitee/integration/issue_test.go b/scm/driver/gitee/integration/issue_test.go new file mode 100644 index 000000000..f2d6ca846 --- /dev/null +++ b/scm/driver/gitee/integration/issue_test.go @@ -0,0 +1,145 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +// +// issue sub-tests +// + +func testIssues(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("List", testIssueList(client)) + t.Run("Find", testIssueFind(client)) + t.Run("Comments", testIssueComments(client)) + } +} + +func testIssueList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.IssueListOptions{ + Open: true, + Closed: true, + } + result, _, err := client.Issues.List(context.Background(), "kit101/drone-yml-test", opts) + if err != nil { + t.Error(err) + } + if len(result) == 0 { + t.Errorf("Got empty issue list") + } + } +} + +func testIssueFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Issues.Find(context.Background(), "kit101/drone-yml-test", 735267685380) + if err != nil { + t.Error(err) + } + t.Run("Issue", testIssue(result)) + } +} + +// +// issue comment sub-tests +// + +func testIssueComments(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Run("List", testIssueCommentList(client)) + t.Run("Find", testIssueCommentFind(client)) + } +} + +func testIssueCommentList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + opts := scm.ListOptions{} + result, _, err := client.Issues.ListComments(context.Background(), "kit101/drone-yml-test", 735267685380, opts) + if err != nil { + t.Error(err) + } + if len(result) == 0 { + t.Errorf("Want a non-empty issue comment list") + } + for _, comment := range result { + if comment.ID == 6877445 { + t.Run("Comment", testIssueComment(comment)) + } + } + } +} + +func testIssueCommentFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + result, _, err := client.Issues.FindComment(context.Background(), "kit101/drone-yml-test", 735267685380, 6877445) + if err != nil { + t.Error(err) + } + t.Run("Comment", testIssueComment(result)) + } +} + +// +// struct sub-tests +// + +func testIssue(issue *scm.Issue) func(t *testing.T) { + return func(t *testing.T) { + if got, want := issue.Number, 735267685380; got != want { + t.Errorf("Want issue Number %d, got %d", want, got) + } + if got, want := issue.Title, "test issue 1"; got != want { + t.Errorf("Want issue Title %q, got %q", want, got) + } + if got, want := issue.Body, "test issue 1"; got != want { + t.Errorf("Want issue Body %q, got %q", want, got) + } + if got, want := issue.Link, "https://gitee.com/kit101/drone-yml-test/issues/I4CD5P"; got != want { + t.Errorf("Want issue Link %q, got %q", want, got) + } + if got, want := issue.Author.Login, "kit101"; got != want { + t.Errorf("Want issue Author Login %q, got %q", want, got) + } + if got, want := issue.Author.Avatar, "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png"; got != want { + t.Errorf("Want issue Author Avatar %q, got %q", want, got) + } + if got, want := issue.Closed, true; got != want { + t.Errorf("Want issue Closed %v, got %v", want, got) + } + if got, want := issue.Created.Unix(), int64(1632878488); got != want { + t.Errorf("Want issue Created %d, got %d", want, got) + } + } +} + +func testIssueComment(comment *scm.Comment) func(t *testing.T) { + return func(t *testing.T) { + if got, want := comment.ID, 6877445; got != want { + t.Errorf("Want issue comment ID %d, got %d", want, got) + } + if got, want := comment.Body, "it's ok."; got != want { + t.Errorf("Want issue comment Body %q, got %q", want, got) + } + if got, want := comment.Author.Login, "kit101"; got != want { + t.Errorf("Want issue comment Author Login %q, got %q", want, got) + } + if got, want := comment.Created.Unix(), int64(1632884450); got != want { + t.Errorf("Want issue comment Created %d, got %d", want, got) + } + if got, want := comment.Updated.Unix(), int64(1632884450); got != want { + t.Errorf("Want issue comment Updated %d, got %d", want, got) + } + } +} diff --git a/scm/driver/gitee/integration/org_test.go b/scm/driver/gitee/integration/org_test.go new file mode 100644 index 000000000..e25590a19 --- /dev/null +++ b/scm/driver/gitee/integration/org_test.go @@ -0,0 +1,51 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +// +// organization sub-tests +// + +func testOrgs(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testOrgFind(client)) + } +} + +func testOrgFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Organizations.Find(context.Background(), "gitee-community") + if err != nil { + t.Error(err) + return + } + t.Run("Organization", testOrg(result)) + } +} + +// +// struct sub-tests +// + +func testOrg(organization *scm.Organization) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + if got, want := organization.Name, "gitee-community"; got != want { + t.Errorf("Want organization Name %q, got %q", want, got) + } + if got, want := organization.Avatar, "https://portrait.gitee.com/uploads/avatars/namespace/1715/5146011_gitee-community_1607593452.png?is_link=true"; got != want { + t.Errorf("Want organization Avatar %q, got %q", want, got) + } + } +} diff --git a/scm/driver/gitee/integration/pr_test.go b/scm/driver/gitee/integration/pr_test.go new file mode 100644 index 000000000..99caee142 --- /dev/null +++ b/scm/driver/gitee/integration/pr_test.go @@ -0,0 +1,212 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +// +// pull request sub-tests +// + +func testPullRequests(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("List", testPullRequestList(client)) + t.Run("Find", testPullRequestFind(client)) + t.Run("Changes", testPullRequestChanges(client)) + t.Run("Comments", testPullRequestComments(client)) + } +} + +func testPullRequestList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.PullRequestListOptions{ + Open: true, + Closed: true, + } + result, _, err := client.PullRequests.List(context.Background(), "kit101/drone-yml-test", opts) + if err != nil { + t.Error(err) + } + if len(result) == 0 { + t.Errorf("Got empty pull request list") + } + for _, pr := range result { + if pr.Number == 7 { + t.Run("PullRequest", testPullRequest(pr)) + } + } + } +} + +func testPullRequestFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.PullRequests.Find(context.Background(), "kit101/drone-yml-test", 7) + if err != nil { + t.Error(err) + } + t.Run("PullRequest", testPullRequest(result)) + } +} + +// +// pull request comment sub-tests +// + +func testPullRequestComments(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("List", testPullRequestCommentFind(client)) + t.Run("Find", testPullRequestCommentList(client)) + } +} + +func testPullRequestCommentFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.PullRequests.FindComment(context.Background(), "kit101/drone-yml-test", 7, 6922557) + if err != nil { + t.Error(err) + } + t.Run("Comment", testPullRequestComment(result)) + } +} + +func testPullRequestCommentList(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.ListOptions{} + result, _, err := client.PullRequests.ListComments(context.Background(), "kit101/drone-yml-test", 7, opts) + if err != nil { + t.Error(err) + } + if len(result) == 0 { + t.Errorf("Got empty pull request comment list") + } + for _, comment := range result { + if comment.ID == 6922557 { + t.Run("Comment", testPullRequestComment(comment)) + } + } + } +} + +// +// pull request changes sub-tests +// + +func testPullRequestChanges(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + opts := scm.ListOptions{} + result, _, err := client.PullRequests.ListChanges(context.Background(), "kit101/drone-yml-test", 7, opts) + if err != nil { + t.Error(err) + } + if len(result) == 0 { + t.Errorf("Got empty pull request change list") + return + } + t.Run("File", testChange(result[0])) + } +} + +// +// struct sub-tests +// + +func testPullRequest(pr *scm.PullRequest) func(t *testing.T) { + return func(t *testing.T) { + if got, want := pr.Number, 7; got != want { + t.Errorf("Want pr Number %d, got %d", want, got) + } + if got, want := pr.Title, "feat add 3"; got != want { + t.Errorf("Want pr Title %q, got %q", want, got) + } + if got, want := pr.Body, ""; got != want { + t.Errorf("Want pr Body %q, got %q", want, got) + } + if got, want := pr.Source, "feat-2"; got != want { + t.Errorf("Want pr Source %q, got %q", want, got) + } + if got, want := pr.Target, "master"; got != want { + t.Errorf("Want pr Target %q, got %q", want, got) + } + if got, want := pr.Ref, "refs/pull/7/head"; got != want { + t.Errorf("Want pr Ref %q, got %q", want, got) + } + if got, want := pr.Sha, "6168d9dae737b47f00c59fafca10c913a6850c3a"; got != want { + t.Errorf("Want pr Sha %q, got %q", want, got) + } + if got, want := pr.Link, "https://gitee.com/kit101/drone-yml-test/pulls/7"; got != want { + t.Errorf("Want pr Link %q, got %q", want, got) + } + if got, want := pr.Diff, "https://gitee.com/kit101/drone-yml-test/pulls/7.diff"; got != want { + t.Errorf("Want pr Diff %q, got %q", want, got) + } + if got, want := pr.Author.Login, "kit101"; got != want { + t.Errorf("Want pr Author Login %q, got %q", want, got) + } + if got, want := pr.Author.Avatar, "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png"; got != want { + t.Errorf("Want pr Author Avatar %q, got %q", want, got) + } + if got, want := pr.Closed, false; got != want { + t.Errorf("Want pr Closed %v, got %v", want, got) + } + if got, want := pr.Merged, false; got != want { + t.Errorf("Want pr Merged %v, got %v", want, got) + } + if got, want := pr.Created.Unix(), int64(1632996627); got != want { + t.Errorf("Want pr Created %d, got %d", want, got) + } + } +} + +func testPullRequestComment(comment *scm.Comment) func(t *testing.T) { + return func(t *testing.T) { + if got, want := comment.ID, 6922557; got != want { + t.Errorf("Want pr comment ID %d, got %d", want, got) + } + if got, want := comment.Body, "test comment 1"; got != want { + t.Errorf("Want pr comment Body %q, got %q", want, got) + } + if got, want := comment.Author.Login, "kit101"; got != want { + t.Errorf("Want pr comment Author Login %q, got %q", want, got) + } + if got, want := comment.Author.Name, "kit101"; got != want { + t.Errorf("Want pr comment Author Name %q, got %q", want, got) + } + if got, want := comment.Created.Unix(), int64(1633570005); got != want { + t.Errorf("Want pr comment Created %d, got %d", want, got) + } + if got, want := comment.Updated.Unix(), int64(1633570005); got != want { + t.Errorf("Want pr comment Updated %d, got %d", want, got) + } + } +} + +func testChange(change *scm.Change) func(t *testing.T) { + return func(t *testing.T) { + if got, want := change.Path, "change/add3.txt"; got != want { + t.Errorf("Want file change Path %q, got %q", want, got) + } + if got, want := change.Added, true; got != want { + t.Errorf("Want file Added %v, got %v", want, got) + } + if got, want := change.Deleted, false; got != want { + t.Errorf("Want file Deleted %v, got %v", want, got) + } + if got, want := change.Renamed, false; got != want { + t.Errorf("Want file Renamed %v, got %v", want, got) + } + } +} diff --git a/scm/driver/gitee/integration/repo_test.go b/scm/driver/gitee/integration/repo_test.go new file mode 100644 index 000000000..5ff0cef15 --- /dev/null +++ b/scm/driver/gitee/integration/repo_test.go @@ -0,0 +1,85 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +// +// repository sub-tests +// + +func testRepos(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testRepoFind(client)) + } +} + +func testRepoFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Repositories.Find(context.Background(), "kit101/drone-yml-test") + if err != nil { + t.Error(err) + return + } + t.Run("Repository", testRepo(result)) + t.Run("Permissions", testPerm(result.Perm)) + } +} + +// +// struct sub-tests +// + +func testRepo(repository *scm.Repository) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + if got, want := repository.Name, "drone-yml-test"; got != want { + t.Errorf("Want repository Name %q, got %q", want, got) + } + if got, want := repository.Namespace, "kit101"; got != want { + t.Errorf("Want repository Namespace %q, got %q", want, got) + } + if got, want := repository.Branch, "master"; got != want { + t.Errorf("Want repository Branch %q, got %q", want, got) + } + if got, want := repository.Clone, "https://gitee.com/kit101/drone-yml-test.git"; got != want { + t.Errorf("Want repository Clone URL %q, got %q", want, got) + } + if got, want := repository.CloneSSH, "git@gitee.com:kit101/drone-yml-test.git"; got != want { + t.Errorf("Want repository SSH URL %q, got %q", want, got) + } + if got, want := repository.Link, "https://gitee.com/kit101/drone-yml-test.git"; got != want { + t.Errorf("Want repository Link %q, got %q", want, got) + } + if got, want := repository.Created.Unix(), int64(1616556274); got != want { + t.Errorf("Want repository Created %d, got %d", want, got) + } + if got, want := repository.Private, false; got != want { + t.Errorf("Want repository Private %v, got %v", want, got) + } + } +} + +func testPerm(perms *scm.Perm) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + if got, want := perms.Pull, true; got != want { + t.Errorf("Want permission Pull %v, got %v", want, got) + } + if got, want := perms.Push, false; got != want { + t.Errorf("Want permission Push %v, got %v", want, got) + } + if got, want := perms.Admin, false; got != want { + t.Errorf("Want permission Admin %v, got %v", want, got) + } + } +} diff --git a/scm/driver/gitee/integration/user_test.go b/scm/driver/gitee/integration/user_test.go new file mode 100644 index 000000000..26c731e12 --- /dev/null +++ b/scm/driver/gitee/integration/user_test.go @@ -0,0 +1,54 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package integration + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +// +// user sub-tests +// + +func testUsers(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + t.Run("Find", testUserFind(client)) + } +} + +func testUserFind(client *scm.Client) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + result, _, err := client.Users.FindLogin(context.Background(), "kit101") + if err != nil { + t.Error(err) + return + } + t.Run("User", testUser(result)) + } +} + +// +// struct sub-tests +// + +func testUser(user *scm.User) func(t *testing.T) { + return func(t *testing.T) { + t.Parallel() + if got, want := user.Login, "kit101"; got != want { + t.Errorf("Want user Login %q, got %q", want, got) + } + if got, want := user.Name, "kit101"; got != want { + t.Errorf("Want user Name %q, got %q", want, got) + } + if got, want := user.Avatar, "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png"; got != want { + t.Errorf("Want user Avatar %q, got %q", want, got) + } + } +} diff --git a/scm/driver/gitee/issue.go b/scm/driver/gitee/issue.go new file mode 100644 index 000000000..a5fe52a3f --- /dev/null +++ b/scm/driver/gitee/issue.go @@ -0,0 +1,336 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + "strconv" + "time" + + "github.com/drone/go-scm/scm" +) + +type issueService struct { + client *wrapper +} + +func (s *issueService) Find(ctx context.Context, repo string, number int) (*scm.Issue, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/issues/%s", repo, decodeNumber(number)) + out := new(issue) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertIssue(out), res, err +} + +func (s *issueService) FindComment(ctx context.Context, repo string, number, id int) (*scm.Comment, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/issues/comments/%d", repo, id) + out := new(issueComment) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertIssueComment(out), res, err +} + +func (s *issueService) List(ctx context.Context, repo string, opts scm.IssueListOptions) ([]*scm.Issue, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/issues?%s", repo, encodeIssueListOptions(opts)) + out := []*issue{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + if err != nil { + res.Page.First = 1 + if opts.Page-1 < 1 { + res.Page.Prev = 1 + } else { + res.Page.Prev = opts.Page - 1 + } + totalPage, perr := strconv.Atoi(res.Header.Get("total_page")) + if perr != nil { + res.Page.Last = totalPage + if opts.Page+1 > totalPage { + res.Page.Next = totalPage + } else { + res.Page.Next = opts.Page + 1 + } + } + } + return convertIssueList(out), res, err +} + +func (s *issueService) ListComments(ctx context.Context, repo string, number int, opts scm.ListOptions) ([]*scm.Comment, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/issues/%s/comments?%s", repo, decodeNumber(number), encodeListOptions(opts)) + out := []*issueComment{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertIssueCommentList(out), res, err +} + +func (s *issueService) Create(ctx context.Context, repo string, input *scm.IssueInput) (*scm.Issue, *scm.Response, error) { + owner, repoName := scm.Split(repo) + path := fmt.Sprintf("repos/%s/issues", owner) + in := &issueInput{ + Repo: repoName, + Title: input.Title, + Body: input.Body, + } + out := new(issue) + res, err := s.client.do(ctx, "POST", path, in, out) + return convertIssue(out), res, err +} + +func (s *issueService) CreateComment(ctx context.Context, repo string, number int, input *scm.CommentInput) (*scm.Comment, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/issues/%s/comments", repo, decodeNumber(number)) + in := &issueCommentInput{ + Body: input.Body, + } + out := new(issueComment) + res, err := s.client.do(ctx, "POST", path, in, out) + return convertIssueComment(out), res, err +} + +func (s *issueService) DeleteComment(ctx context.Context, repo string, number, id int) (*scm.Response, error) { + path := fmt.Sprintf("repos/%s/issues/comments/%d", repo, id) + return s.client.do(ctx, "DELETE", path, nil, nil) +} + +func (s *issueService) Close(ctx context.Context, repo string, number int) (*scm.Response, error) { + owner, repoName := scm.Split(repo) + path := fmt.Sprintf("repos/%s/issues/%s", owner, decodeNumber(number)) + data := map[string]string{ + "repo": repoName, + "state": "closed", + } + out := new(issue) + res, err := s.client.do(ctx, "PATCH", path, &data, out) + return res, err +} + +func (s *issueService) Lock(context.Context, string, int) (*scm.Response, error) { + return nil, scm.ErrNotSupported +} + +func (s *issueService) Unlock(context.Context, string, int) (*scm.Response, error) { + return nil, scm.ErrNotSupported +} + +type issue struct { + ID int `json:"id"` + URL string `json:"url"` + RepositoryURL string `json:"repository_url"` + LabelsURL string `json:"labels_url"` + CommentsURL string `json:"comments_url"` + HtmlURL string `json:"html_url"` + ParentURL interface{} `json:"parent_url"` + Number string `json:"number"` + ParentID int `json:"parent_id"` + Depth int `json:"depth"` + State string `json:"state"` + Title string `json:"title"` + Body string `json:"body"` + User user `json:"user"` + Labels []label `json:"labels"` + Assignee assignee `json:"assignee"` + Collaborators []interface{} `json:"collaborators"` + Repository issueRepository `json:"repository"` + Milestone milestone `json:"milestone"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + PlanStartedAt interface{} `json:"plan_started_at"` + Deadline interface{} `json:"deadline"` + FinishedAt interface{} `json:"finished_at"` + ScheduledTime float64 `json:"scheduled_time"` + Comments int `json:"comments"` + Priority int `json:"priority"` + IssueType string `json:"issue_type"` + SecurityHole bool `json:"security_hole"` + IssueState string `json:"issue_state"` + IssueTypeDetail issueTypeDetail `json:"issue_type_detail"` + IssueStateDetail issueStateDetail `json:"issue_state_detail"` +} +type issueRepository struct { + ID int `json:"id"` + FullName string `json:"full_name"` + HumanName string `json:"human_name"` + URL string `json:"url"` + Namespace namespace `json:"namespace"` + Path string `json:"path"` + Name string `json:"name"` + Owner user `json:"owner"` + Assigner assignee `json:"assigner"` + Description string `json:"description"` + Private bool `json:"private"` + Public bool `json:"public"` + Internal bool `json:"internal"` + Fork bool `json:"fork"` + HTMLURL string `json:"html_url"` + SSHURL string `json:"ssh_url"` + ForksURL string `json:"forks_url"` + KeysURL string `json:"keys_url"` + CollaboratorsURL string `json:"collaborators_url"` + HooksURL string `json:"hooks_url"` + BranchesURL string `json:"branches_url"` + TagsURL string `json:"tags_url"` + BlobsURL string `json:"blobs_url"` + StargazersURL string `json:"stargazers_url"` + ContributorsURL string `json:"contributors_url"` + CommitsURL string `json:"commits_url"` + CommentsURL string `json:"comments_url"` + IssueCommentURL string `json:"issue_comment_url"` + IssuesURL string `json:"issues_url"` + PullsURL string `json:"pulls_url"` + MilestonesURL string `json:"milestones_url"` + NotificationsURL string `json:"notifications_url"` + LabelsURL string `json:"labels_url"` + ReleasesURL string `json:"releases_url"` + Recommend bool `json:"recommend"` + Gvp bool `json:"gvp"` + Homepage string `json:"homepage"` + Language interface{} `json:"language"` + ForksCount int `json:"forks_count"` + StargazersCount int `json:"stargazers_count"` + WatchersCount int `json:"watchers_count"` + DefaultBranch string `json:"default_branch"` + OpenIssuesCount int `json:"open_issues_count"` + HasIssues bool `json:"has_issues"` + HasWiki bool `json:"has_wiki"` + IssueComment bool `json:"issue_comment"` + CanComment bool `json:"can_comment"` + PullRequestsEnabled bool `json:"pull_requests_enabled"` + HasPage bool `json:"has_page"` + License interface{} `json:"license"` + Outsourced bool `json:"outsourced"` + ProjectCreator string `json:"project_creator"` + Members []string `json:"members"` + PushedAt time.Time `json:"pushed_at"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Parent interface{} `json:"parent"` + Paas interface{} `json:"paas"` + AssigneesNumber int `json:"assignees_number"` + TestersNumber int `json:"testers_number"` + Assignee []assignee `json:"assignee"` + Testers []tester `json:"testers"` + Status string `json:"status"` + EmptyRepo bool `json:"empty_repo"` + Programs []interface{} `json:"programs"` + Enterprise interface{} `json:"enterprise"` +} +type issueTypeDetail struct { + ID int `json:"id"` + Title string `json:"title"` + Template interface{} `json:"template"` + Ident string `json:"ident"` + Color string `json:"color"` + IsSystem bool `json:"is_system"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} +type issueStateDetail struct { + ID int `json:"id"` + Title string `json:"title"` + Color string `json:"color"` + Icon string `json:"icon"` + Command interface{} `json:"command"` + Serial int `json:"serial"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type issueInput struct { + Repo string `json:"repo"` + Title string `json:"title"` + Body string `json:"body"` +} + +type issueComment struct { + ID int `json:"id"` + HTMLURL string `json:"html_url"` + User struct { + ID int `json:"id"` + Login string `json:"login"` + AvatarURL string `json:"avatar_url"` + } `json:"user"` + Body string `json:"body"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` +} + +type issueCommentInput struct { + Body string `json:"body"` +} + +func convertIssueList(from []*issue) []*scm.Issue { + to := []*scm.Issue{} + for _, v := range from { + to = append(to, convertIssue(v)) + } + return to +} +func convertIssue(from *issue) *scm.Issue { + return &scm.Issue{ + Number: encodeNumber(from.Number), + Title: from.Title, + Body: from.Body, + Link: from.HtmlURL, + Labels: convertLabels(from), + Closed: from.State == "closed", + Author: scm.User{ + Login: from.User.Login, + Avatar: from.User.AvatarURL, + }, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + } +} + +func convertIssueCommentList(from []*issueComment) []*scm.Comment { + to := []*scm.Comment{} + for _, v := range from { + to = append(to, convertIssueComment(v)) + } + return to +} +func convertIssueComment(from *issueComment) *scm.Comment { + return &scm.Comment{ + ID: from.ID, + Body: from.Body, + Author: scm.User{ + Login: from.User.Login, + Avatar: from.User.AvatarURL, + }, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + } +} + +func convertLabels(from *issue) []string { + var labels []string + for _, label := range from.Labels { + labels = append(labels, label.Name) + } + return labels +} + +// The issue number of gitee consists of 6 uppercase letters or numbers. +// The ASCII of uppercase letters or numbers is between 48 and 90, so encoded issue number(max:9090909090) less than the maximum value of int. +func encodeNumber(giteeIssueNumber string) int { + runes := []rune(giteeIssueNumber) + encodedNumber := "" + for i := 0; i < len(runes); i++ { + encodedNumber += strconv.Itoa(int(runes[i])) + } + scmNumber, err := strconv.Atoi(encodedNumber) + if err != nil { + return 0 + } + return scmNumber +} +func decodeNumber(scmIssueNumber int) string { + issueNumberStr := strconv.Itoa(scmIssueNumber) + giteeNumber := "" + for i := 0; i < len(issueNumberStr)-1; i += 2 { + numberStr, err := strconv.Atoi(issueNumberStr[i : i+2]) + if err != nil { + return "" + } + giteeNumber += string(rune(numberStr)) + } + return giteeNumber +} diff --git a/scm/driver/gitee/issue_test.go b/scm/driver/gitee/issue_test.go new file mode 100644 index 000000000..a59ea6b29 --- /dev/null +++ b/scm/driver/gitee/issue_test.go @@ -0,0 +1,280 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "io/ioutil" + "testing" + + "github.com/drone/go-scm/scm" + + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" +) + +func TestEncodeAndDecodeIssueNumber(t *testing.T) { + giteeIssueNumber := "I4CD5P" + scmIssueNumber := 735267685380 + encodedScmIssueNumber := encodeNumber(giteeIssueNumber) + if diff := cmp.Diff(encodedScmIssueNumber, scmIssueNumber); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + encodedGiteeIssueNumber := decodeNumber(scmIssueNumber) + if diff := cmp.Diff(encodedGiteeIssueNumber, giteeIssueNumber); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } +} + +func TestIssueFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/issues/I4CD5P"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/issue.json") + + client := NewDefault() + got, res, err := client.Issues.Find(context.Background(), "kit101/drone-yml-test", 735267685380) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Issue) + raw, _ := ioutil.ReadFile("testdata/issue.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestIssueFindComment(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/issues/comments/6877445"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/issue_comment.json") + + client := NewDefault() + got, res, err := client.Issues.FindComment(context.Background(), "kit101/drone-yml-test", 735267685380, 6877445) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Comment) + raw, _ := ioutil.ReadFile("testdata/issue_comment.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestIssueList(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/issues"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + MatchParam("state", "all"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/issues.json") + + client := NewDefault() + got, res, err := client.Issues.List(context.Background(), "kit101/drone-yml-test", scm.IssueListOptions{Page: 1, Size: 3, Open: true, Closed: true}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Issue{} + raw, _ := ioutil.ReadFile("testdata/issues.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestIssueListComments(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml/issues/I4CD5P/comments"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/issue_comments.json") + + client := NewDefault() + got, res, err := client.Issues.ListComments(context.Background(), "kit101/drone-yml", 735267685380, scm.ListOptions{Size: 3, Page: 1}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Comment{} + raw, _ := ioutil.ReadFile("testdata/issue_comments.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestIssueCreate(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Post("/repos/kit101/issues"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/issue.json") + + input := scm.IssueInput{ + Title: "test issue 1", + Body: "test issue 1", + } + + client := NewDefault() + got, res, err := client.Issues.Create(context.Background(), "kit101/drone-yml-test", &input) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Issue) + raw, _ := ioutil.ReadFile("testdata/issue.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestIssueCreateComment(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com"). + Post("/repos/kit101/drone-yml-test/issues/I4CD5P/comments"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/issue_comment.json") + + input := &scm.CommentInput{ + Body: "it's ok.", + } + + client := NewDefault() + got, res, err := client.Issues.CreateComment(context.Background(), "kit101/drone-yml-test", 735267685380, input) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Comment) + raw, _ := ioutil.ReadFile("testdata/issue_comment.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestIssueDeleteComment(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Delete("/repos/kit101/drone-yml-test/issues/comments/6879139"). + Reply(204). + Type("application/json"). + SetHeaders(mockHeaders) + + client := NewDefault() + res, err := client.Issues.DeleteComment(context.Background(), "kit101/drone-yml-test", 735267685380, 6879139) + if err != nil { + t.Error(err) + return + } + + if got, want := res.Status, 204; got != want { + t.Errorf("Want response status %d, got %d", want, got) + } + t.Run("Request", testRequest(res)) +} + +func TestIssueClose(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Patch("/repos/kit101/issues/I4CD5P"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/issue.json") + + client := NewDefault() + res, err := client.Issues.Close(context.Background(), "kit101/drone-yml-test", 735267685380) + if err != nil { + t.Error(err) + return + } + + t.Run("Request", testRequest(res)) +} + +func TestIssueLock(t *testing.T) { + _, err := NewDefault().Issues.Lock(context.Background(), "kit101/drone-yml-test", 735267685380) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} + +func TestIssueUnlock(t *testing.T) { + _, err := NewDefault().Issues.Unlock(context.Background(), "kit101/drone-yml-test", 735267685380) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} diff --git a/scm/driver/gitee/linker.go b/scm/driver/gitee/linker.go new file mode 100644 index 000000000..79b0beac5 --- /dev/null +++ b/scm/driver/gitee/linker.go @@ -0,0 +1,50 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + + "github.com/drone/go-scm/scm" +) + +type linker struct { + base string +} + +func (l *linker) Resource(ctx context.Context, repo string, ref scm.Reference) (string, error) { + switch { + case scm.IsTag(ref.Path): + t := scm.TrimRef(ref.Path) + return fmt.Sprintf("%s%s/tree/%s", l.base, repo, t), nil + case scm.IsPullRequest(ref.Path): + d := scm.ExtractPullRequest(ref.Path) + return fmt.Sprintf("%s%s/pulls/%d", l.base, repo, d), nil + case ref.Sha == "": + t := scm.TrimRef(ref.Path) + return fmt.Sprintf("%s%s/tree/%s", l.base, repo, t), nil + default: + return fmt.Sprintf("%s%s/commit/%s", l.base, repo, ref.Sha), nil + } +} + +func (l *linker) Diff(ctx context.Context, repo string, source, target scm.Reference) (string, error) { + if scm.IsPullRequest(target.Path) { + pullRequestID := scm.ExtractPullRequest(target.Path) + return fmt.Sprintf("%s%s/pulls/%d/files", l.base, repo, pullRequestID), nil + } + + s := source.Sha + t := target.Sha + if s == "" { + s = scm.TrimRef(source.Path) + } + if t == "" { + t = scm.TrimRef(target.Path) + } + + return fmt.Sprintf("%s%s/compare/%s...%s", l.base, repo, s, t), nil +} diff --git a/scm/driver/gitee/linker_test.go b/scm/driver/gitee/linker_test.go new file mode 100644 index 000000000..55c9a84f2 --- /dev/null +++ b/scm/driver/gitee/linker_test.go @@ -0,0 +1,103 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +func TestLink(t *testing.T) { + tests := []struct { + path string + sha string + want string + }{ + { + path: "refs/heads/master", + sha: "2eac1cac02c325058cf959725c45b0612d3e8177", + want: "https://gitee.com/kit101/drone-yml-test/commit/2eac1cac02c325058cf959725c45b0612d3e8177", + }, + { + path: "refs/pull/7/head", + sha: "00b76e8abd51ae6a96318b3450944b32995f9158", + want: "https://gitee.com/kit101/drone-yml-test/pulls/7", + }, + { + path: "refs/tags/1.1", + want: "https://gitee.com/kit101/drone-yml-test/tree/1.1", + }, + { + path: "refs/heads/master", + want: "https://gitee.com/kit101/drone-yml-test/tree/master", + }, + } + + for _, test := range tests { + client := NewDefault() + ref := scm.Reference{ + Path: test.path, + Sha: test.sha, + } + got, err := client.Linker.Resource(context.Background(), "kit101/drone-yml-test", ref) + if err != nil { + t.Error(err) + return + } + want := test.want + if got != want { + t.Errorf("Want link %q, got %q", want, got) + } + } +} + +func TestDiff(t *testing.T) { + tests := []struct { + source scm.Reference + target scm.Reference + want string + }{ + { + source: scm.Reference{Sha: "2eac1cac02c325058cf959725c45b0612d3e8177"}, + target: scm.Reference{Sha: "00b76e8abd51ae6a96318b3450944b32995f9158"}, + want: "https://gitee.com/kit101/drone-yml-test/compare/2eac1cac02c325058cf959725c45b0612d3e8177...00b76e8abd51ae6a96318b3450944b32995f9158", + }, + { + source: scm.Reference{Path: "refs/heads/master"}, + target: scm.Reference{Sha: "00b76e8abd51ae6a96318b3450944b32995f9158"}, + want: "https://gitee.com/kit101/drone-yml-test/compare/master...00b76e8abd51ae6a96318b3450944b32995f9158", + }, + { + source: scm.Reference{Sha: "00b76e8abd51ae6a96318b3450944b32995f9158"}, + target: scm.Reference{Path: "refs/heads/master"}, + want: "https://gitee.com/kit101/drone-yml-test/compare/00b76e8abd51ae6a96318b3450944b32995f9158...master", + }, + { + target: scm.Reference{Path: "refs/pull/7/head"}, + want: "https://gitee.com/kit101/drone-yml-test/pulls/7/files", + }, + } + + for _, test := range tests { + client := NewDefault() + got, err := client.Linker.Diff(context.Background(), "kit101/drone-yml-test", test.source, test.target) + if err != nil { + t.Error(err) + return + } + want := test.want + if got != want { + t.Errorf("Want link %q, got %q", want, got) + } + } +} + +func TestLinkBase(t *testing.T) { + if got, want := NewDefault().Linker.(*linker).base, "https://gitee.com/"; got != want { + t.Errorf("Want url %s, got %s", want, got) + } +} diff --git a/scm/driver/gitee/org.go b/scm/driver/gitee/org.go new file mode 100644 index 000000000..1a9e66947 --- /dev/null +++ b/scm/driver/gitee/org.go @@ -0,0 +1,97 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + + "github.com/drone/go-scm/scm" +) + +type organizationService struct { + client *wrapper +} + +func (s *organizationService) Find(ctx context.Context, name string) (*scm.Organization, *scm.Response, error) { + path := fmt.Sprintf("orgs/%s", name) + out := new(organization) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertOrganization(out), res, err +} + +func (s *organizationService) FindMembership(ctx context.Context, name, username string) (*scm.Membership, *scm.Response, error) { + path := fmt.Sprintf("orgs/%s/memberships/%s", name, username) + out := new(membership) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertMembership(out), res, err +} + +func (s *organizationService) List(ctx context.Context, opts scm.ListOptions) ([]*scm.Organization, *scm.Response, error) { + path := fmt.Sprintf("user/orgs?%s", encodeListOptions(opts)) + out := []*organization{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertOrganizationList(out), res, err +} + +type organization struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + URL string `json:"url"` + AvatarURL string `json:"avatar_url"` + ReposURL string `json:"repos_url"` + EventsURL string `json:"events_url"` + MembersURL string `json:"members_url"` + Description string `json:"description"` + FollowCount int `json:"follow_count"` +} + +type membership struct { + URL string `json:"url"` + Active bool `json:"active"` + Remark string `json:"remark"` + Role string `json:"role"` + OrganizationURL string `json:"organization_url"` + Organization organization `json:"organization"` + User struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + AvatarURL string `json:"avatar_url"` + URL string `json:"url"` + HtmlURL string `json:"html_url"` + Remark string `json:"remark"` + } `json:"user"` +} + +func convertOrganizationList(from []*organization) []*scm.Organization { + to := []*scm.Organization{} + for _, v := range from { + to = append(to, convertOrganization(v)) + } + return to +} + +func convertOrganization(from *organization) *scm.Organization { + return &scm.Organization{ + Name: from.Login, + Avatar: from.AvatarURL, + } +} + +func convertMembership(from *membership) *scm.Membership { + to := new(scm.Membership) + to.Active = from.Active + switch from.Role { + case "admin": + to.Role = scm.RoleAdmin + case "member": + to.Role = scm.RoleMember + default: + to.Role = scm.RoleUndefined + } + return to +} diff --git a/scm/driver/gitee/org_test.go b/scm/driver/gitee/org_test.go new file mode 100644 index 000000000..fa08e8927 --- /dev/null +++ b/scm/driver/gitee/org_test.go @@ -0,0 +1,108 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "io/ioutil" + "testing" + + "github.com/drone/go-scm/scm" + + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" +) + +func TestOrganizationFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/orgs/kit101-personal"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/org.json") + + client := NewDefault() + got, res, err := client.Organizations.Find(context.Background(), "kit101-personal") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Organization) + raw, _ := ioutil.ReadFile("testdata/org.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestOrganizationFindMembership(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/orgs/kit101-personal/memberships/kit101"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/membership.json") + + client := NewDefault() + got, res, err := client.Organizations.FindMembership(context.Background(), "kit101-personal", "kit101") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Membership) + raw, _ := ioutil.ReadFile("testdata/membership.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestOrganizationList(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/user/orgs"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/orgs.json") + + client := NewDefault() + got, res, err := client.Organizations.List(context.Background(), scm.ListOptions{Size: 3, Page: 1}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Organization{} + raw, _ := ioutil.ReadFile("testdata/orgs.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} diff --git a/scm/driver/gitee/pr.go b/scm/driver/gitee/pr.go new file mode 100644 index 000000000..7a35768f9 --- /dev/null +++ b/scm/driver/gitee/pr.go @@ -0,0 +1,413 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + "time" + + "github.com/drone/go-scm/scm" +) + +type pullService struct { + client *wrapper +} + +func (s *pullService) Find(ctx context.Context, repo string, number int) (*scm.PullRequest, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/%d", repo, number) + out := new(pr) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertPullRequest(out), res, err +} + +func (s *pullService) FindComment(ctx context.Context, repo string, _ int, id int) (*scm.Comment, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/comments/%d", repo, id) + out := new(prComment) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertPullRequestComment(out), res, err +} + +func (s *pullService) List(ctx context.Context, repo string, opts scm.PullRequestListOptions) ([]*scm.PullRequest, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls?%s", repo, encodePullRequestListOptions(opts)) + out := []*pr{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertPullRequestList(out), res, err +} + +func (s *pullService) ListChanges(ctx context.Context, repo string, number int, _ scm.ListOptions) ([]*scm.Change, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/%d/files", repo, number) + out := []*prFile{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertPrChangeList(out), res, err +} + +func (s *pullService) ListComments(ctx context.Context, repo string, number int, opts scm.ListOptions) ([]*scm.Comment, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/%d/comments/?%s", repo, number, encodeListOptions(opts)) + out := []*prComment{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertPullRequestComments(out), res, err +} + +func (s *pullService) ListCommits(ctx context.Context, repo string, number int, _ scm.ListOptions) ([]*scm.Commit, *scm.Response, error) { + path := fmt.Sprintf("/repos/%s/pulls/%d/commits", repo, number) + out := []*prCommit{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertPrCommitList(out), res, err +} + +func (s *pullService) Merge(ctx context.Context, repo string, number int) (*scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/%d/merge", repo, number) + res, err := s.client.do(ctx, "PUT", path, nil, nil) + return res, err +} + +func (s *pullService) Close(ctx context.Context, repo string, number int) (*scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/%d", repo, number) + data := map[string]string{"state": "closed"} + res, err := s.client.do(ctx, "PATCH", path, &data, nil) + return res, err +} + +func (s *pullService) Create(ctx context.Context, repo string, input *scm.PullRequestInput) (*scm.PullRequest, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls", repo) + in := &prInput{ + Title: input.Title, + Body: input.Body, + Head: input.Source, + Base: input.Target, + } + out := new(pr) + res, err := s.client.do(ctx, "POST", path, in, out) + return convertPullRequest(out), res, err +} + +func (s *pullService) CreateComment(ctx context.Context, repo string, number int, input *scm.CommentInput) (*scm.Comment, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/%d/comments", repo, number) + in := &prCommentInput{ + Body: input.Body, + } + out := new(prComment) + res, err := s.client.do(ctx, "POST", path, in, out) + return convertPullRequestComment(out), res, err +} + +func (s *pullService) DeleteComment(ctx context.Context, repo string, _ int, id int) (*scm.Response, error) { + path := fmt.Sprintf("repos/%s/pulls/comments/%d", repo, id) + res, err := s.client.do(ctx, "DELETE", path, nil, nil) + return res, err +} + +type ( + pr struct { + ID int `json:"id"` + URL string `json:"url"` + HtmlURL string `json:"html_url"` + DiffURL string `json:"diff_url"` + PatchURL string `json:"patch_url"` + IssueURL string `json:"issue_url"` + CommitsURL string `json:"commits_url"` + ReviewCommentsURL string `json:"review_comments_url"` + ReviewCommentURL string `json:"review_comment_url"` + CommentsURL string `json:"comments_url"` + Number int `json:"number"` + State string `json:"state"` + Title string `json:"title"` + Body string `json:"body"` + AssigneesNumber int `json:"assignees_number"` + TestersNumber int `json:"testers_number"` + Assignees []assignee `json:"assignees"` + Testers []tester `json:"testers"` + Milestone milestone `json:"milestone"` + Labels []label `json:"labels"` + Locked bool `json:"locked"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + ClosedAt time.Time `json:"closed_at"` + MergedAt time.Time `json:"merged_at"` + Mergeable bool `json:"mergeable"` + CanMergeCheck bool `json:"can_merge_check"` + Head headOrBase `json:"head"` + Base headOrBase `json:"base"` + User user `json:"user"` + } + assignee struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + AvatarURL string `json:"avatar_url"` + URL string `json:"url"` + HtmlURL string `json:"html_url"` + Remark string `json:"remark"` + FollowersURL string `json:"followers_url"` + FollowingURL string `json:"following_url"` + GistsURL string `json:"gists_url"` + StarredURL string `json:"starred_url"` + SubscriptionsURL string `json:"subscriptions_url"` + OrganizationsURL string `json:"organizations_url"` + ReposURL string `json:"repos_url"` + EventsURL string `json:"events_url"` + ReceivedEventsURL string `json:"received_events_url"` + Type string `json:"type"` + } + tester struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + AvatarURL string `json:"avatar_url"` + URL string `json:"url"` + HtmlURL string `json:"html_url"` + Remark string `json:"remark"` + FollowersURL string `json:"followers_url"` + FollowingURL string `json:"following_url"` + GistsURL string `json:"gists_url"` + StarredURL string `json:"starred_url"` + SubscriptionsURL string `json:"subscriptions_url"` + OrganizationsURL string `json:"organizations_url"` + ReposURL string `json:"repos_url"` + EventsURL string `json:"events_url"` + ReceivedEventsURL string `json:"received_events_url"` + Type string `json:"type"` + } + milestone struct { + URL string `json:"url"` + HtmlURL string `json:"html_url"` + ID int `json:"id"` + Number int `json:"number"` + RepositoryID interface{} `json:"repository_id"` + State string `json:"state"` + Title string `json:"title"` + Description string `json:"description"` + UpdatedAt time.Time `json:"updated_at"` + CreatedAt time.Time `json:"created_at"` + OpenIssues int `json:"open_issues"` + ClosedIssues int `json:"closed_issues"` + DueOn string `json:"due_on"` + } + label struct { + ID int `json:"id"` + Name string `json:"name"` + Color string `json:"color"` + RepositoryID int `json:"repository_id"` + URL string `json:"url"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + } + prRepo struct { + ID int `json:"id"` + FullName string `json:"full_name"` + HumanName string `json:"human_name"` + URL string `json:"url"` + //Namespace namespace `json:"namespace"` + Path string `json:"path"` + Name string `json:"name"` + Owner user `json:"owner"` + Assigner assignee `json:"assigner"` + Description string `json:"description"` + Private bool `json:"private"` + Public bool `json:"public"` + Internal bool `json:"internal"` + Fork bool `json:"fork"` + HtmlURL string `json:"html_url"` + SshURL string `json:"ssh_url"` + } + headOrBase struct { + Label string `json:"label"` + Ref string `json:"ref"` + Sha string `json:"sha"` + User user `json:"user"` + Repo prRepo `json:"repo"` + } + + prComment struct { + URL string `json:"url"` + ID int `json:"id"` + User user `json:"user"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Body string `json:"body"` + HtmlURL string `json:"html_url"` + PullRequestURL string `json:"pull_request_url"` + } + + prFile struct { + Sha string `json:"sha"` + Filename string `json:"filename"` + Status string `json:"status"` + Additions string `json:"additions"` + Deletions string `json:"deletions"` + BlobURL string `json:"blob_url"` + RawURL string `json:"raw_url"` + Patch struct { + Diff string `json:"diff"` + NewPath string `json:"new_path"` + OldPath string `json:"old_path"` + AMode string `json:"a_mode"` + BMode string `json:"b_mode"` + NewFile bool `json:"new_file"` + RenamedFile bool `json:"renamed_file"` + DeletedFile bool `json:"deleted_file"` + TooLarge bool `json:"too_large"` + } `json:"patch"` + } + + prCommit struct { + URL string `json:"url"` + Sha string `json:"sha"` + HtmlURL string `json:"html_url"` + CommentsURL string `json:"comments_url"` + Commit struct { + URL string `json:"url"` + Author struct { + Name string `json:"name"` + Date time.Time `json:"date"` + Email string `json:"email"` + } `json:"author"` + Committer struct { + Name string `json:"name"` + Date time.Time `json:"date"` + Email string `json:"email"` + } `json:"committer"` + Message string `json:"message"` + CommentCount int `json:"comment_count"` + } `json:"commit"` + Author author `json:"author"` + Committer author `json:"committer"` + Parents struct { + URL string `json:"url"` + Sha string `json:"sha"` + } `json:"parents"` + } +) + +type prInput struct { + Title string `json:"title"` + Body string `json:"body"` + Head string `json:"head"` + Base string `json:"base"` +} +type prCommentInput struct { + Body string `json:"body"` +} + +func convertPullRequestList(from []*pr) []*scm.PullRequest { + to := []*scm.PullRequest{} + for _, v := range from { + to = append(to, convertPullRequest(v)) + } + return to +} +func convertPullRequest(from *pr) *scm.PullRequest { + var labels []scm.Label + for _, label := range from.Labels { + labels = append(labels, scm.Label{ + Name: label.Name, + Color: label.Color, + }) + } + merged := from.State == "merged" + closed := from.State == "closed" + if merged { + closed = true + } + return &scm.PullRequest{ + Number: from.Number, + Title: from.Title, + Body: from.Body, + Sha: from.Head.Sha, + Ref: fmt.Sprintf("refs/pull/%d/head", from.Number), + Source: from.Head.Ref, + Target: from.Base.Ref, + Fork: from.Head.Repo.FullName, + Link: from.HtmlURL, + Diff: from.DiffURL, + Closed: closed, + Merged: merged, + Head: scm.Reference{ + Name: from.Head.Ref, + Path: scm.ExpandRef(from.Head.Ref, "refs/heads"), + Sha: from.Head.Sha, + }, + Base: scm.Reference{ + Name: from.Base.Ref, + Path: scm.ExpandRef(from.Base.Ref, "refs/heads"), + Sha: from.Base.Sha, + }, + Author: scm.User{ + Login: from.User.Login, + Avatar: from.User.AvatarURL, + }, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + Labels: labels, + } +} + +func convertPullRequestComments(from []*prComment) []*scm.Comment { + to := []*scm.Comment{} + for _, v := range from { + to = append(to, convertPullRequestComment(v)) + } + return to +} +func convertPullRequestComment(from *prComment) *scm.Comment { + return &scm.Comment{ + ID: from.ID, + Body: from.Body, + Author: scm.User{ + Login: from.User.Login, + Name: from.User.Name, + Avatar: from.User.AvatarURL, + }, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + } +} + +func convertPrChangeList(from []*prFile) []*scm.Change { + to := []*scm.Change{} + for _, v := range from { + to = append(to, convertPrChange(v)) + } + return to +} +func convertPrChange(from *prFile) *scm.Change { + return &scm.Change{ + Path: from.Filename, + Added: from.Status == "added", + Deleted: from.Status == "deleted", + Renamed: from.Status == "renamed", + BlobID: from.Sha, + } +} + +func convertPrCommitList(from []*prCommit) []*scm.Commit { + to := []*scm.Commit{} + for _, v := range from { + to = append(to, convertPrCommit(v)) + } + return to +} +func convertPrCommit(from *prCommit) *scm.Commit { + return &scm.Commit{ + Message: from.Commit.Message, + Sha: from.Sha, + Link: from.HtmlURL, + Author: scm.Signature{ + Name: from.Commit.Author.Name, + Email: from.Commit.Author.Email, + Date: from.Commit.Author.Date, + Login: from.Author.Login, + Avatar: from.Author.AvatarURL, + }, + Committer: scm.Signature{ + Name: from.Commit.Committer.Name, + Email: from.Commit.Committer.Email, + Date: from.Commit.Committer.Date, + Login: from.Committer.Login, + Avatar: from.Committer.AvatarURL, + }, + } +} diff --git a/scm/driver/gitee/pr_test.go b/scm/driver/gitee/pr_test.go new file mode 100644 index 000000000..bc20d30b5 --- /dev/null +++ b/scm/driver/gitee/pr_test.go @@ -0,0 +1,320 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "io/ioutil" + "testing" + + "github.com/drone/go-scm/scm" + + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" +) + +func TestPullFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/pulls/6"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/pr.json") + + client := NewDefault() + got, res, err := client.PullRequests.Find(context.Background(), "kit101/drone-yml-test", 6) + if err != nil { + t.Error(err) + return + } + + want := new(scm.PullRequest) + raw, _ := ioutil.ReadFile("testdata/pr.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestPullFindComment(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/pulls/comments/6922557"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/pr_comment.json") + + client := NewDefault() + got, res, err := client.PullRequests.FindComment(context.Background(), "kit101/drone-yml-test", 7, 6922557) + if err != nil { + t.Error(err) + return + } + want := new(scm.Comment) + raw, _ := ioutil.ReadFile("testdata/pr_comment.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestPullList(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/pulls"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + MatchParam("state", "all"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/pulls.json") + + client := NewDefault() + got, res, err := client.PullRequests.List(context.Background(), "kit101/drone-yml-test", scm.PullRequestListOptions{Page: 1, Size: 3, Open: true, Closed: true}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.PullRequest{} + raw, _ := ioutil.ReadFile("testdata/pulls.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestPullListChanges(t *testing.T) { + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/pulls/6/files"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/pr_files.json") + + client := NewDefault() + got, res, err := client.PullRequests.ListChanges(context.Background(), "kit101/drone-yml-test", 6, scm.ListOptions{}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Change{} + raw, _ := ioutil.ReadFile("testdata/pr_files.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestPullListComments(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/pulls/7/comments"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/pr_comments.json") + + client := NewDefault() + got, res, err := client.PullRequests.ListComments(context.Background(), "kit101/drone-yml-test", 7, scm.ListOptions{Page: 1, Size: 3}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Comment{} + raw, _ := ioutil.ReadFile("testdata/pr_comments.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestPullListCommits(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/pulls/7/commits"). + Reply(200). + Type("application/json"). + File("testdata/pr_commits.json") + + client := NewDefault() + got, _, err := client.PullRequests.ListCommits(context.Background(), "kit101/drone-yml-test", 7, scm.ListOptions{}) + if err != nil { + t.Error(err) + } + + want := []*scm.Commit{} + raw, _ := ioutil.ReadFile("testdata/pr_commits.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } +} + +func TestPullMerge(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Put("/repos/kit101/drone-yml-test/pulls/6/merge"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders) + + client := NewDefault() + res, err := client.PullRequests.Merge(context.Background(), "kit101/drone-yml-test", 6) + if err != nil { + t.Error(err) + return + } + + t.Run("Request", testRequest(res)) +} + +func TestPullClose(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Patch("/repos/kit101/drone-yml-test/pulls/6"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders) + + client := NewDefault() + res, err := client.PullRequests.Close(context.Background(), "kit101/drone-yml-test", 6) + if err != nil { + t.Error(err) + return + } + + t.Run("Request", testRequest(res)) +} + +func TestPullCreate(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Post("/repos/kit101/drone-yml-test/pulls"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/pr.json") + + input := scm.PullRequestInput{ + Title: "new-feature", + Body: "Please pull these awesome changes", + Source: "crud", + Target: "master", + } + + client := NewDefault() + got, res, err := client.PullRequests.Create(context.Background(), "kit101/drone-yml-test", &input) + if err != nil { + t.Error(err) + return + } + + want := new(scm.PullRequest) + raw, _ := ioutil.ReadFile("testdata/pr.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestPullCommentCreate(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Post("/repos/kit101/drone-yml-test/pulls/7/comments"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/pr_comment.json") + + client := NewDefault() + input := scm.CommentInput{ + Body: "test comment 1", + } + got, res, err := client.PullRequests.CreateComment(context.Background(), "kit101/drone-yml-test", 7, &input) + if err != nil { + t.Error(err) + return + } + want := new(scm.Comment) + raw, _ := ioutil.ReadFile("testdata/pr_comment.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestPullCommentDelete(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Delete("/repos/kit101/drone-yml-test/pulls/comments/6990588"). + Reply(204). + SetHeaders(mockHeaders) + + client := NewDefault() + res, err := client.PullRequests.DeleteComment(context.Background(), "kit101/drone-yml-test", 7, 6990588) + if err != nil { + t.Error(err) + return + } + + if got, want := res.Status, 204; got != want { + t.Errorf("Want response status %d, got %d", want, got) + } + t.Run("Request", testRequest(res)) +} diff --git a/scm/driver/gitee/repo.go b/scm/driver/gitee/repo.go new file mode 100644 index 000000000..2628c5df7 --- /dev/null +++ b/scm/driver/gitee/repo.go @@ -0,0 +1,233 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + "strconv" + "time" + + "github.com/drone/go-scm/scm" +) + +type RepositoryService struct { + client *wrapper +} + +func (s *RepositoryService) Find(ctx context.Context, repo string) (*scm.Repository, *scm.Response, error) { + path := fmt.Sprintf("repos/%s", repo) + out := new(repository) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertRepository(out), res, err +} + +func (s *RepositoryService) FindHook(ctx context.Context, repo string, id string) (*scm.Hook, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/hooks/%s", repo, id) + out := new(hook) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertHook(out), res, err +} + +func (s *RepositoryService) FindPerms(ctx context.Context, repo string) (*scm.Perm, *scm.Response, error) { + repos, res, err := s.Find(ctx, repo) + if err == nil { + return repos.Perm, res, err + } + return nil, res, err +} + +func (s *RepositoryService) List(ctx context.Context, opts scm.ListOptions) ([]*scm.Repository, *scm.Response, error) { + path := fmt.Sprintf("user/repos?%s", encodeListOptions(opts)) + out := []*repository{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertRepositoryList(out), res, err +} + +func (s *RepositoryService) ListHooks(ctx context.Context, repo string, opts scm.ListOptions) ([]*scm.Hook, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/hooks?%s", repo, encodeListOptions(opts)) + out := []*hook{} + res, err := s.client.do(ctx, "GET", path, nil, &out) + return convertHookList(out), res, err +} + +func (s *RepositoryService) ListStatus(context.Context, string, string, scm.ListOptions) ([]*scm.Status, *scm.Response, error) { + return nil, nil, scm.ErrNotSupported +} + +func (s *RepositoryService) CreateHook(ctx context.Context, repo string, input *scm.HookInput) (*scm.Hook, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/hooks", repo) + in := new(hook) + // 1: signature + in.EncryptionType = 1 + in.Password = input.Secret + in.URL = input.Target + convertFromHookEvents(input.Events, in) + + out := new(hook) + res, err := s.client.do(ctx, "POST", path, in, out) + return convertHook(out), res, err +} + +func (s *RepositoryService) CreateStatus(context.Context, string, string, *scm.StatusInput) (*scm.Status, *scm.Response, error) { + return nil, nil, scm.ErrNotSupported +} + +func (s *RepositoryService) UpdateHook(ctx context.Context, repo, id string, input *scm.HookInput) (*scm.Hook, *scm.Response, error) { + path := fmt.Sprintf("repos/%s/hooks/%s", repo, id) + in := new(hook) + // 1: signature + in.EncryptionType = 1 + in.Password = input.Secret + in.URL = input.Target + convertFromHookEvents(input.Events, in) + + out := new(hook) + res, err := s.client.do(ctx, "PATCH", path, in, out) + return convertHook(out), res, err +} + +func (s *RepositoryService) DeleteHook(ctx context.Context, repo, id string) (*scm.Response, error) { + path := fmt.Sprintf("repos/%s/hooks/%s", repo, id) + return s.client.do(ctx, "DELETE", path, nil, nil) +} + +type repository struct { + ID int `json:"id"` + Owner struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + AvatarURL string `json:"avatar_url"` + } `json:"owner"` + Namespace namespace `json:"namespace"` + Name string `json:"name"` + FullName string `json:"full_name"` + HumanName string `json:"human_name"` + Path string `json:"path"` + Public bool `json:"public"` + Private bool `json:"private"` + Internal bool `json:"internal"` + Fork bool `json:"fork"` + URL string `json:"url"` + HtmlURL string `json:"html_url"` + SshURL string `json:"ssh_url"` + DefaultBranch string `json:"default_branch"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Permission struct { + Admin bool `json:"admin"` + Push bool `json:"push"` + Pull bool `json:"pull"` + } `json:"permission"` +} + +type hook struct { + ID int `json:"id"` + URL string `json:"url"` + CreatedAt time.Time `json:"created_at"` + // password encryption type, 0: password, 1: signature + EncryptionType int `json:"encryption_type"` + Password string `json:"password"` + ProjectID int `json:"project_id"` + Result string `json:"result"` + ResultCode int `json:"result_code"` + PushEvents bool `json:"push_events"` + TagPushEvents bool `json:"tag_push_events"` + IssuesEvents bool `json:"issues_events"` + NoteEvents bool `json:"note_events"` + MergeRequestsEvents bool `json:"merge_requests_events"` +} + +type namespace struct { + ID int `json:"id"` + Type string `json:"type"` + Name string `json:"name"` + Path string `json:"path"` + HtmlURL string `json:"html_url"` +} + +func convertRepositoryList(from []*repository) []*scm.Repository { + to := []*scm.Repository{} + for _, v := range from { + to = append(to, convertRepository(v)) + } + return to +} +func convertRepository(from *repository) *scm.Repository { + return &scm.Repository{ + ID: strconv.Itoa(from.ID), + Name: from.Name, + Namespace: from.Namespace.Path, + Perm: &scm.Perm{ + Push: from.Permission.Push, + Pull: from.Permission.Pull, + Admin: from.Permission.Admin, + }, + Link: from.HtmlURL, + Branch: from.DefaultBranch, + Private: from.Private, + Clone: from.HtmlURL, + CloneSSH: from.SshURL, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + } +} + +func convertHookList(from []*hook) []*scm.Hook { + to := []*scm.Hook{} + for _, v := range from { + to = append(to, convertHook(v)) + } + return to +} +func convertHook(from *hook) *scm.Hook { + return &scm.Hook{ + ID: strconv.Itoa(from.ID), + Active: true, + Target: from.URL, + Events: convertHookEvent(from), + SkipVerify: true, + } +} + +func convertHookEvent(from *hook) []string { + var events []string + if from.PushEvents { + events = append(events, "push") + } + if from.TagPushEvents { + events = append(events, "tag_push") + } + if from.IssuesEvents { + events = append(events, "issues") + } + if from.NoteEvents { + events = append(events, "note") + } + if from.MergeRequestsEvents { + events = append(events, "merge_requests") + } + return events +} + +// convertFromHookEvents not support: Branch, Deployment +func convertFromHookEvents(from scm.HookEvents, to *hook) { + if from.Push { + to.PushEvents = true + } + if from.PullRequest { + to.MergeRequestsEvents = true + } + if from.Issue { + to.IssuesEvents = true + } + if from.IssueComment || from.PullRequestComment || from.ReviewComment { + to.NoteEvents = true + } + if from.Tag { + to.TagPushEvents = true + } +} diff --git a/scm/driver/gitee/repo_test.go b/scm/driver/gitee/repo_test.go new file mode 100644 index 000000000..2dbe2c73e --- /dev/null +++ b/scm/driver/gitee/repo_test.go @@ -0,0 +1,358 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "testing" + + "github.com/drone/go-scm/scm" + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" +) + +func TestRepositoryFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/repo.json") + + client := NewDefault() + got, res, err := client.Repositories.Find(context.Background(), "kit101/drone-yml-test") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Repository) + raw, _ := ioutil.ReadFile("testdata/repo.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestRepositoryHookFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/hooks/787341"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/hook.json") + + client := NewDefault() + got, res, err := client.Repositories.FindHook(context.Background(), "kit101/drone-yml-test", "787341") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Hook) + raw, _ := ioutil.ReadFile("testdata/hook.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestRepositoryPerms(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/repo.json") + + client := NewDefault() + got, res, err := client.Repositories.FindPerms(context.Background(), "kit101/drone-yml-test") + if err != nil { + t.Error(err) + return + } + + want := new(scm.Repository) + raw, _ := ioutil.ReadFile("testdata/repo.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want.Perm); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestRepositoryList(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/user/repos"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/repos.json") + + client := NewDefault() + got, res, err := client.Repositories.List(context.Background(), scm.ListOptions{Page: 1, Size: 3}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Repository{} + raw, _ := ioutil.ReadFile("testdata/repos.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestRepositoryListHook(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/kit101/drone-yml-test/hooks"). + MatchParam("page", "1"). + MatchParam("per_page", "3"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + SetHeaders(mockPageHeaders). + File("testdata/hooks.json") + + client := NewDefault() + got, res, err := client.Repositories.ListHooks(context.Background(), "kit101/drone-yml-test", scm.ListOptions{Page: 1, Size: 3}) + if err != nil { + t.Error(err) + return + } + + want := []*scm.Hook{} + raw, _ := ioutil.ReadFile("testdata/hooks.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + t.Run("Page", testPage(res)) +} + +func TestRepositoryListStatus(t *testing.T) { + _, _, err := NewDefault().Repositories.ListStatus(context.Background(), "", "", scm.ListOptions{}) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} + +func TestRepositoryCreateHook(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Post("/repos/kit101/drone-yml-test/hooks"). + Reply(201). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/hook.json") + + in := &scm.HookInput{ + Target: "http://test.kit101.com/webhook", + Secret: "123asdas123", + } + + client := NewDefault() + got, res, err := client.Repositories.CreateHook(context.Background(), "kit101/drone-yml-test", in) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Hook) + raw, _ := ioutil.ReadFile("testdata/hook.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestRepositoryCreateStatus(t *testing.T) { + _, _, err := NewDefault().Repositories.CreateStatus(context.Background(), "", "", &scm.StatusInput{}) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} + +func TestRepositoryUpdateHook(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Patch("/repos/kit101/drone-yml-test/hooks/787341"). + Reply(200). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/hook.json") + + in := &scm.HookInput{ + Target: "http://test.kit101.com/webhook", + Secret: "123asdas123", + } + + client := NewDefault() + got, res, err := client.Repositories.UpdateHook(context.Background(), "kit101/drone-yml-test", "787341", in) + if err != nil { + t.Error(err) + return + } + + want := new(scm.Hook) + raw, _ := ioutil.ReadFile("testdata/hook.json.golden") + json.Unmarshal(raw, want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) +} + +func TestRepositoryDeleteHook(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Delete("/repos/kit101/drone-yml-test/hooks/787341"). + Reply(204). + Type("application/json"). + SetHeaders(mockHeaders) + + client := NewDefault() + res, err := client.Repositories.DeleteHook(context.Background(), "kit101/drone-yml-test", "787341") + if err != nil { + t.Error(err) + return + } + + if got, want := res.Status, 204; got != want { + t.Errorf("Want response status %d, got %d", want, got) + } + t.Run("Request", testRequest(res)) +} + +func TestRepositoryNotFound(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/repos/dev/null"). + Reply(404). + Type("application/json"). + SetHeaders(mockHeaders). + File("testdata/error.json") + + client := NewDefault() + _, _, err := client.Repositories.Find(context.Background(), "dev/null") + if err == nil { + t.Errorf("Expect Not Found error") + return + } + if got, want := err.Error(), "404 Project Not Found"; got != want { + t.Errorf("Want error %q, got %q", want, got) + } +} + +func TestHookEvents(t *testing.T) { + tests := []struct { + in scm.HookEvents + out *hook + }{ + { + in: scm.HookEvents{Push: true}, + out: &hook{PushEvents: true}, + }, + { + in: scm.HookEvents{Branch: true}, + out: &hook{}, + }, + { + in: scm.HookEvents{IssueComment: true}, + out: &hook{NoteEvents: true}, + }, + { + in: scm.HookEvents{PullRequestComment: true}, + out: &hook{NoteEvents: true}, + }, + { + in: scm.HookEvents{Issue: true}, + out: &hook{IssuesEvents: true}, + }, + { + in: scm.HookEvents{PullRequest: true}, + out: &hook{MergeRequestsEvents: true}, + }, + { + in: scm.HookEvents{ + Branch: true, + Deployment: true, + Issue: true, + IssueComment: true, + PullRequest: true, + PullRequestComment: true, + Push: true, + ReviewComment: true, + Tag: true, + }, + out: &hook{ + IssuesEvents: true, + MergeRequestsEvents: true, + NoteEvents: true, + PushEvents: true, + TagPushEvents: true, + }, + }, + } + + for i, test := range tests { + fmt.Println(test, i) + got := new(hook) + convertFromHookEvents(test.in, got) + want := test.out + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results at index %d", i) + t.Log(diff) + } + } +} diff --git a/scm/driver/gitee/review.go b/scm/driver/gitee/review.go new file mode 100644 index 000000000..f18798f1f --- /dev/null +++ b/scm/driver/gitee/review.go @@ -0,0 +1,30 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "github.com/drone/go-scm/scm" +) + +type reviewService struct { + client *wrapper +} + +func (s *reviewService) Find(context.Context, string, int, int) (*scm.Review, *scm.Response, error) { + return nil, nil, scm.ErrNotSupported +} + +func (s *reviewService) List(context.Context, string, int, scm.ListOptions) ([]*scm.Review, *scm.Response, error) { + return nil, nil, scm.ErrNotSupported +} + +func (s *reviewService) Create(context.Context, string, int, *scm.ReviewInput) (*scm.Review, *scm.Response, error) { + return nil, nil, scm.ErrNotSupported +} + +func (s *reviewService) Delete(context.Context, string, int, int) (*scm.Response, error) { + return nil, scm.ErrNotSupported +} diff --git a/scm/driver/gitee/review_test.go b/scm/driver/gitee/review_test.go new file mode 100644 index 000000000..28b2fd775 --- /dev/null +++ b/scm/driver/gitee/review_test.go @@ -0,0 +1,44 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "testing" + + "github.com/drone/go-scm/scm" +) + +func TestReviewFind(t *testing.T) { + service := new(reviewService) + _, _, err := service.Find(context.Background(), "kit101/drone-yml-test", 1, 1) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} + +func TestReviewList(t *testing.T) { + service := new(reviewService) + _, _, err := service.List(context.Background(), "kit101/drone-yml-test", 1, scm.ListOptions{}) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} + +func TestReviewCreate(t *testing.T) { + service := new(reviewService) + _, _, err := service.Create(context.Background(), "kit101/drone-yml-test", 1, nil) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} + +func TestReviewDelete(t *testing.T) { + service := new(reviewService) + _, err := service.Delete(context.Background(), "kit101/drone-yml-test", 1, 1) + if err != scm.ErrNotSupported { + t.Errorf("Expect Not Supported error") + } +} diff --git a/scm/driver/gitee/testdata/branch.json b/scm/driver/gitee/testdata/branch.json new file mode 100644 index 000000000..ae0ad3dd7 --- /dev/null +++ b/scm/driver/gitee/testdata/branch.json @@ -0,0 +1,49 @@ +{ + "name": "master", + "commit": { + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "message": "add/update/delete/rename\n", + "tree": { + "sha": "55d4c682f3e2b276cc40c70e59cebb17dcb1273a", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/55d4c682f3e2b276cc40c70e59cebb17dcb1273a" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + } + }, + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "id": 1535738, + "login": "kit101" + }, + "parents": [ + { + "sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374" + } + ], + "committer": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "id": 1535738, + "login": "kit101" + } + }, + "_links": { + "html": "https://gitee.com/kit101/drone-yml-test/tree/master", + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches/master" + }, + "protected": false, + "protection_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches/master/protection" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/branch.json.golden b/scm/driver/gitee/testdata/branch.json.golden new file mode 100644 index 000000000..ec8a3ea78 --- /dev/null +++ b/scm/driver/gitee/testdata/branch.json.golden @@ -0,0 +1,5 @@ +{ + "Name": "master", + "Path": "refs/heads/master", + "Sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/branches.json b/scm/driver/gitee/testdata/branches.json new file mode 100644 index 000000000..7f49be0af --- /dev/null +++ b/scm/driver/gitee/testdata/branches.json @@ -0,0 +1,11 @@ +[ + { + "name": "master", + "commit": { + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d" + }, + "protected": false, + "protection_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches/master/protection" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/branches.json.golden b/scm/driver/gitee/testdata/branches.json.golden new file mode 100644 index 000000000..161b33c27 --- /dev/null +++ b/scm/driver/gitee/testdata/branches.json.golden @@ -0,0 +1,7 @@ +[ + { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/changes.json b/scm/driver/gitee/testdata/changes.json new file mode 100644 index 000000000..73aa16994 --- /dev/null +++ b/scm/driver/gitee/testdata/changes.json @@ -0,0 +1,87 @@ +{ + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "sha": "7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:41:22+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:41:22+08:00", + "email": "qkssk1711@163.com" + }, + "message": "rename\n", + "tree": { + "sha": "3dd0fe5f5bcde3966871c8eb2c91d55554dab80f", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/3dd0fe5f5bcde3966871c8eb2c91d55554dab80f" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "f87d3cca9d85a7e52bb9dadac176817812b76fbd", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/f87d3cca9d85a7e52bb9dadac176817812b76fbd" + } + ], + "stats": { + "id": "7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "additions": 3, + "deletions": 3, + "total": 6 + }, + "files": [ + { + "sha": "b748919728ba7080c9e41e2b888872b09d246d90", + "filename": "rename.4.txt", + "status": "modified", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51/rename.4.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51/rename.4.txt", + "content_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/rename.4.txt?ref=7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "patch": "" + } + ] +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/changes.json.golden b/scm/driver/gitee/testdata/changes.json.golden new file mode 100644 index 000000000..859972e23 --- /dev/null +++ b/scm/driver/gitee/testdata/changes.json.golden @@ -0,0 +1,9 @@ +[ + { + "Path": "rename.4.txt", + "Added": false, + "Renamed": true, + "Deleted": false, + "BlobID": "b748919728ba7080c9e41e2b888872b09d246d90" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/commit.json b/scm/driver/gitee/testdata/commit.json new file mode 100644 index 000000000..c40d2ee30 --- /dev/null +++ b/scm/driver/gitee/testdata/commit.json @@ -0,0 +1,123 @@ +{ + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "message": "add/update/delete/rename\n", + "tree": { + "sha": "55d4c682f3e2b276cc40c70e59cebb17dcb1273a", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/55d4c682f3e2b276cc40c70e59cebb17dcb1273a" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374" + } + ], + "stats": { + "id": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "additions": 4, + "deletions": 3, + "total": 7 + }, + "files": [ + { + "sha": "d28d40b18823a27071d0e9ce89c149adb3f9c4ee", + "filename": "change/add.txt", + "status": "added", + "additions": 1, + "deletions": 0, + "changes": 1, + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/change/add.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/change/add.txt", + "content_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/change/add.txt?ref=e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "patch": "@@ -0,0 +1 @@\n+add\n\\ No newline at end of file\n" + }, + { + "sha": "41f6d1ab2598013cc08173771d81f67106bd15fc", + "filename": "change/modified.txt", + "status": "modified", + "additions": 2, + "deletions": 1, + "changes": 3, + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/change/modified.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/change/modified.txt", + "content_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/change/modified.txt?ref=e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "patch": "@@ -1 +1,2 @@\n-will be modified\n\\ No newline at end of file\n+will be modified\n+modified\n\\ No newline at end of file\n" + }, + { + "sha": "026c61940bebac2bd51a709af499db11a62b9beb", + "filename": "change/remove.txt", + "status": "removed", + "additions": 0, + "deletions": 1, + "changes": 1, + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/537575f44a09c57dfc472e26fe067754fd2f9374/change/remove.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/537575f44a09c57dfc472e26fe067754fd2f9374/change/remove.txt", + "content_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/change/remove.txt?ref=537575f44a09c57dfc472e26fe067754fd2f9374", + "patch": "@@ -1 +0,0 @@\n-will be removed\n\\ No newline at end of file\n" + }, + { + "sha": "b5442782c85d797e70d7bcd14abab49fd8c40b5b", + "filename": "change/rename.1.txt", + "status": "modified", + "additions": 0, + "deletions": 0, + "changes": 0, + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/change/rename.1.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/change/rename.1.txt", + "content_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/change/rename.1.txt?ref=e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "patch": "" + } + ] +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/commit.json.golden b/scm/driver/gitee/testdata/commit.json.golden new file mode 100644 index 000000000..4ee12ddcb --- /dev/null +++ b/scm/driver/gitee/testdata/commit.json.golden @@ -0,0 +1,19 @@ +{ + "Sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "Message": "add/update/delete/rename\n", + "Author": { + "Name": "kit101", + "Date": "2021-08-23T23:45:53+08:00", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Committer": { + "Name": "kit101", + "Date": "2021-08-23T23:45:53+08:00", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Link": "https://gitee.com/kit101/drone-yml-test/commit/e3c0ff4d5cef439ea11b30866fb1ed79b420801d" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/commits.json b/scm/driver/gitee/testdata/commits.json new file mode 100644 index 000000000..a4cb29163 --- /dev/null +++ b/scm/driver/gitee/testdata/commits.json @@ -0,0 +1,203 @@ +[ + { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "message": "add/update/delete/rename\n", + "tree": { + "sha": "55d4c682f3e2b276cc40c70e59cebb17dcb1273a", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/55d4c682f3e2b276cc40c70e59cebb17dcb1273a" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374" + } + ] + }, + { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374", + "sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/537575f44a09c57dfc472e26fe067754fd2f9374", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:45:04+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:45:04+08:00", + "email": "qkssk1711@163.com" + }, + "message": "change ready\n", + "tree": { + "sha": "c5851e358f5c1950ce15772b0cf05941470793bc", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/c5851e358f5c1950ce15772b0cf05941470793bc" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51" + } + ] + }, + { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "sha": "7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:41:22+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:41:22+08:00", + "email": "qkssk1711@163.com" + }, + "message": "rename\n", + "tree": { + "sha": "3dd0fe5f5bcde3966871c8eb2c91d55554dab80f", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/3dd0fe5f5bcde3966871c8eb2c91d55554dab80f" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "f87d3cca9d85a7e52bb9dadac176817812b76fbd", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/f87d3cca9d85a7e52bb9dadac176817812b76fbd" + } + ] + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/commits.json.golden b/scm/driver/gitee/testdata/commits.json.golden new file mode 100644 index 000000000..91c30b1f4 --- /dev/null +++ b/scm/driver/gitee/testdata/commits.json.golden @@ -0,0 +1,59 @@ +[ + { + "Sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "Message": "add/update/delete/rename\n", + "Author": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-08-23T23:45:53+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Committer": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-08-23T23:45:53+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Link": "https://gitee.com/kit101/drone-yml-test/commit/e3c0ff4d5cef439ea11b30866fb1ed79b420801d" + }, + { + "Sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "Message": "change ready\n", + "Author": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-08-23T23:45:04+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Committer": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-08-23T23:45:04+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Link": "https://gitee.com/kit101/drone-yml-test/commit/537575f44a09c57dfc472e26fe067754fd2f9374" + }, + { + "Sha": "7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51", + "Message": "rename\n", + "Author": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-08-23T23:41:22+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Committer": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-08-23T23:41:22+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Link": "https://gitee.com/kit101/drone-yml-test/commit/7e84b6f94b8d4bfaa051910cc4ce16b73bcffd51" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/compare.json b/scm/driver/gitee/testdata/compare.json new file mode 100644 index 000000000..24451e9c3 --- /dev/null +++ b/scm/driver/gitee/testdata/compare.json @@ -0,0 +1,201 @@ +{ + "base_commit": { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "message": "add/update/delete/rename\n", + "tree": { + "sha": "55d4c682f3e2b276cc40c70e59cebb17dcb1273a", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/55d4c682f3e2b276cc40c70e59cebb17dcb1273a" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374" + } + ] + }, + "merge_base_commit": { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "kit101", + "date": "2021-08-23T23:45:53+08:00", + "email": "qkssk1711@163.com" + }, + "message": "add/update/delete/rename\n", + "tree": { + "sha": "55d4c682f3e2b276cc40c70e59cebb17dcb1273a", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/55d4c682f3e2b276cc40c70e59cebb17dcb1273a" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": [ + { + "sha": "537575f44a09c57dfc472e26fe067754fd2f9374", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/537575f44a09c57dfc472e26fe067754fd2f9374" + } + ] + }, + "commits": [ + { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/2700445cd84c08546f4d003f8aa54d2099a006b7", + "sha": "2700445cd84c08546f4d003f8aa54d2099a006b7", + "html_url": "https://gitee.com/kit101/drone-yml-test/commit/2700445cd84c08546f4d003f8aa54d2099a006b7", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/2700445cd84c08546f4d003f8aa54d2099a006b7/comments", + "commit": { + "author": { + "name": "kit101", + "date": "2021-09-28T16:45:33+00:00", + "email": "qkssk1711@163.com" + }, + "committer": { + "name": "Gitee", + "date": "2021-09-28T16:45:33+00:00", + "email": "noreply@gitee.com" + }, + "message": "add feat-compare.txt.\n", + "tree": { + "sha": "3743833f1906b6343c0e373e9d5c5c02bb793f4d", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/3743833f1906b6343c0e373e9d5c5c02bb793f4d" + } + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": null, + "parents": [ + { + "sha": "e3c0ff4d5cef439ea11b30866fb1ed79b420801d", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/e3c0ff4d5cef439ea11b30866fb1ed79b420801d" + } + ] + } + ], + "files": [ + { + "sha": "b3a3b1dc93cb4323ef918aa742227356e91ddf1e", + "filename": "feat-compare.txt", + "status": "added", + "additions": 1, + "deletions": 0, + "changes": 1, + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/2700445cd84c08546f4d003f8aa54d2099a006b7/feat-compare.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/2700445cd84c08546f4d003f8aa54d2099a006b7/feat-compare.txt", + "content_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/feat-compare.txt?ref=2700445cd84c08546f4d003f8aa54d2099a006b7", + "patch": "@@ -0,0 +1 @@\n+feat-compare\n\\ No newline at end of file\n" + } + ] +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/compare.json.golden b/scm/driver/gitee/testdata/compare.json.golden new file mode 100644 index 000000000..06be5bbcd --- /dev/null +++ b/scm/driver/gitee/testdata/compare.json.golden @@ -0,0 +1,9 @@ +[ + { + "Path": "feat-compare.txt", + "Added": true, + "Renamed": false, + "Deleted": false, + "BlobID": "b3a3b1dc93cb4323ef918aa742227356e91ddf1e" + } +] diff --git a/scm/driver/gitee/testdata/content.json b/scm/driver/gitee/testdata/content.json new file mode 100644 index 000000000..1f9136c8a --- /dev/null +++ b/scm/driver/gitee/testdata/content.json @@ -0,0 +1,16 @@ +{ + "type": "file", + "encoding": "base64", + "size": 22, + "name": "README.md", + "path": "README.md", + "content": "IyBkcm9uZS15bWwtdGVzdAoKdGVzdA==", + "sha": "1563ebda9da15e6a7753431774920c62b168e5bb", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/README.md", + "html_url": "https://gitee.com/kit101/drone-yml-test/blob/d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83/README.md", + "download_url": "https://gitee.com/kit101/drone-yml-test/raw/d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83/README.md", + "_links": { + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/README.md", + "html": "https://gitee.com/kit101/drone-yml-test/blob/d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83/README.md" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/content.json.golden b/scm/driver/gitee/testdata/content.json.golden new file mode 100644 index 000000000..8f970cd12 --- /dev/null +++ b/scm/driver/gitee/testdata/content.json.golden @@ -0,0 +1,5 @@ +{ + "Path": "README.md", + "Data": "IyBkcm9uZS15bWwtdGVzdAoKdGVzdA==", + "Sha": "1563ebda9da15e6a7753431774920c62b168e5bb" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/content_create.json b/scm/driver/gitee/testdata/content_create.json new file mode 100644 index 000000000..fe60e5d3b --- /dev/null +++ b/scm/driver/gitee/testdata/content_create.json @@ -0,0 +1,40 @@ +{ + "content": { + "name": "CreateByDroneGiteeProvider.md", + "path": "apitest/CreateByDroneGiteeProvider.md", + "size": 56, + "sha": "9de0cf94e1e3c1cbe0a25c3865de4cc9ede7ad3e", + "type": "file", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/CreateByDroneGiteeProvider.md", + "html_url": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/CreateByDroneGiteeProvider.md", + "download_url": "https://gitee.com/kit101/drone-yml-test/raw/master/apitest/CreateByDroneGiteeProvider.md", + "_links": { + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/CreateByDroneGiteeProvider.md", + "html": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/CreateByDroneGiteeProvider.md" + } + }, + "commit": { + "sha": "261b772064f5aed55d626799417ec31b1c48080b", + "author": { + "name": "kit101", + "date": "2021-08-17T15:16:26+00:00", + "email": "kit101@gitee.com" + }, + "committer": { + "name": "Gitee", + "date": "2021-08-17T15:16:26+00:00", + "email": "noreply@gitee.com" + }, + "message": "my commit message", + "tree": { + "sha": "3830427494001c27ed6a9711a823a4fc6af836af", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/3830427494001c27ed6a9711a823a4fc6af836af" + }, + "parents": [ + { + "sha": "d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/d295a4c616d46fbcdfa3dfd1473c1337a1ec6f83" + } + ] + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/content_delete.json b/scm/driver/gitee/testdata/content_delete.json new file mode 100644 index 000000000..3cfd6c802 --- /dev/null +++ b/scm/driver/gitee/testdata/content_delete.json @@ -0,0 +1,27 @@ +{ + "content": null, + "commit": { + "sha": "bdce92fc3e96f54d7e918c7f2b6e61053366da5e", + "author": { + "name": "kit101", + "date": "2021-08-17T15:49:36+00:00", + "email": "kit101@gitee.com" + }, + "committer": { + "name": "Gitee", + "date": "2021-08-17T15:49:36+00:00", + "email": "noreply@gitee.com" + }, + "message": "delete commit message", + "tree": { + "sha": "4de6efba7063724cb20ab9135be309db0477c186", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/4de6efba7063724cb20ab9135be309db0477c186" + }, + "parents": [ + { + "sha": "56b7c68eea99df8469f819fca08ca71c2d942d8d", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/56b7c68eea99df8469f819fca08ca71c2d942d8d" + } + ] + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/content_list.json b/scm/driver/gitee/testdata/content_list.json new file mode 100644 index 000000000..64274caaf --- /dev/null +++ b/scm/driver/gitee/testdata/content_list.json @@ -0,0 +1,44 @@ +[ + { + "type": "file", + "size": null, + "name": "CreateByDroneGiteeProvider.md", + "path": "apitest/CreateByDroneGiteeProvider.md", + "sha": "9de0cf94e1e3c1cbe0a25c3865de4cc9ede7ad3e", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/CreateByDroneGiteeProvider.md", + "html_url": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/CreateByDroneGiteeProvider.md", + "download_url": "https://gitee.com/kit101/drone-yml-test/raw/master/apitest/CreateByDroneGiteeProvider.md", + "_links": { + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/CreateByDroneGiteeProvider.md", + "html": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/CreateByDroneGiteeProvider.md" + } + }, + { + "type": "file", + "size": null, + "name": "UpdateByDroneGiteeProvider.md", + "path": "apitest/UpdateByDroneGiteeProvider.md", + "sha": "480a4b3865989bfa78d8f249b124716dda1581d7", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/UpdateByDroneGiteeProvider.md", + "html_url": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/UpdateByDroneGiteeProvider.md", + "download_url": "https://gitee.com/kit101/drone-yml-test/raw/master/apitest/UpdateByDroneGiteeProvider.md", + "_links": { + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/UpdateByDroneGiteeProvider.md", + "html": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/UpdateByDroneGiteeProvider.md" + } + }, + { + "type": "dir", + "size": null, + "name": "newdir", + "path": "apitest/newdir", + "sha": "2f5fb87ae0d8b8a5f78b4dbfefc1fd70b356bdc4", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/newdir", + "html_url": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/newdir", + "download_url": "https://gitee.com/kit101/drone-yml-test/raw/master/apitest/newdir", + "_links": { + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/newdir", + "html": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/newdir" + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/content_list.json.golden b/scm/driver/gitee/testdata/content_list.json.golden new file mode 100644 index 000000000..7fcd66370 --- /dev/null +++ b/scm/driver/gitee/testdata/content_list.json.golden @@ -0,0 +1,14 @@ +[ + { + "kind": "file", + "path": "apitest/CreateByDroneGiteeProvider.md" + }, + { + "kind": "file", + "path": "apitest/UpdateByDroneGiteeProvider.md" + }, + { + "kind": "directory", + "path": "apitest/newdir" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/content_update.json b/scm/driver/gitee/testdata/content_update.json new file mode 100644 index 000000000..9ddbbd6ed --- /dev/null +++ b/scm/driver/gitee/testdata/content_update.json @@ -0,0 +1,40 @@ +{ + "content": { + "name": "UpdateByDroneGiteeProvider.md", + "path": "apitest/UpdateByDroneGiteeProvider.md", + "size": 56, + "sha": "480a4b3865989bfa78d8f249b124716dda1581d7", + "type": "file", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/UpdateByDroneGiteeProvider.md", + "html_url": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/UpdateByDroneGiteeProvider.md", + "download_url": "https://gitee.com/kit101/drone-yml-test/raw/master/apitest/UpdateByDroneGiteeProvider.md", + "_links": { + "self": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contents/apitest/UpdateByDroneGiteeProvider.md", + "html": "https://gitee.com/kit101/drone-yml-test/blob/master/apitest/UpdateByDroneGiteeProvider.md" + } + }, + "commit": { + "sha": "b280133ab20a219027584bd69671230503c916de", + "author": { + "name": "kit101", + "date": "2021-08-17T15:33:48+00:00", + "email": "kit101@gitee.com" + }, + "committer": { + "name": "Gitee", + "date": "2021-08-17T15:33:48+00:00", + "email": "noreply@gitee.com" + }, + "message": "my commit message by update", + "tree": { + "sha": "4de6efba7063724cb20ab9135be309db0477c186", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/git/trees/4de6efba7063724cb20ab9135be309db0477c186" + }, + "parents": [ + { + "sha": "f24c34e8d884b294c9f197460fc0840d9582220b", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/f24c34e8d884b294c9f197460fc0840d9582220b" + } + ] + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/error.json b/scm/driver/gitee/testdata/error.json new file mode 100644 index 000000000..74392666a --- /dev/null +++ b/scm/driver/gitee/testdata/error.json @@ -0,0 +1,3 @@ +{ + "message": "404 Project Not Found" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/hook.json b/scm/driver/gitee/testdata/hook.json new file mode 100644 index 000000000..b5c6184ac --- /dev/null +++ b/scm/driver/gitee/testdata/hook.json @@ -0,0 +1,14 @@ +{ + "id": 787341, + "url": "http://test.kit101.com/webhook", + "created_at": "2021-10-07T10:27:26+08:00", + "password": "123asdas123", + "project_id": 14836026, + "result": "\u003Chtml\u003E \u003Chead\u003E\u003Ctitle\u003E403 Forbidden\u003C/title\u003E\u003C/head\u003E \u003Cbody\u003E \u003Ccenter\u003E\u003Ch1\u003E403 Forbidden\u003C/h1\u003E\u003C/center\u003E \u003C/body\u003E \u003C/html\u003E", + "result_code": 403, + "push_events": true, + "tag_push_events": true, + "issues_events": true, + "note_events": true, + "merge_requests_events": true +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/hook.json.golden b/scm/driver/gitee/testdata/hook.json.golden new file mode 100644 index 000000000..0deb616ec --- /dev/null +++ b/scm/driver/gitee/testdata/hook.json.golden @@ -0,0 +1,14 @@ +{ + "ID": "787341", + "Name": "", + "Target": "http://test.kit101.com/webhook", + "Events": [ + "push", + "tag_push", + "issues", + "note", + "merge_requests" + ], + "Active": true, + "SkipVerify": true +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/hooks.json b/scm/driver/gitee/testdata/hooks.json new file mode 100644 index 000000000..cd8fa4164 --- /dev/null +++ b/scm/driver/gitee/testdata/hooks.json @@ -0,0 +1,16 @@ +[ + { + "id": 787341, + "url": "http://test.kit101.com/webhook", + "created_at": "2021-10-07T10:27:26+08:00", + "password": "123asdas123", + "project_id": 14836026, + "result": "\u003Chtml\u003E \u003Chead\u003E\u003Ctitle\u003E403 Forbidden\u003C/title\u003E\u003C/head\u003E \u003Cbody\u003E \u003Ccenter\u003E\u003Ch1\u003E403 Forbidden\u003C/h1\u003E\u003C/center\u003E \u003C/body\u003E \u003C/html\u003E", + "result_code": 403, + "push_events": true, + "tag_push_events": true, + "issues_events": true, + "note_events": true, + "merge_requests_events": true + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/hooks.json.golden b/scm/driver/gitee/testdata/hooks.json.golden new file mode 100644 index 000000000..ce6a0d17c --- /dev/null +++ b/scm/driver/gitee/testdata/hooks.json.golden @@ -0,0 +1,16 @@ +[ + { + "ID": "787341", + "Name": "", + "Target": "http://test.kit101.com/webhook", + "Events": [ + "push", + "tag_push", + "issues", + "note", + "merge_requests" + ], + "Active": true, + "SkipVerify": true + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/issue.json b/scm/driver/gitee/testdata/issue.json new file mode 100644 index 000000000..a93370864 --- /dev/null +++ b/scm/driver/gitee/testdata/issue.json @@ -0,0 +1,235 @@ +{ + "id": 7295389, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CD5P", + "repository_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CD5P/labels", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CD5P/comments", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CD5P", + "parent_url": null, + "number": "I4CD5P", + "parent_id": 0, + "depth": 0, + "state": "open", + "title": "test issue 1", + "body": "test issue 1", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "labels": [ + { + "id": 102145592, + "name": "feature", + "color": "B5CC18", + "repository_id": 14836026, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels/feature", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-29T09:55:42+08:00" + } + ], + "assignee": null, + "collaborators": [ + ], + "repository": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "forks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/forks", + "keys_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/keys{/key_id}", + "collaborators_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/collaborators{/collaborator}", + "hooks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/hooks", + "branches_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches{/branch}", + "tags_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/tags", + "blobs_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/blobs{/sha}", + "stargazers_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/stargazers", + "contributors_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contributors", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits{/sha}", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/comments{/number}", + "issue_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/comments{/number}", + "issues_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues{/number}", + "pulls_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls{/number}", + "milestones_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/milestones{/number}", + "notifications_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/notifications{?since,all,participating}", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels{/name}", + "releases_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/releases{/id}", + "recommend": false, + "gvp": false, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "language": null, + "forks_count": 0, + "stargazers_count": 0, + "watchers_count": 1, + "default_branch": "master", + "open_issues_count": 1, + "has_issues": true, + "has_wiki": true, + "issue_comment": false, + "can_comment": true, + "pull_requests_enabled": true, + "has_page": false, + "license": null, + "outsourced": false, + "project_creator": "kit101", + "members": [ + "kit101" + ], + "pushed_at": "2021-09-29T00:46:59+08:00", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-29T09:21:28+08:00", + "parent": null, + "paas": null, + "assignees_number": 1, + "testers_number": 1, + "assignee": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "status": "开始", + "empty_repo": false, + "programs": [ + ], + "enterprise": null + }, + "milestone": null, + "created_at": "2021-09-29T09:21:28+08:00", + "updated_at": "2021-09-29T09:55:42+08:00", + "plan_started_at": null, + "deadline": null, + "finished_at": null, + "scheduled_time": 0.0, + "comments": 0, + "priority": 0, + "issue_type": "任务", + "program": null, + "security_hole": false, + "issue_state": "待办的", + "branch": null, + "issue_type_detail": { + "id": 1, + "title": "任务", + "template": null, + "ident": "task", + "color": "#0086D6", + "is_system": true, + "created_at": "2017-09-01T03:09:12+08:00", + "updated_at": "2017-09-01T03:09:12+08:00" + }, + "issue_state_detail": { + "id": 1, + "title": "待办的", + "color": "#8c92a4", + "icon": "icon-task-state-21", + "command": null, + "serial": 1, + "created_at": "2017-09-01T03:09:13+08:00", + "updated_at": "2017-09-01T03:09:13+08:00" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/issue.json.golden b/scm/driver/gitee/testdata/issue.json.golden new file mode 100644 index 000000000..6075529d9 --- /dev/null +++ b/scm/driver/gitee/testdata/issue.json.golden @@ -0,0 +1,16 @@ +{ + "Number": 735267685380, + "Title": "test issue 1", + "Body": "test issue 1", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CD5P", + "Labels": [ + "feature" + ], + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-29T09:21:28+08:00", + "Updated": "2021-09-29T09:55:42+08:00" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/issue_comment.json b/scm/driver/gitee/testdata/issue_comment.json new file mode 100644 index 000000000..09e3a289a --- /dev/null +++ b/scm/driver/gitee/testdata/issue_comment.json @@ -0,0 +1,34 @@ +{ + "id": 6877445, + "body": "it's ok.", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "source": null, + "target": { + "issue": { + "id": 7295389, + "title": "test issue 1", + "number": "I4CD5P" + }, + "pull_request": null + }, + "created_at": "2021-09-29T11:00:50+08:00", + "updated_at": "2021-09-29T11:00:50+08:00" +} diff --git a/scm/driver/gitee/testdata/issue_comment.json.golden b/scm/driver/gitee/testdata/issue_comment.json.golden new file mode 100644 index 000000000..283c558a7 --- /dev/null +++ b/scm/driver/gitee/testdata/issue_comment.json.golden @@ -0,0 +1,10 @@ +{ + "ID": 6877445, + "Body": "it's ok.", + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-29T11:00:50+08:00", + "Updated": "2021-09-29T11:00:50+08:00" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/issue_comments.json b/scm/driver/gitee/testdata/issue_comments.json new file mode 100644 index 000000000..c310a4348 --- /dev/null +++ b/scm/driver/gitee/testdata/issue_comments.json @@ -0,0 +1,36 @@ +[ + { + "id": 6877445, + "body": "it's ok.", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "source": null, + "target": { + "issue": { + "id": 7295389, + "title": "test issue 1", + "number": "I4CD5P" + }, + "pull_request": null + }, + "created_at": "2021-09-29T11:00:50+08:00", + "updated_at": "2021-09-29T11:00:50+08:00" + } +] diff --git a/scm/driver/gitee/testdata/issue_comments.json.golden b/scm/driver/gitee/testdata/issue_comments.json.golden new file mode 100644 index 000000000..ea7200e52 --- /dev/null +++ b/scm/driver/gitee/testdata/issue_comments.json.golden @@ -0,0 +1,12 @@ +[ + { + "ID": 6877445, + "Body": "it's ok.", + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-29T11:00:50+08:00", + "Updated": "2021-09-29T11:00:50+08:00" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/issues.json b/scm/driver/gitee/testdata/issues.json new file mode 100644 index 000000000..ca238cbb4 --- /dev/null +++ b/scm/driver/gitee/testdata/issues.json @@ -0,0 +1,468 @@ +[ + { + "id": 7296764, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CE7W", + "repository_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CE7W/labels", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CE7W/comments", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CE7W", + "parent_url": null, + "number": "I4CE7W", + "parent_id": 0, + "depth": 0, + "state": "closed", + "title": "close issue test", + "body": "close issue test", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "labels": [ + { + "id": 102145594, + "name": "invalid", + "color": "1B1C1D", + "repository_id": 14836026, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels/invalid", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-29T11:05:30+08:00" + } + ], + "assignee": null, + "collaborators": [], + "repository": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "forks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/forks", + "keys_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/keys{/key_id}", + "collaborators_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/collaborators{/collaborator}", + "hooks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/hooks", + "branches_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches{/branch}", + "tags_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/tags", + "blobs_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/blobs{/sha}", + "stargazers_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/stargazers", + "contributors_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contributors", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits{/sha}", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/comments{/number}", + "issue_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/comments{/number}", + "issues_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues{/number}", + "pulls_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls{/number}", + "milestones_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/milestones{/number}", + "notifications_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/notifications{?since,all,participating}", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels{/name}", + "releases_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/releases{/id}", + "recommend": false, + "gvp": false, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "language": null, + "forks_count": 0, + "stargazers_count": 0, + "watchers_count": 1, + "default_branch": "master", + "open_issues_count": 1, + "has_issues": true, + "has_wiki": true, + "issue_comment": false, + "can_comment": true, + "pull_requests_enabled": true, + "has_page": false, + "license": null, + "outsourced": false, + "project_creator": "kit101", + "members": [ + "kit101" + ], + "pushed_at": "2021-09-29T00:46:59+08:00", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-29T11:05:49+08:00", + "parent": null, + "paas": null, + "assignees_number": 1, + "testers_number": 1, + "assignee": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "status": "开始", + "empty_repo": false, + "programs": [], + "enterprise": null + }, + "milestone": null, + "created_at": "2021-09-29T11:05:30+08:00", + "updated_at": "2021-09-29T11:05:49+08:00", + "plan_started_at": null, + "deadline": null, + "finished_at": "2021-09-29T11:05:49+08:00", + "scheduled_time": 0.0, + "comments": 0, + "priority": 0, + "issue_type": "任务", + "program": null, + "security_hole": false, + "issue_state": "已完成", + "branch": null, + "issue_type_detail": { + "id": 1, + "title": "任务", + "template": null, + "ident": "task", + "color": "#0086D6", + "is_system": true, + "created_at": "2017-09-01T03:09:12+08:00", + "updated_at": "2017-09-01T03:09:12+08:00" + }, + "issue_state_detail": { + "id": 3, + "title": "已完成", + "color": "#4baf50", + "icon": "icon-task-state-24", + "command": null, + "serial": 3, + "created_at": "2017-09-01T03:09:13+08:00", + "updated_at": "2017-09-01T03:09:13+08:00" + } + }, + { + "id": 7295389, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CD5P", + "repository_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CD5P/labels", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/I4CD5P/comments", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CD5P", + "parent_url": null, + "number": "I4CD5P", + "parent_id": 0, + "depth": 0, + "state": "open", + "title": "test issue 1", + "body": "test issue 1", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "labels": [ + { + "id": 102145592, + "name": "feature", + "color": "B5CC18", + "repository_id": 14836026, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels/feature", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-29T09:55:42+08:00" + } + ], + "assignee": null, + "collaborators": [], + "repository": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "forks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/forks", + "keys_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/keys{/key_id}", + "collaborators_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/collaborators{/collaborator}", + "hooks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/hooks", + "branches_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches{/branch}", + "tags_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/tags", + "blobs_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/blobs{/sha}", + "stargazers_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/stargazers", + "contributors_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contributors", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits{/sha}", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/comments{/number}", + "issue_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/comments{/number}", + "issues_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues{/number}", + "pulls_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls{/number}", + "milestones_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/milestones{/number}", + "notifications_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/notifications{?since,all,participating}", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels{/name}", + "releases_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/releases{/id}", + "recommend": false, + "gvp": false, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "language": null, + "forks_count": 0, + "stargazers_count": 0, + "watchers_count": 1, + "default_branch": "master", + "open_issues_count": 1, + "has_issues": true, + "has_wiki": true, + "issue_comment": false, + "can_comment": true, + "pull_requests_enabled": true, + "has_page": false, + "license": null, + "outsourced": false, + "project_creator": "kit101", + "members": [ + "kit101" + ], + "pushed_at": "2021-09-29T00:46:59+08:00", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-29T11:05:49+08:00", + "parent": null, + "paas": null, + "assignees_number": 1, + "testers_number": 1, + "assignee": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "status": "开始", + "empty_repo": false, + "programs": [], + "enterprise": null + }, + "milestone": null, + "created_at": "2021-09-29T09:21:28+08:00", + "updated_at": "2021-09-29T11:00:50+08:00", + "plan_started_at": null, + "deadline": null, + "finished_at": null, + "scheduled_time": 0.0, + "comments": 1, + "priority": 0, + "issue_type": "任务", + "program": null, + "security_hole": false, + "issue_state": "待办的", + "branch": null, + "issue_type_detail": { + "id": 1, + "title": "任务", + "template": null, + "ident": "task", + "color": "#0086D6", + "is_system": true, + "created_at": "2017-09-01T03:09:12+08:00", + "updated_at": "2017-09-01T03:09:12+08:00" + }, + "issue_state_detail": { + "id": 1, + "title": "待办的", + "color": "#8c92a4", + "icon": "icon-task-state-21", + "command": null, + "serial": 1, + "created_at": "2017-09-01T03:09:13+08:00", + "updated_at": "2017-09-01T03:09:13+08:00" + } + } +] diff --git a/scm/driver/gitee/testdata/issues.json.golden b/scm/driver/gitee/testdata/issues.json.golden new file mode 100644 index 000000000..b9daeccaf --- /dev/null +++ b/scm/driver/gitee/testdata/issues.json.golden @@ -0,0 +1,34 @@ +[ + { + "Number": 735267695587, + "Title": "close issue test", + "Body": "close issue test", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CE7W", + "Labels": [ + "invalid" + ], + "Closed": true, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-29T11:05:30+08:00", + "Updated": "2021-09-29T11:05:49+08:00" + }, + { + "Number": 735267685380, + "Title": "test issue 1", + "Body": "test issue 1", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CD5P", + "Labels": [ + "feature" + ], + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-29T09:21:28+08:00", + "Updated": "2021-09-29T11:00:50+08:00" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/membership.json b/scm/driver/gitee/testdata/membership.json new file mode 100644 index 000000000..e6edce7dd --- /dev/null +++ b/scm/driver/gitee/testdata/membership.json @@ -0,0 +1,28 @@ +{ + "url": "https://gitee.com/api/v5/orgs/kit101-personal/memberships/kit101", + "active": true, + "remark": null, + "role": "admin", + "organization_url": "https://gitee.com/api/v5/orgs/kit101-personal", + "organization": { + "id": 8538153, + "login": "kit101-personal", + "name": "kit101-personal", + "url": "https://gitee.com/api/v5/orgs/kit101-personal", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/namespace/2846/8538153_kit101-personal_1632964073.png?is_link=true", + "repos_url": "https://gitee.com/api/v5/orgs/kit101-personal/repos", + "events_url": "https://gitee.com/api/v5/orgs/kit101-personal/events", + "members_url": "https://gitee.com/api/v5/orgs/kit101-personal/members{/member}", + "description": "", + "follow_count": 1 + }, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/membership.json.golden b/scm/driver/gitee/testdata/membership.json.golden new file mode 100644 index 000000000..96ec5685e --- /dev/null +++ b/scm/driver/gitee/testdata/membership.json.golden @@ -0,0 +1,4 @@ +{ + "Active": true, + "Role": 2 +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/org.json b/scm/driver/gitee/testdata/org.json new file mode 100644 index 000000000..30389776c --- /dev/null +++ b/scm/driver/gitee/testdata/org.json @@ -0,0 +1,12 @@ +{ + "id": 8538153, + "login": "kit101-personal", + "name": "kit101-personal", + "url": "https://gitee.com/api/v5/orgs/kit101-personal", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/namespace/2846/8538153_kit101-personal_1632964073.png?is_link=true", + "repos_url": "https://gitee.com/api/v5/orgs/kit101-personal/repos", + "events_url": "https://gitee.com/api/v5/orgs/kit101-personal/events", + "members_url": "https://gitee.com/api/v5/orgs/kit101-personal/members{/member}", + "description": "", + "follow_count": 1 +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/org.json.golden b/scm/driver/gitee/testdata/org.json.golden new file mode 100644 index 000000000..0259356f0 --- /dev/null +++ b/scm/driver/gitee/testdata/org.json.golden @@ -0,0 +1,4 @@ +{ + "Name": "kit101-personal", + "Avatar": "https://portrait.gitee.com/uploads/avatars/namespace/2846/8538153_kit101-personal_1632964073.png?is_link=true" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/orgs.json b/scm/driver/gitee/testdata/orgs.json new file mode 100644 index 000000000..bd511847a --- /dev/null +++ b/scm/driver/gitee/testdata/orgs.json @@ -0,0 +1,15 @@ +[ + { + "id": 8538153, + "login": "kit101-personal", + "name": "kit101-personal", + "url": "https://gitee.com/api/v5/orgs/kit101-personal", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/namespace/2846/8538153_kit101-personal_1632964073.png?is_link=true", + "repos_url": "https://gitee.com/api/v5/orgs/kit101-personal/repos", + "events_url": "https://gitee.com/api/v5/orgs/kit101-personal/events", + "members_url": "https://gitee.com/api/v5/orgs/kit101-personal/members{/member}", + "description": "", + "follow_count": 1 + } +] + \ No newline at end of file diff --git a/scm/driver/gitee/testdata/orgs.json.golden b/scm/driver/gitee/testdata/orgs.json.golden new file mode 100644 index 000000000..c0816e83d --- /dev/null +++ b/scm/driver/gitee/testdata/orgs.json.golden @@ -0,0 +1,6 @@ +[ + { + "Name": "kit101-personal", + "Avatar": "https://portrait.gitee.com/uploads/avatars/namespace/2846/8538153_kit101-personal_1632964073.png?is_link=true" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr.json b/scm/driver/gitee/testdata/pr.json new file mode 100644 index 000000000..1cadc54a3 --- /dev/null +++ b/scm/driver/gitee/testdata/pr.json @@ -0,0 +1,239 @@ +{ + "id": 4730187, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/6", + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/6.diff", + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/6.patch", + "issue_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/issues", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/commits", + "review_comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/{/number}", + "review_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/6/comments", + "number": 6, + "state": "open", + "title": "new-feature", + "body": "Please pull these awesome changes", + "assignees_number": 1, + "testers_number": 1, + "assignees": [], + "testers": [], + "milestone": null, + "labels": [], + "locked": false, + "created_at": "2021-09-30T16:38:19+08:00", + "updated_at": "2021-09-30T16:38:19+08:00", + "closed_at": null, + "merged_at": null, + "mergeable": true, + "can_merge_check": false, + "head": { + "label": "crud", + "ref": "crud", + "sha": "411db0d9e9072851383751c260dc1601840906e4", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "base": { + "label": "master", + "ref": "master", + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "_links": { + "self": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6" + }, + "html": { + "href": "https://gitee.com/kit101/drone-yml-test/pulls/6" + }, + "issue": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/issues" + }, + "comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/comments" + }, + "review_comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/comments" + }, + "review_comment": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/6" + }, + "commits": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/commits" + } + }, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr.json.golden b/scm/driver/gitee/testdata/pr.json.golden new file mode 100644 index 000000000..f5fc30fe1 --- /dev/null +++ b/scm/driver/gitee/testdata/pr.json.golden @@ -0,0 +1,30 @@ +{ + "Number": 6, + "Title": "new-feature", + "Body": "Please pull these awesome changes", + "Sha": "411db0d9e9072851383751c260dc1601840906e4", + "Ref": "refs/pull/6/head", + "Source": "crud", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/6", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/6.diff", + "Closed": false, + "Merged": false, + "Base": { + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "Path": "refs/heads/master", + "Name": "master" + }, + "Head": { + "Sha": "411db0d9e9072851383751c260dc1601840906e4", + "Path": "refs/heads/crud", + "Name": "crud" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-30T16:38:19+08:00", + "Updated": "2021-09-30T16:38:19+08:00" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_comment.json b/scm/driver/gitee/testdata/pr_comment.json new file mode 100644 index 000000000..ff5892789 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_comment.json @@ -0,0 +1,44 @@ +{ + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/6922557", + "id": 6922557, + "path": null, + "position": null, + "original_position": null, + "commit_id": null, + "original_commit_id": null, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "created_at": "2021-10-07T09:26:45+08:00", + "updated_at": "2021-10-07T09:26:45+08:00", + "body": "test comment 1", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/7#note_6922557", + "pull_request_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/7", + "_links": { + "self": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/6922557" + }, + "html": { + "href": "https://gitee.com/kit101/drone-yml-test/pulls/7#note_6922557" + }, + "pull_request": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/7" + } + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_comment.json.golden b/scm/driver/gitee/testdata/pr_comment.json.golden new file mode 100644 index 000000000..636bc0e05 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_comment.json.golden @@ -0,0 +1,11 @@ +{ + "ID": 6922557, + "Body": "test comment 1", + "Author": { + "Login": "kit101", + "Name": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-07T09:26:45+08:00", + "Updated": "2021-10-07T09:26:45+08:00" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_comments.json b/scm/driver/gitee/testdata/pr_comments.json new file mode 100644 index 000000000..02652c4f7 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_comments.json @@ -0,0 +1,46 @@ +[ + { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/6922557", + "id": 6922557, + "path": null, + "position": null, + "original_position": null, + "commit_id": null, + "original_commit_id": null, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "created_at": "2021-10-07T09:26:45+08:00", + "updated_at": "2021-10-07T09:26:45+08:00", + "body": "test comment 1", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/7#note_6922557", + "pull_request_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/7", + "_links": { + "self": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/6922557" + }, + "html": { + "href": "https://gitee.com/kit101/drone-yml-test/pulls/7#note_6922557" + }, + "pull_request": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/7" + } + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_comments.json.golden b/scm/driver/gitee/testdata/pr_comments.json.golden new file mode 100644 index 000000000..93743f276 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_comments.json.golden @@ -0,0 +1,13 @@ +[ + { + "ID": 6922557, + "Body": "test comment 1", + "Author": { + "Login": "kit101", + "Name": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-07T09:26:45+08:00", + "Updated": "2021-10-07T09:26:45+08:00" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_commits.json b/scm/driver/gitee/testdata/pr_commits.json new file mode 100644 index 000000000..9c82717fe --- /dev/null +++ b/scm/driver/gitee/testdata/pr_commits.json @@ -0,0 +1,65 @@ +[ + { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/00b76e8abd51ae6a96318b3450944b32995f9158", + "sha": "00b76e8abd51ae6a96318b3450944b32995f9158", + "html_url": "https://gitee.com/kit101/drone-yml-test/commits/00b76e8abd51ae6a96318b3450944b32995f9158", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/00b76e8abd51ae6a96318b3450944b32995f9158/comments", + "commit": { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/00b76e8abd51ae6a96318b3450944b32995f9158", + "author": { + "name": "kit101", + "email": "qkssk1711@163.com", + "date": "2021-09-30T18:09:57+08:00" + }, + "committer": { + "name": "kit101", + "email": "qkssk1711@163.com", + "date": "2021-09-30T18:09:57+08:00" + }, + "message": "add3\n", + "comment_count": 7 + }, + "author": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "committer": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "parents": { + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits/00b76e8abd51ae6a96318b3450944b32995f9158", + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_commits.json.golden b/scm/driver/gitee/testdata/pr_commits.json.golden new file mode 100644 index 000000000..b28ce6888 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_commits.json.golden @@ -0,0 +1,21 @@ +[ + { + "Message": "add3\n", + "Sha": "00b76e8abd51ae6a96318b3450944b32995f9158", + "Link": "https://gitee.com/kit101/drone-yml-test/commits/00b76e8abd51ae6a96318b3450944b32995f9158", + "Author": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-09-30T18:09:57+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Committer": { + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-09-30T18:09:57+08:00", + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_files.json b/scm/driver/gitee/testdata/pr_files.json new file mode 100644 index 000000000..975b27f21 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_files.json @@ -0,0 +1,82 @@ +[ + { + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "filename": "change/add.txt", + "status": "deleted", + "additions": "0", + "deletions": "1", + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/2eac1cac02c325058cf959725c45b0612d3e8177/change/add.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/2eac1cac02c325058cf959725c45b0612d3e8177/change/add.txt", + "patch": { + "diff": "@@ -1 +0,0 @@\n-add\n\\ No newline at end of file\n", + "new_path": "change/add.txt", + "old_path": "change/add.txt", + "a_mode": "100644", + "b_mode": "0", + "new_file": false, + "renamed_file": false, + "deleted_file": true, + "too_large": false + } + }, + { + "sha": "411db0d9e9072851383751c260dc1601840906e4", + "filename": "change/add2.txt", + "status": "added", + "additions": "4", + "deletions": "0", + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/411db0d9e9072851383751c260dc1601840906e4/change/add2.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/411db0d9e9072851383751c260dc1601840906e4/change/add2.txt", + "patch": { + "diff": "@@ -0,0 +1,4 @@\n+add 2\n+add 2\n+add 2\n+add 2\n\\ No newline at end of file\n", + "new_path": "change/add2.txt", + "old_path": "change/add2.txt", + "a_mode": "0", + "b_mode": "100644", + "new_file": true, + "renamed_file": false, + "deleted_file": false, + "too_large": false + } + }, + { + "sha": "411db0d9e9072851383751c260dc1601840906e4", + "filename": "change/modified.txt", + "status": null, + "additions": "6", + "deletions": "1", + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/411db0d9e9072851383751c260dc1601840906e4/change/modified.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/411db0d9e9072851383751c260dc1601840906e4/change/modified.txt", + "patch": { + "diff": "@@ -1,2 +1,7 @@\n will be modified\n-modified\n\\ No newline at end of file\n+modified\n+modified 2\n+modified 2\n+modified 2\n+modified 2\n+modified 2\n\\ No newline at end of file\n", + "new_path": "change/modified.txt", + "old_path": "change/modified.txt", + "a_mode": "100644", + "b_mode": "100644", + "new_file": false, + "renamed_file": false, + "deleted_file": false, + "too_large": false + } + }, + { + "sha": "411db0d9e9072851383751c260dc1601840906e4", + "filename": "change/rename.2.txt", + "status": "renamed", + "additions": "0", + "deletions": "0", + "blob_url": "https://gitee.com/kit101/drone-yml-test/blob/411db0d9e9072851383751c260dc1601840906e4/change/rename.2.txt", + "raw_url": "https://gitee.com/kit101/drone-yml-test/raw/411db0d9e9072851383751c260dc1601840906e4/change/rename.2.txt", + "patch": { + "diff": "", + "new_path": "change/rename.2.txt", + "old_path": "change/rename.1.txt", + "a_mode": "100644", + "b_mode": "100644", + "new_file": false, + "renamed_file": true, + "deleted_file": false, + "too_large": false + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pr_files.json.golden b/scm/driver/gitee/testdata/pr_files.json.golden new file mode 100644 index 000000000..be4c1d330 --- /dev/null +++ b/scm/driver/gitee/testdata/pr_files.json.golden @@ -0,0 +1,30 @@ +[ + { + "BlobID": "2eac1cac02c325058cf959725c45b0612d3e8177", + "Path": "change/add.txt", + "Added": false, + "Renamed": false, + "Deleted": true + }, + { + "BlobID": "411db0d9e9072851383751c260dc1601840906e4", + "Path": "change/add2.txt", + "Added": true, + "Renamed": false, + "Deleted": false + }, + { + "BlobID": "411db0d9e9072851383751c260dc1601840906e4", + "Path": "change/modified.txt", + "Added": false, + "Renamed": false, + "Deleted": false + }, + { + "BlobID": "411db0d9e9072851383751c260dc1601840906e4", + "Path": "change/rename.2.txt", + "Added": false, + "Renamed": true, + "Deleted": false + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pulls.json b/scm/driver/gitee/testdata/pulls.json new file mode 100644 index 000000000..8f5b93450 --- /dev/null +++ b/scm/driver/gitee/testdata/pulls.json @@ -0,0 +1,839 @@ +[ + { + "id": 4730187, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/6", + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/6.diff", + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/6.patch", + "issue_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/issues", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/commits", + "review_comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/{/number}", + "review_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/6/comments", + "number": 6, + "state": "open", + "title": "new-feature", + "body": "Please pull these awesome changes", + "assignees_number": 1, + "testers_number": 1, + "assignees": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "milestone": null, + "labels": [], + "locked": false, + "created_at": "2021-09-30T16:38:19+08:00", + "updated_at": "2021-09-30T16:38:19+08:00", + "closed_at": null, + "merged_at": null, + "mergeable": true, + "can_merge_check": false, + "head": { + "label": "crud", + "ref": "crud", + "sha": "411db0d9e9072851383751c260dc1601840906e4", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "base": { + "label": "master", + "ref": "master", + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "_links": { + "self": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6" + }, + "html": { + "href": "https://gitee.com/kit101/drone-yml-test/pulls/6" + }, + "issue": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/issues" + }, + "comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/comments" + }, + "review_comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/comments" + }, + "review_comment": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/6" + }, + "commits": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/6/commits" + } + }, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + }, + { + "id": 4730175, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/5", + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/5.diff", + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/5.patch", + "issue_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5/issues", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5/commits", + "review_comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/{/number}", + "review_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/5/comments", + "number": 5, + "state": "closed", + "title": "new-feature", + "body": "Please pull these awesome changes", + "assignees_number": 1, + "testers_number": 1, + "assignees": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "milestone": null, + "labels": [], + "locked": false, + "created_at": "2021-09-30T16:37:34+08:00", + "updated_at": "2021-09-30T16:38:14+08:00", + "closed_at": "2021-09-30T16:38:14+08:00", + "merged_at": null, + "mergeable": true, + "can_merge_check": false, + "head": { + "label": "crud", + "ref": "crud", + "sha": "411db0d9e9072851383751c260dc1601840906e4", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "base": { + "label": "master", + "ref": "master", + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "_links": { + "self": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5" + }, + "html": { + "href": "https://gitee.com/kit101/drone-yml-test/pulls/5" + }, + "issue": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5/issues" + }, + "comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5/comments" + }, + "review_comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5/comments" + }, + "review_comment": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/5" + }, + "commits": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/5/commits" + } + }, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + }, + { + "id": 4730041, + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/4", + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/4.diff", + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/4.patch", + "issue_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4/issues", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4/commits", + "review_comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/{/number}", + "review_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/4/comments", + "number": 4, + "state": "open", + "title": "create crud pr by api", + "body": "create crud pr by api", + "assignees_number": 1, + "testers_number": 1, + "assignees": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "milestone": null, + "labels": [], + "locked": false, + "created_at": "2021-09-30T16:28:09+08:00", + "updated_at": "2021-09-30T16:28:10+08:00", + "closed_at": null, + "merged_at": null, + "mergeable": true, + "can_merge_check": false, + "head": { + "label": "feat-1", + "ref": "feat-1", + "sha": "2700445cd84c08546f4d003f8aa54d2099a006b7", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "base": { + "label": "master", + "ref": "master", + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "repo": { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git" + } + }, + "_links": { + "self": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4" + }, + "html": { + "href": "https://gitee.com/kit101/drone-yml-test/pulls/4" + }, + "issue": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4/issues" + }, + "comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4/comments" + }, + "review_comments": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4/comments" + }, + "review_comment": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/comments/4" + }, + "commits": { + "href": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls/4/commits" + } + }, + "user": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/pulls.json.golden b/scm/driver/gitee/testdata/pulls.json.golden new file mode 100644 index 000000000..e0d127ef0 --- /dev/null +++ b/scm/driver/gitee/testdata/pulls.json.golden @@ -0,0 +1,92 @@ +[ + { + "Number": 6, + "Title": "new-feature", + "Body": "Please pull these awesome changes", + "Sha": "411db0d9e9072851383751c260dc1601840906e4", + "Ref": "refs/pull/6/head", + "Source": "crud", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/6", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/6.diff", + "Closed": false, + "Merged": false, + "Created": "2021-09-30T16:38:19+08:00", + "Updated": "2021-09-30T16:38:19+08:00", + "Head": { + "Sha": "411db0d9e9072851383751c260dc1601840906e4", + "Path": "refs/heads/crud", + "Name": "crud" + }, + "Base": { + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "Path": "refs/heads/master", + "Name": "master" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + } + }, + { + "Number": 5, + "Title": "new-feature", + "Body": "Please pull these awesome changes", + "Sha": "411db0d9e9072851383751c260dc1601840906e4", + "Ref": "refs/pull/5/head", + "Source": "crud", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/5", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/5.diff", + "Closed": true, + "Merged": false, + "Created": "2021-09-30T16:37:34+08:00", + "Updated": "2021-09-30T16:38:14+08:00", + "Head": { + "Sha": "411db0d9e9072851383751c260dc1601840906e4", + "Path": "refs/heads/crud", + "Name": "crud" + }, + "Base": { + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "Path": "refs/heads/master", + "Name": "master" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + } + }, + { + "Number": 4, + "Title": "create crud pr by api", + "Body": "create crud pr by api", + "Sha": "2700445cd84c08546f4d003f8aa54d2099a006b7", + "Ref": "refs/pull/4/head", + "Source": "feat-1", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/4", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/4.diff", + "Closed": false, + "Merged": false, + "Created": "2021-09-30T16:28:09+08:00", + "Updated": "2021-09-30T16:28:10+08:00", + "Head": { + "Sha": "2700445cd84c08546f4d003f8aa54d2099a006b7", + "Path": "refs/heads/feat-1", + "Name": "feat-1" + }, + "Base": { + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "Path": "refs/heads/master", + "Name": "master" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/repo.json b/scm/driver/gitee/testdata/repo.json new file mode 100644 index 000000000..b567618b5 --- /dev/null +++ b/scm/driver/gitee/testdata/repo.json @@ -0,0 +1,160 @@ +{ + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "forks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/forks", + "keys_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/keys{/key_id}", + "collaborators_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/collaborators{/collaborator}", + "hooks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/hooks", + "branches_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches{/branch}", + "tags_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/tags", + "blobs_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/blobs{/sha}", + "stargazers_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/stargazers", + "contributors_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contributors", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits{/sha}", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/comments{/number}", + "issue_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/comments{/number}", + "issues_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues{/number}", + "pulls_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls{/number}", + "milestones_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/milestones{/number}", + "notifications_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/notifications{?since,all,participating}", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels{/name}", + "releases_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/releases{/id}", + "recommend": false, + "gvp": false, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "language": null, + "forks_count": 0, + "stargazers_count": 0, + "watchers_count": 1, + "default_branch": "master", + "open_issues_count": 2, + "has_issues": true, + "has_wiki": true, + "issue_comment": false, + "can_comment": true, + "pull_requests_enabled": true, + "has_page": false, + "license": null, + "outsourced": false, + "project_creator": "kit101", + "members": [ + "kit101" + ], + "pushed_at": "2021-09-30T18:10:23+08:00", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-30T18:10:27+08:00", + "parent": null, + "paas": null, + "stared": false, + "watched": true, + "permission": { + "pull": true, + "push": true, + "admin": true + }, + "relation": "master", + "assignees_number": 1, + "testers_number": 1, + "assignee": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "status": "开始", + "empty_repo": false, + "programs": [], + "enterprise": null +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/repo.json.golden b/scm/driver/gitee/testdata/repo.json.golden new file mode 100644 index 000000000..fd7593d97 --- /dev/null +++ b/scm/driver/gitee/testdata/repo.json.golden @@ -0,0 +1,17 @@ +{ + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Perm": { + "Pull": true, + "Push": true, + "Admin": true + }, + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test.git", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-09-30T18:10:27+08:00" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/repos.json b/scm/driver/gitee/testdata/repos.json new file mode 100644 index 000000000..57b247b62 --- /dev/null +++ b/scm/driver/gitee/testdata/repos.json @@ -0,0 +1,162 @@ +[ + { + "id": 14836026, + "full_name": "kit101/drone-yml-test", + "human_name": "kit101/drone-yml-test", + "url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test", + "namespace": { + "id": 1576684, + "type": "personal", + "name": "kit101", + "path": "kit101", + "html_url": "https://gitee.com/kit101" + }, + "path": "drone-yml-test", + "name": "drone-yml-test", + "owner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "assigner": { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + }, + "description": "", + "private": false, + "public": true, + "internal": false, + "fork": false, + "html_url": "https://gitee.com/kit101/drone-yml-test.git", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "forks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/forks", + "keys_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/keys{/key_id}", + "collaborators_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/collaborators{/collaborator}", + "hooks_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/hooks", + "branches_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/branches{/branch}", + "tags_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/tags", + "blobs_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/blobs{/sha}", + "stargazers_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/stargazers", + "contributors_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/contributors", + "commits_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/commits{/sha}", + "comments_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/comments{/number}", + "issue_comment_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues/comments{/number}", + "issues_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/issues{/number}", + "pulls_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/pulls{/number}", + "milestones_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/milestones{/number}", + "notifications_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/notifications{?since,all,participating}", + "labels_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/labels{/name}", + "releases_url": "https://gitee.com/api/v5/repos/kit101/drone-yml-test/releases{/id}", + "recommend": false, + "gvp": false, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "language": null, + "forks_count": 0, + "stargazers_count": 0, + "watchers_count": 1, + "default_branch": "master", + "open_issues_count": 2, + "has_issues": true, + "has_wiki": true, + "issue_comment": false, + "can_comment": true, + "pull_requests_enabled": true, + "has_page": false, + "license": null, + "outsourced": false, + "project_creator": "kit101", + "members": [ + "kit101" + ], + "pushed_at": "2021-09-30T18:10:23+08:00", + "created_at": "2021-03-24T11:24:34+08:00", + "updated_at": "2021-09-30T18:10:27+08:00", + "parent": null, + "paas": null, + "stared": false, + "watched": true, + "permission": { + "pull": true, + "push": true, + "admin": true + }, + "relation": "master", + "assignees_number": 1, + "testers_number": 1, + "assignee": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "testers": [ + { + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "remark": "", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User" + } + ], + "status": "开始", + "empty_repo": false, + "programs": [], + "enterprise": null + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/repos.json.golden b/scm/driver/gitee/testdata/repos.json.golden new file mode 100644 index 000000000..3437a1eb1 --- /dev/null +++ b/scm/driver/gitee/testdata/repos.json.golden @@ -0,0 +1,19 @@ +[ + { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Perm": { + "Pull": true, + "Push": true, + "Admin": true + }, + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test.git", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-09-30T18:10:27+08:00" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/tag.json b/scm/driver/gitee/testdata/tag.json new file mode 100644 index 000000000..34d894a5b --- /dev/null +++ b/scm/driver/gitee/testdata/tag.json @@ -0,0 +1,8 @@ +{ + "name": "1.0", + "message": "1.0", + "commit": { + "sha": "5e7876efb3468ff679410b82a72f7c002382d41e", + "date": "2021-03-24T11:29:35+08:00" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/tag.json.golden b/scm/driver/gitee/testdata/tag.json.golden new file mode 100644 index 000000000..1e286b6e4 --- /dev/null +++ b/scm/driver/gitee/testdata/tag.json.golden @@ -0,0 +1,5 @@ +{ + "name": "1.0", + "Path": "refs/tags/1.0", + "Sha": "5e7876efb3468ff679410b82a72f7c002382d41e" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/tags.json b/scm/driver/gitee/testdata/tags.json new file mode 100644 index 000000000..dd2ef627c --- /dev/null +++ b/scm/driver/gitee/testdata/tags.json @@ -0,0 +1,34 @@ +[ + { + "name": "release-test", + "message": "", + "commit": { + "sha": "25b13a79d771314d0075302178eb18aef79e80db", + "date": "2021-08-17T16:01:03+00:00" + } + }, + { + "name": "1.1", + "message": "1.1", + "commit": { + "sha": "5e7876efb3468ff679410b82a72f7c002382d41e", + "date": "2021-03-24T11:29:35+08:00" + } + }, + { + "name": "1.0", + "message": "1.0", + "commit": { + "sha": "5e7876efb3468ff679410b82a72f7c002382d41e", + "date": "2021-03-24T11:29:35+08:00" + } + }, + { + "name": "1.2", + "message": "", + "commit": { + "sha": "5e7876efb3468ff679410b82a72f7c002382d41e", + "date": "2021-03-24T11:29:35+08:00" + } + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/tags.json.golden b/scm/driver/gitee/testdata/tags.json.golden new file mode 100644 index 000000000..1bcaa50c6 --- /dev/null +++ b/scm/driver/gitee/testdata/tags.json.golden @@ -0,0 +1,22 @@ +[ + { + "Name": "release-test", + "Path": "refs/tags/release-test", + "Sha": "25b13a79d771314d0075302178eb18aef79e80db" + }, + { + "name": "1.1", + "Path": "refs/tags/1.1", + "Sha": "5e7876efb3468ff679410b82a72f7c002382d41e" + }, + { + "name": "1.0", + "Path": "refs/tags/1.0", + "Sha": "5e7876efb3468ff679410b82a72f7c002382d41e" + }, + { + "name": "1.2", + "Path": "refs/tags/1.2", + "Sha": "5e7876efb3468ff679410b82a72f7c002382d41e" + } +] \ No newline at end of file diff --git a/scm/driver/gitee/testdata/user.json b/scm/driver/gitee/testdata/user.json new file mode 100644 index 000000000..b46072350 --- /dev/null +++ b/scm/driver/gitee/testdata/user.json @@ -0,0 +1,30 @@ +{ + "id": 1535738, + "login": "kit101", + "name": "kit101", + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "url": "https://gitee.com/api/v5/users/kit101", + "html_url": "https://gitee.com/kit101", + "followers_url": "https://gitee.com/api/v5/users/kit101/followers", + "following_url": "https://gitee.com/api/v5/users/kit101/following_url{/other_user}", + "gists_url": "https://gitee.com/api/v5/users/kit101/gists{/gist_id}", + "starred_url": "https://gitee.com/api/v5/users/kit101/starred{/owner}{/repo}", + "subscriptions_url": "https://gitee.com/api/v5/users/kit101/subscriptions", + "organizations_url": "https://gitee.com/api/v5/users/kit101/orgs", + "repos_url": "https://gitee.com/api/v5/users/kit101/repos", + "events_url": "https://gitee.com/api/v5/users/kit101/events{/privacy}", + "received_events_url": "https://gitee.com/api/v5/users/kit101/received_events", + "type": "User", + "blog": null, + "weibo": null, + "bio": "", + "public_repos": 6, + "public_gists": 0, + "followers": 2, + "following": 3, + "stared": 12, + "watched": 17, + "created_at": "2017-09-15T11:34:30+08:00", + "updated_at": "2021-08-06T16:34:48+08:00", + "email": "qkssk1711@163.com" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/user.json.golden b/scm/driver/gitee/testdata/user.json.golden new file mode 100644 index 000000000..d0ddb0d43 --- /dev/null +++ b/scm/driver/gitee/testdata/user.json.golden @@ -0,0 +1,8 @@ +{ + "Login": "kit101", + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Created": "2017-09-15T11:34:30+08:00", + "Updated": "2021-08-06T16:34:48+08:00" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_assign.json b/scm/driver/gitee/testdata/webhooks/issue_hook_assign.json new file mode 100644 index 000000000..913920c2d --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_assign.json @@ -0,0 +1,223 @@ +{ + "action": "assign", + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "description": "test issue hook\nupdate 1", + "enterprise": null, + "hook_id": 788005, + "hook_name": "issue_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": "I4CYEO", + "issue": { + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "test issue hook\nupdate 1", + "collaborators": [ + ], + "comments": 0, + "created_at": "2021-10-08T16:08:32+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "id": 7322928, + "labels": [ + { + "color": "767676", + "id": 102145593, + "name": "duplicate" + } + ], + "milestone": null, + "number": "I4CYEO", + "state": "progressing", + "state_name": "进行中", + "title": "test issue hook", + "type_name": "任务", + "updated_at": "2021-10-08T16:12:33+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "milestone": null, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:01:12+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:12:29+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:01:12+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:12:29+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "kBmUwLrajnSpjC4uH+Qkb7LpuEulsXRYt8Rf2H4eXg4=", + "state": "progressing", + "target_user": null, + "timestamp": "1633680755274", + "title": "test issue hook", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_assign.json.golden b/scm/driver/gitee/testdata/webhooks/issue_hook_assign.json.golden new file mode 100644 index 000000000..a16772286 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_assign.json.golden @@ -0,0 +1,37 @@ +{ + "Action": "updated", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T16:12:29+08:00" + }, + "Issue": { + "Number": 735267896979, + "Title": "test issue hook", + "Body": "test issue hook\nupdate 1", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "Labels": [ + "duplicate" + ], + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T16:08:32+08:00", + "Updated": "2021-10-08T16:12:33+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_delete.json b/scm/driver/gitee/testdata/webhooks/issue_hook_delete.json new file mode 100644 index 000000000..3b09b5aeb --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_delete.json @@ -0,0 +1,235 @@ +{ + "action": "delete", + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "description": "test issue hook\nupdate 1", + "enterprise": null, + "hook_id": 788005, + "hook_name": "issue_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": "I4CYEO", + "issue": { + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "test issue hook\nupdate 1", + "collaborators": [ + ], + "comments": 0, + "created_at": "2021-10-08T16:08:32+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "id": 7322928, + "labels": [ + { + "color": "767676", + "id": 102145593, + "name": "duplicate" + } + ], + "milestone": { + "closed_issues": 0, + "created_at": "2021-09-30T11:23:19+08:00", + "description": "测试里程碑", + "due_on": "2021-10-29", + "html_url": "https://gitee.com/kit101/drone-yml-test/milestones/147062", + "id": 147062, + "number": 147062, + "open_issues": 0, + "state": "open", + "title": "beta1.0", + "updated_at": "2021-09-30T11:23:19+08:00" + }, + "number": "I4CYEO", + "state": "progressing", + "state_name": "进行中", + "title": "test issue hook", + "type_name": "任务", + "updated_at": "2021-10-08T16:27:14+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "milestone": "beta1.0", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:16:28+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:27:14+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:16:28+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:27:14+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "9J18Ih1nI+TKqddSYd1ORCjVjBUQhVGqIZdX3Jqk32Q=", + "state": "progressing", + "target_user": null, + "timestamp": "1633681683513", + "title": "test issue hook", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_delete.json.golden b/scm/driver/gitee/testdata/webhooks/issue_hook_delete.json.golden new file mode 100644 index 000000000..211795e90 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_delete.json.golden @@ -0,0 +1,37 @@ +{ + "Action": "closed", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T16:27:14+08:00" + }, + "Issue": { + "Number": 735267896979, + "Title": "test issue hook", + "Body": "test issue hook\nupdate 1", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "Labels": [ + "duplicate" + ], + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T16:08:32+08:00", + "Updated": "2021-10-08T16:27:14+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_open.json b/scm/driver/gitee/testdata/webhooks/issue_hook_open.json new file mode 100644 index 000000000..f436f4738 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_open.json @@ -0,0 +1,192 @@ +{ + "action": "open", + "assignee": null, + "description": "test issue hook", + "enterprise": null, + "hook_id": 788005, + "hook_name": "issue_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": "I4CYEO", + "issue": { + "assignee": null, + "body": "test issue hook", + "collaborators": [ + ], + "comments": 0, + "created_at": "2021-10-08T16:08:32+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "id": 7322928, + "labels": [ + ], + "milestone": null, + "number": "I4CYEO", + "state": "open", + "state_name": "待办的", + "title": "test issue hook", + "type_name": "任务", + "updated_at": "2021-10-08T16:08:32+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "milestone": null, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 3, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:01:12+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:08:32+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 3, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:01:12+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:08:32+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "8v2uENuUH9QeZVl3olFEA3aPE/5fECC6RkmmsJV62DQ=", + "state": "open", + "target_user": null, + "timestamp": "1633680515785", + "title": "test issue hook", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_open.json.golden b/scm/driver/gitee/testdata/webhooks/issue_hook_open.json.golden new file mode 100644 index 000000000..a87054c90 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_open.json.golden @@ -0,0 +1,34 @@ +{ + "Action": "opened", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T16:08:32+08:00" + }, + "Issue": { + "Number": 735267896979, + "Title": "test issue hook", + "Body": "test issue hook", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T16:08:32+08:00", + "Updated": "2021-10-08T16:08:32+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_state_change.json b/scm/driver/gitee/testdata/webhooks/issue_hook_state_change.json new file mode 100644 index 000000000..0b6c9c8a4 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_state_change.json @@ -0,0 +1,235 @@ +{ + "action": "state_change", + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "description": "test issue hook\nupdate 1", + "enterprise": null, + "hook_id": 788005, + "hook_name": "issue_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": "I4CYEO", + "issue": { + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "test issue hook\nupdate 1", + "collaborators": [ + ], + "comments": 0, + "created_at": "2021-10-08T16:08:32+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "id": 7322928, + "labels": [ + { + "color": "767676", + "id": 102145593, + "name": "duplicate" + } + ], + "milestone": { + "closed_issues": 0, + "created_at": "2021-09-30T11:23:19+08:00", + "description": "测试里程碑", + "due_on": "2021-10-29", + "html_url": "https://gitee.com/kit101/drone-yml-test/milestones/147062", + "id": 147062, + "number": 147062, + "open_issues": 0, + "state": "open", + "title": "beta1.0", + "updated_at": "2021-09-30T11:23:19+08:00" + }, + "number": "I4CYEO", + "state": "progressing", + "state_name": "进行中", + "title": "test issue hook", + "type_name": "任务", + "updated_at": "2021-10-08T16:27:14+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "milestone": "beta1.0", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:16:28+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:27:14+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:16:28+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:27:14+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "HdIghS5Ua3zzLgqI4LxxQz313V08QxrR3+0YITiGf1s=", + "state": "progressing", + "target_user": null, + "timestamp": "1633681635600", + "title": "test issue hook", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/issue_hook_state_change.json.golden b/scm/driver/gitee/testdata/webhooks/issue_hook_state_change.json.golden new file mode 100644 index 000000000..211c790b4 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/issue_hook_state_change.json.golden @@ -0,0 +1,37 @@ +{ + "Action": "opened", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T16:27:14+08:00" + }, + "Issue": { + "Number": 735267896979, + "Title": "test issue hook", + "Body": "test issue hook\nupdate 1", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CYEO", + "Labels": [ + "duplicate" + ], + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T16:08:32+08:00", + "Updated": "2021-10-08T16:27:14+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/note_hook_issue_comment.json b/scm/driver/gitee/testdata/webhooks/note_hook_issue_comment.json new file mode 100644 index 000000000..3b0f78cea --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/note_hook_issue_comment.json @@ -0,0 +1,217 @@ +{ + "action": "comment", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "comment": { + "body": "test issue comment hook\r\n\r\n", + "created_at": "2021-10-08T15:45:08+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CF12#note_6933558", + "id": 6933558, + "updated_at": "2021-10-08T15:45:08+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "enterprise": null, + "hook_id": 788005, + "hook_name": "note_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "issue": { + "assignee": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "create by api body", + "collaborators": [ + ], + "comments": 2, + "created_at": "2021-09-29T13:33:00+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/issues/I4CF12", + "id": 7297814, + "labels": [ + { + "color": "DB2828", + "id": 102145590, + "name": "bug" + } + ], + "milestone": null, + "number": "I4CF12", + "state": "open", + "state_name": "待办的", + "title": "create by api", + "type_name": "任务", + "updated_at": "2021-10-08T15:45:08+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "note": "test issue comment hook\r\n\r\n", + "noteable_id": 7297814, + "noteable_type": "Issue", + "password": "", + "per_iid": "#I4CF12", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T13:26:59+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T13:26:59+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": null, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T13:26:59+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T13:26:59+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "short_commit_id": null, + "sign": "Zzv7VMOnJ5SKrQhcEsL4XaC1zR1Kl1qMuxS0HbHwpBI=", + "timestamp": "1633679110217", + "title": "create by api", + "url": "https://gitee.com/kit101/drone-yml-test/issues/I4CF12#note_6933558" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/note_hook_issue_comment.json.golden b/scm/driver/gitee/testdata/webhooks/note_hook_issue_comment.json.golden new file mode 100644 index 000000000..53845e677 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/note_hook_issue_comment.json.golden @@ -0,0 +1,49 @@ +{ + "Action": "created", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T13:26:59+08:00" + }, + "Issue": { + "Number": 735267704950, + "Title": "create by api", + "Body": "create by api body", + "Link": "https://gitee.com/kit101/drone-yml-test/issues/I4CF12", + "Labels": [ + "bug" + ], + "Closed": false, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-29T13:33:00+08:00", + "Updated": "2021-10-08T15:45:08+08:00" + }, + "Comment": { + "ID": 6933558, + "Body": "test issue comment hook\r\n\r\n", + "Author": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + }, + "Created": "2021-10-08T15:45:08+08:00", + "Updated": "2021-10-08T15:45:08+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} diff --git a/scm/driver/gitee/testdata/webhooks/note_hook_pr_comment.json b/scm/driver/gitee/testdata/webhooks/note_hook_pr_comment.json new file mode 100644 index 000000000..7d871105b --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/note_hook_pr_comment.json @@ -0,0 +1,394 @@ +{ + "action": "comment", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "comment": { + "body": "comment", + "created_at": "2021-10-08T19:13:20+08:00", + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/7#note_6937563", + "id": 6937563, + "updated_at": "2021-10-08T19:13:20+08:00", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "enterprise": null, + "hook_id": 788005, + "hook_name": "note_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "issue": null, + "note": "comment", + "noteable_id": 4731382, + "noteable_type": "PullRequest", + "password": "", + "per_iid": "!7", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:54:02+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:54:02+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 11, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:54:02+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:54:02+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "", + "changed_files": 2, + "closed_at": null, + "comments": 11, + "commits": 2, + "created_at": "2021-09-30T18:10:27+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/7.diff", + "head": { + "label": "kit101:feat-2", + "ref": "feat-2", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:54:02+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:54:02+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/7", + "id": 4731382, + "languages": [ + "Python" + ], + "merge_commit_sha": "d10df103c351de96ceb9e62e6e4097f0e3420b72", + "merge_reference_name": "refs/pull/7/MERGE", + "merge_status": "can_be_resolve", + "mergeable": false, + "merged": false, + "merged_at": null, + "milestone": null, + "need_review": true, + "need_test": true, + "number": 7, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/7.patch", + "state": "open", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat add 3", + "updated_at": "2021-10-08T19:13:20+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:54:02+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:54:02+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "short_commit_id": null, + "sign": "wi4uRDdmlbPvs3DMQsm88rV0rzx11rLvuo0AOJOH28s=", + "timestamp": "1633691608022", + "title": "feat add 3", + "url": "https://gitee.com/kit101/drone-yml-test/pulls/7#note_6937563" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/note_hook_pr_comment.json.golden b/scm/driver/gitee/testdata/webhooks/note_hook_pr_comment.json.golden new file mode 100644 index 000000000..c91349ba4 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/note_hook_pr_comment.json.golden @@ -0,0 +1,63 @@ +{ + "Action": "created", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:54:02+08:00" + }, + "PullRequest": { + "Number": 7, + "Title": "feat add 3", + "Body": "", + "Sha": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "Ref": "refs/pull/7/head", + "Source": "feat-2", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/7", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/7.diff", + "Closed": false, + "Merged": false, + "Head": { + "Name": "feat-2", + "Path": "refs/heads/feat-2", + "Sha": "6168d9dae737b47f00c59fafca10c913a6850c3a" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-30T18:10:27+08:00", + "Updated": "2021-10-08T19:13:20+08:00" + }, + "Comment": { + "ID": 6937563, + "Body": "comment", + "Author": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + }, + "Created": "2021-10-08T19:13:20+08:00", + "Updated": "2021-10-08T19:13:20+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_close.json b/scm/driver/gitee/testdata/webhooks/pr_close.json new file mode 100644 index 000000000..d5ad5c9a0 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_close.json @@ -0,0 +1,601 @@ +{ + "action": "close", + "action_desc": "open", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "feat-3 1", + "enterprise": null, + "hook_id": 788005, + "hook_name": "merge_request_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": 8, + "languages": [ + "Python" + ], + "merge_commit_sha": "cd09abc1995aede07da6524a0ace587698d74bbc", + "merge_status": "can_be_merged", + "number": 8, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 1, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "feat-3 1", + "changed_files": 1, + "closed_at": "2021-10-08T17:28:43+08:00", + "comments": 0, + "commits": 1, + "created_at": "2021-10-08T17:16:06+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/8.diff", + "head": { + "label": "kit101:feat-3", + "ref": "feat-3", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/8", + "id": 4744094, + "labels": [ + { + "color": "D7C38B", + "id": 127956024, + "name": "test" + } + ], + "languages": [ + "Python" + ], + "merge_commit_sha": "cd09abc1995aede07da6524a0ace587698d74bbc", + "merge_reference_name": "refs/pull/8/MERGE", + "merge_status": "can_be_merged", + "mergeable": true, + "merged": false, + "merged_at": null, + "milestone": null, + "need_review": false, + "need_test": false, + "number": 8, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/8.patch", + "state": "closed", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat-3 1", + "updated_at": "2021-10-08T17:28:43+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "yuLVNqOZKWnXuYcQ8KbOm1UYgvd9KeiCHX5QsEyrrz8=", + "source_branch": "feat-3", + "source_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "state": "closed", + "target_branch": "master", + "target_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:28:43+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "target_user": null, + "timestamp": "1633685324936", + "title": "feat-3 1", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/pulls/8" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_close.json.golden b/scm/driver/gitee/testdata/webhooks/pr_close.json.golden new file mode 100644 index 000000000..2c71509f2 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_close.json.golden @@ -0,0 +1,57 @@ +{ + "Action": "closed", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:28:43+08:00" + }, + "PullRequest": { + "Number": 8, + "Title": "feat-3 1", + "Body": "feat-3 1", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "Ref": "refs/pull/8/head", + "Source": "feat-3", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/8", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/8.diff", + "Closed": true, + "Merged": false, + "Head": { + "Name": "feat-3", + "Path": "refs/heads/feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T17:16:06+08:00", + "Updated": "2021-10-08T17:28:43+08:00", + "Labels": [ + { + "Name": "test", + "Color": "D7C38B" + } + ] + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_labeled.json b/scm/driver/gitee/testdata/webhooks/pr_labeled.json new file mode 100644 index 000000000..bc682cc3f --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_labeled.json @@ -0,0 +1,601 @@ +{ + "action": "update", + "action_desc": "update_label", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "feat-3 1", + "enterprise": null, + "hook_id": 788005, + "hook_name": "merge_request_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": 8, + "languages": [ + "Python" + ], + "merge_commit_sha": "cd09abc1995aede07da6524a0ace587698d74bbc", + "merge_status": "can_be_merged", + "number": 8, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 1, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "feat-3 1", + "changed_files": 1, + "closed_at": null, + "comments": 0, + "commits": 1, + "created_at": "2021-10-08T17:16:06+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/8.diff", + "head": { + "label": "kit101:feat-3", + "ref": "feat-3", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/8", + "id": 4744094, + "labels": [ + { + "color": "00B5AD", + "id": 102145595, + "name": "question" + } + ], + "languages": [ + "Python" + ], + "merge_commit_sha": "cd09abc1995aede07da6524a0ace587698d74bbc", + "merge_reference_name": "refs/pull/8/MERGE", + "merge_status": "can_be_merged", + "mergeable": true, + "merged": false, + "merged_at": null, + "milestone": null, + "need_review": true, + "need_test": true, + "number": 8, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/8.patch", + "state": "open", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat-3 1", + "updated_at": "2021-10-08T17:19:39+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "Fid06lsV72m4QMmmwMAPqTwYLLwFYNgjz32pUeAIaTE=", + "source_branch": "feat-3", + "source_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "state": "open", + "target_branch": "master", + "target_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "target_user": null, + "timestamp": "1633684782533", + "title": "feat-3 1", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/pulls/8" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_labeled.json.golden b/scm/driver/gitee/testdata/webhooks/pr_labeled.json.golden new file mode 100644 index 000000000..1aaa28281 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_labeled.json.golden @@ -0,0 +1,57 @@ +{ + "Action": "labeled", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:16:06+08:00" + }, + "PullRequest": { + "Number": 8, + "Title": "feat-3 1", + "Body": "feat-3 1", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "Ref": "refs/pull/8/head", + "Source": "feat-3", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/8", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/8.diff", + "Closed": false, + "Merged": false, + "Head": { + "Name": "feat-3", + "Path": "refs/heads/feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T17:16:06+08:00", + "Updated": "2021-10-08T17:19:39+08:00", + "Labels": [ + { + "Name": "question", + "Color": "00B5AD" + } + ] + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_merge.json b/scm/driver/gitee/testdata/webhooks/pr_merge.json new file mode 100644 index 000000000..9b94fc405 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_merge.json @@ -0,0 +1,596 @@ +{ + "action": "merge", + "action_desc": "open", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "feat-3", + "enterprise": null, + "hook_id": 788005, + "hook_name": "merge_request_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": 9, + "languages": [ + "Python" + ], + "merge_commit_sha": "6c363013dfccedad4c68c88e8649f4ffacc644ea", + "merge_status": "can_be_merged", + "number": 9, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 1, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "feat-3", + "changed_files": 1, + "closed_at": "2021-10-08T17:32:30+08:00", + "comments": 0, + "commits": 1, + "created_at": "2021-10-08T17:29:49+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/9.diff", + "head": { + "label": "kit101:feat-3", + "ref": "feat-3", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/9", + "id": 4744278, + "labels": [ + ], + "languages": [ + "Python" + ], + "merge_commit_sha": "6c363013dfccedad4c68c88e8649f4ffacc644ea", + "merge_reference_name": "refs/pull/9/MERGE", + "merge_status": "can_be_merged", + "mergeable": true, + "merged": true, + "merged_at": "2021-10-08T17:32:30+08:00", + "milestone": null, + "need_review": false, + "need_test": false, + "number": 9, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/9.patch", + "state": "merged", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat-3", + "updated_at": "2021-10-08T17:32:29+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "SPeRZ3+TLzetOj+eEdAuMt8zVVbs6o+k5xrCPf5WGDI=", + "source_branch": "feat-3", + "source_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "state": "merged", + "target_branch": "master", + "target_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "target_user": null, + "timestamp": "1633685551222", + "title": "feat-3", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/pulls/9" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_merge.json.golden b/scm/driver/gitee/testdata/webhooks/pr_merge.json.golden new file mode 100644 index 000000000..54e89f254 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_merge.json.golden @@ -0,0 +1,51 @@ +{ + "Action": "merged", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:32:30+08:00" + }, + "PullRequest": { + "Number": 9, + "Title": "feat-3", + "Body": "feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "Ref": "refs/pull/9/head", + "Source": "feat-3", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/9", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/9.diff", + "Closed": true, + "Merged": true, + "Head": { + "Name": "feat-3", + "Path": "refs/heads/feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T17:29:49+08:00", + "Updated": "2021-10-08T17:32:29+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_open.json b/scm/driver/gitee/testdata/webhooks/pr_open.json new file mode 100644 index 000000000..62b9bd0cb --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_open.json @@ -0,0 +1,596 @@ +{ + "action": "open", + "action_desc": "open", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "feat-3", + "enterprise": null, + "hook_id": 788005, + "hook_name": "merge_request_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": 9, + "languages": [ + "Python" + ], + "merge_commit_sha": "3fbdff5796f6d57ed9f5a5dd48e5d0cad7f9c0a1", + "merge_status": "can_be_merged", + "number": 9, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 1, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "feat-3", + "changed_files": 1, + "closed_at": null, + "comments": 0, + "commits": 1, + "created_at": "2021-10-08T17:29:49+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/9.diff", + "head": { + "label": "kit101:feat-3", + "ref": "feat-3", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/9", + "id": 4744278, + "labels": [ + ], + "languages": [ + "Python" + ], + "merge_commit_sha": "3fbdff5796f6d57ed9f5a5dd48e5d0cad7f9c0a1", + "merge_reference_name": "refs/pull/9/MERGE", + "merge_status": "can_be_merged", + "mergeable": true, + "merged": false, + "merged_at": null, + "milestone": null, + "need_review": true, + "need_test": true, + "number": 9, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/9.patch", + "state": "open", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat-3", + "updated_at": "2021-10-08T17:29:50+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "o5L+cMcrXR+F8rVIRW+v2J/jTd9N8ZmyM3cXBte12Nc=", + "source_branch": "feat-3", + "source_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "state": "open", + "target_branch": "master", + "target_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:29:49+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "target_user": null, + "timestamp": "1633685391315", + "title": "feat-3", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/pulls/9" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_open.json.golden b/scm/driver/gitee/testdata/webhooks/pr_open.json.golden new file mode 100644 index 000000000..6372fcc91 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_open.json.golden @@ -0,0 +1,51 @@ +{ + "Action": "opened", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:29:49+08:00" + }, + "PullRequest": { + "Number": 9, + "Title": "feat-3", + "Body": "feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "Ref": "refs/pull/9/head", + "Source": "feat-3", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/9", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/9.diff", + "Closed": false, + "Merged": false, + "Head": { + "Name": "feat-3", + "Path": "refs/heads/feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T17:29:49+08:00", + "Updated": "2021-10-08T17:29:50+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_unlabeled.json b/scm/driver/gitee/testdata/webhooks/pr_unlabeled.json new file mode 100644 index 000000000..2e317e8bb --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_unlabeled.json @@ -0,0 +1,596 @@ +{ + "action": "update", + "action_desc": "update_label", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "feat-3 1", + "enterprise": null, + "hook_id": 788005, + "hook_name": "merge_request_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": 8, + "languages": [ + "Python" + ], + "merge_commit_sha": "cd09abc1995aede07da6524a0ace587698d74bbc", + "merge_status": "can_be_merged", + "number": 8, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 1, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "feat-3 1", + "changed_files": 1, + "closed_at": null, + "comments": 0, + "commits": 1, + "created_at": "2021-10-08T17:16:06+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/8.diff", + "head": { + "label": "kit101:feat-3", + "ref": "feat-3", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/8", + "id": 4744094, + "labels": [ + ], + "languages": [ + "Python" + ], + "merge_commit_sha": "cd09abc1995aede07da6524a0ace587698d74bbc", + "merge_reference_name": "refs/pull/8/MERGE", + "merge_status": "can_be_merged", + "mergeable": true, + "merged": false, + "merged_at": null, + "milestone": null, + "need_review": true, + "need_test": true, + "number": 8, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/8.patch", + "state": "open", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat-3 1", + "updated_at": "2021-10-08T17:23:09+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "X52dWAExMGFaN1+5a/RAuVtPmP5R0GL3AE4Br/MngRg=", + "source_branch": "feat-3", + "source_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "state": "open", + "target_branch": "master", + "target_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:15:39+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:16:06+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "target_user": null, + "timestamp": "1633684991291", + "title": "feat-3 1", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/pulls/8" +} diff --git a/scm/driver/gitee/testdata/webhooks/pr_unlabeled.json.golden b/scm/driver/gitee/testdata/webhooks/pr_unlabeled.json.golden new file mode 100644 index 000000000..4b66f143c --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_unlabeled.json.golden @@ -0,0 +1,51 @@ +{ + "Action": "unlabeled", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:16:06+08:00" + }, + "PullRequest": { + "Number": 8, + "Title": "feat-3 1", + "Body": "feat-3 1", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "Ref": "refs/pull/8/head", + "Source": "feat-3", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/8", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/8.diff", + "Closed": false, + "Merged": false, + "Head": { + "Name": "feat-3", + "Path": "refs/heads/feat-3", + "Sha": "dc8fa2ebe050d63f639c5b834311e96bc2303523" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-10-08T17:16:06+08:00", + "Updated": "2021-10-08T17:23:09+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_update.json b/scm/driver/gitee/testdata/webhooks/pr_update.json new file mode 100644 index 000000000..8ca8146eb --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_update.json @@ -0,0 +1,596 @@ +{ + "action": "update", + "action_desc": "source_branch_changed", + "author": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "body": "", + "enterprise": null, + "hook_id": 788005, + "hook_name": "merge_request_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "iid": 7, + "languages": [ + "Python" + ], + "merge_commit_sha": "d10df103c351de96ceb9e62e6e4097f0e3420b72", + "merge_status": "can_be_resolve", + "number": 7, + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "pull_request": { + "additions": 11, + "assignee": null, + "assignees": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "base": { + "label": "kit101:master", + "ref": "master", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "2eac1cac02c325058cf959725c45b0612d3e8177", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "body": "", + "changed_files": 2, + "closed_at": null, + "comments": 8, + "commits": 2, + "created_at": "2021-09-30T18:10:27+08:00", + "deletions": 0, + "diff_url": "https://gitee.com/kit101/drone-yml-test/pulls/7.diff", + "head": { + "label": "kit101:feat-2", + "ref": "feat-2", + "repo": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sha": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "html_url": "https://gitee.com/kit101/drone-yml-test/pulls/7", + "id": 4731382, + "labels": [ + ], + "languages": [ + "Python" + ], + "merge_commit_sha": "d10df103c351de96ceb9e62e6e4097f0e3420b72", + "merge_reference_name": "refs/pull/7/MERGE", + "merge_status": "can_be_resolve", + "mergeable": false, + "merged": false, + "merged_at": null, + "milestone": null, + "need_review": true, + "need_test": true, + "number": 7, + "patch_url": "https://gitee.com/kit101/drone-yml-test/pulls/7.patch", + "state": "open", + "tester": null, + "testers": [ + { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + ], + "title": "feat add 3", + "updated_at": "2021-10-08T17:36:07+08:00", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + } + }, + "push_data": null, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "/gLVmA+/dd5q+siOduWu3z6UGhBJ8I5Fe/Gl8zxLU7A=", + "source_branch": "feat-2", + "source_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "state": "open", + "target_branch": "master", + "target_repo": { + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:38:53+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:38:53+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + } + }, + "target_user": null, + "timestamp": "1633685873030", + "title": "feat add 3", + "updated_by": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "url": "https://gitee.com/kit101/drone-yml-test/pulls/7" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/pr_update.json.golden b/scm/driver/gitee/testdata/webhooks/pr_update.json.golden new file mode 100644 index 000000000..2aaeffcd9 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/pr_update.json.golden @@ -0,0 +1,51 @@ +{ + "Action": "updated", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:38:53+08:00" + }, + "PullRequest": { + "Number": 7, + "Title": "feat add 3", + "Body": "", + "Sha": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "Ref": "refs/pull/7/head", + "Source": "feat-2", + "Target": "master", + "Fork": "kit101/drone-yml-test", + "Link": "https://gitee.com/kit101/drone-yml-test/pulls/7", + "Diff": "https://gitee.com/kit101/drone-yml-test/pulls/7.diff", + "Closed": false, + "Merged": false, + "Head": { + "Name": "feat-2", + "Path": "refs/heads/feat-2", + "Sha": "6168d9dae737b47f00c59fafca10c913a6850c3a" + }, + "Base": { + "Name": "master", + "Path": "refs/heads/master", + "Sha": "2eac1cac02c325058cf959725c45b0612d3e8177" + }, + "Author": { + "Login": "kit101", + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png" + }, + "Created": "2021-09-30T18:10:27+08:00", + "Updated": "2021-10-08T17:36:07+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/push.json b/scm/driver/gitee/testdata/webhooks/push.json new file mode 100644 index 000000000..24cde84b3 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/push.json @@ -0,0 +1,230 @@ +{ + "after": "9921e45e570db8e57e544650baf837932fb2100f", + "before": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "commits": [ + { + "added": [ + ], + "author": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": "2021-10-08T17:53:12+08:00", + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "committer": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": null, + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "distinct": true, + "id": "9921e45e570db8e57e544650baf837932fb2100f", + "message": "feat-2-1\n", + "modified": [ + "modify.txt" + ], + "parent_ids": [ + "6168d9dae737b47f00c59fafca10c913a6850c3a" + ], + "removed": [ + ], + "timestamp": "2021-10-08T17:53:12+08:00", + "tree_id": "fdbf4a1239cdef7f81b6a0e76451735a8a27d2c8", + "url": "https://gitee.com/kit101/drone-yml-test/commit/9921e45e570db8e57e544650baf837932fb2100f" + } + ], + "commits_more_than_ten": false, + "compare": "https://gitee.com/kit101/drone-yml-test/compare/6168d9dae737b47f00c59fafca10c913a6850c3a...9921e45e570db8e57e544650baf837932fb2100f", + "created": false, + "deleted": false, + "enterprise": null, + "head_commit": { + "added": [ + ], + "author": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": "2021-10-08T17:53:12+08:00", + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "committer": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": null, + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "distinct": true, + "id": "9921e45e570db8e57e544650baf837932fb2100f", + "message": "feat-2-1\n", + "modified": [ + "modify.txt" + ], + "parent_ids": [ + "6168d9dae737b47f00c59fafca10c913a6850c3a" + ], + "removed": [ + ], + "timestamp": "2021-10-08T17:53:12+08:00", + "tree_id": "fdbf4a1239cdef7f81b6a0e76451735a8a27d2c8", + "url": "https://gitee.com/kit101/drone-yml-test/commit/9921e45e570db8e57e544650baf837932fb2100f" + }, + "hook_id": 788005, + "hook_name": "push_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:53:18+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:53:18+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "pusher": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "ref": "refs/heads/feat-2-1", + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:53:18+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:53:18+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "OyjGt7PDU9xXl5khawx5APOUmODD+SaulKYnS/Nifew=", + "timestamp": "1633686799688", + "total_commits_count": 1, + "user": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user_id": 1535738, + "user_name": "kit101" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/push.json.golden b/scm/driver/gitee/testdata/webhooks/push.json.golden new file mode 100644 index 000000000..ce613f8d6 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/push.json.golden @@ -0,0 +1,60 @@ +{ + "Ref": "refs/heads/feat-2-1", + "Before": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "After": "9921e45e570db8e57e544650baf837932fb2100f", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Perm": null, + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:53:18+08:00" + }, + "Commit": { + "Sha": "9921e45e570db8e57e544650baf837932fb2100f", + "Message": "feat-2-1\n", + "Author": { + "Login": "kit101", + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-10-08T17:53:12+08:00" + }, + "Committer": { + "Login": "kit101", + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-10-08T17:53:12+08:00" + }, + "Link": "https://gitee.com/kit101/drone-yml-test/compare/6168d9dae737b47f00c59fafca10c913a6850c3a...9921e45e570db8e57e544650baf837932fb2100f" + }, + "Commits": [ + { + "Sha": "9921e45e570db8e57e544650baf837932fb2100f", + "Message": "feat-2-1\n", + "Link": "https://gitee.com/kit101/drone-yml-test/commit/9921e45e570db8e57e544650baf837932fb2100f", + "Author": { + "Login": "kit101", + "Email": "qkssk1711@163.com", + "Name": "kit101", + "Date": "2021-10-08T17:53:12+08:00" + }, + "Committer": { + "Login": "kit101", + "Email": "qkssk1711@163.com", + "Name": "kit101", + "Date": "2021-10-08T17:53:12+08:00" + } + } + ], + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/push_branch_create.json b/scm/driver/gitee/testdata/webhooks/push_branch_create.json new file mode 100644 index 000000000..f6d56f311 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/push_branch_create.json @@ -0,0 +1,189 @@ +{ + "after": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "before": "0000000000000000000000000000000000000000", + "commits": null, + "commits_more_than_ten": true, + "compare": "https://gitee.com/kit101/drone-yml-test/compare/0000000000000000000000000000000000000000...6168d9dae737b47f00c59fafca10c913a6850c3a", + "created": true, + "deleted": false, + "enterprise": null, + "head_commit": { + "added": [ + ], + "author": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": "2021-10-08T17:37:47+08:00", + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "committer": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": null, + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "distinct": true, + "id": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "message": "feat-2\n", + "modified": [ + "modify.txt" + ], + "parent_ids": [ + "00b76e8abd51ae6a96318b3450944b32995f9158" + ], + "removed": [ + ], + "timestamp": "2021-10-08T17:37:47+08:00", + "tree_id": "59792feaa92f1bc2460eb1fbc0122dd5029ac583", + "url": "https://gitee.com/kit101/drone-yml-test/commit/6168d9dae737b47f00c59fafca10c913a6850c3a" + }, + "hook_id": 788005, + "hook_name": "push_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:39:43+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:39:44+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "pusher": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "ref": "refs/heads/feat-2-1", + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:39:43+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:39:44+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "5QkJzTgTd5PJ555MAindBUxryzHWESPOMeOz+dIzTFc=", + "timestamp": "1633686089510", + "total_commits_count": 13, + "user": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user_id": 1535738, + "user_name": "kit101" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/push_branch_create.json.golden b/scm/driver/gitee/testdata/webhooks/push_branch_create.json.golden new file mode 100644 index 000000000..3a185c633 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/push_branch_create.json.golden @@ -0,0 +1,41 @@ +{ + "Ref": "refs/heads/feat-2-1", + "Before": "0000000000000000000000000000000000000000", + "After": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Perm": null, + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:39:44+08:00" + }, + "Commit": { + "Sha": "6168d9dae737b47f00c59fafca10c913a6850c3a", + "Message": "feat-2\n", + "Author": { + "Login": "kit101", + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-10-08T17:37:47+08:00" + }, + "Committer": { + "Login": "kit101", + "Name": "kit101", + "Email": "qkssk1711@163.com", + "Date": "2021-10-08T17:37:47+08:00" + }, + "Link": "https://gitee.com/kit101/drone-yml-test/compare/0000000000000000000000000000000000000000...6168d9dae737b47f00c59fafca10c913a6850c3a" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/push_branch_delete.json b/scm/driver/gitee/testdata/webhooks/push_branch_delete.json new file mode 100644 index 000000000..ed3d5c1f9 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/push_branch_delete.json @@ -0,0 +1,151 @@ +{ + "after": "0000000000000000000000000000000000000000", + "before": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "commits": [ + ], + "commits_more_than_ten": null, + "compare": "https://gitee.com/kit101/drone-yml-test/compare/dc8fa2ebe050d63f639c5b834311e96bc2303523...0000000000000000000000000000000000000000", + "created": false, + "deleted": true, + "enterprise": null, + "head_commit": null, + "hook_id": 788005, + "hook_name": "push_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "pusher": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "ref": "refs/heads/feat-3", + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T17:32:30+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T17:32:30+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "l9f7bD44j3IX+WILn5LlyNy8E37v4xP1xB6eaiMGa5A=", + "timestamp": "1633685551787", + "total_commits_count": null, + "user": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user_id": 1535738, + "user_name": "kit101" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/push_branch_delete.json.golden b/scm/driver/gitee/testdata/webhooks/push_branch_delete.json.golden new file mode 100644 index 000000000..1ddc616d3 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/push_branch_delete.json.golden @@ -0,0 +1,28 @@ +{ + "Ref": "refs/heads/feat-3", + "Before": "dc8fa2ebe050d63f639c5b834311e96bc2303523", + "After": "0000000000000000000000000000000000000000", + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Perm": null, + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T17:32:30+08:00" + }, + "Commit": { + "Sha": "0000000000000000000000000000000000000000", + "Link": "https://gitee.com/kit101/drone-yml-test/compare/dc8fa2ebe050d63f639c5b834311e96bc2303523...0000000000000000000000000000000000000000" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/tag_create.json b/scm/driver/gitee/testdata/webhooks/tag_create.json new file mode 100644 index 000000000..6a3e31511 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/tag_create.json @@ -0,0 +1,189 @@ +{ + "after": "aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5", + "before": "0000000000000000000000000000000000000000", + "commits": null, + "commits_more_than_ten": null, + "compare": "https://gitee.com/kit101/drone-yml-test/compare/0000000000000000000000000000000000000000...aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5", + "created": true, + "deleted": false, + "enterprise": null, + "head_commit": { + "added": [ + ], + "author": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "remark": null, + "time": "2021-10-08T05:26:59+00:00", + "url": "https://gitee.com/kit101", + "user": null, + "user_name": "kit101", + "username": "kit101" + }, + "committer": { + "email": "noreply@gitee.com", + "id": null, + "name": "Gitee", + "remark": null, + "time": null, + "url": null, + "user": null, + "user_name": null, + "username": null + }, + "distinct": true, + "id": "aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5", + "message": "update .drone.yml.\n", + "modified": [ + ".drone.yml" + ], + "parent_ids": [ + "c2b3132aaed2dac67923a0bf7c30d8391f99d4a9" + ], + "removed": [ + ], + "timestamp": "2021-10-08T05:26:59+00:00", + "tree_id": "ce6ea40403ba16fa848a190acc5356bdb4ef2025", + "url": "https://gitee.com/kit101/drone-yml-test/commit/aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5" + }, + "hook_id": 788005, + "hook_name": "tag_push_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:01:12+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:01:12+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "pusher": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "ref": "refs/tags/1.3", + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:01:12+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:01:12+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "EDYOaI5dlyJgaiRE3jAe/fwaqZPNt1kLsRW1HY0p4tA=", + "timestamp": "1633680073933", + "total_commits_count": null, + "user": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user_id": 1535738, + "user_name": "kit101" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/tag_create.json.golden b/scm/driver/gitee/testdata/webhooks/tag_create.json.golden new file mode 100644 index 000000000..acb55e6b8 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/tag_create.json.golden @@ -0,0 +1,25 @@ +{ + "Action": "created", + "Ref": { + "Name": "1.3", + "Sha": "aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5" + }, + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T16:01:12+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/tag_delete.json b/scm/driver/gitee/testdata/webhooks/tag_delete.json new file mode 100644 index 000000000..d3eb43ca8 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/tag_delete.json @@ -0,0 +1,151 @@ +{ + "after": "0000000000000000000000000000000000000000", + "before": "aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5", + "commits": [ + ], + "commits_more_than_ten": null, + "compare": "https://gitee.com/kit101/drone-yml-test/compare/aa9d11518a64dcd0d591a2a4eb35dfb4d91d49d5...0000000000000000000000000000000000000000", + "created": false, + "deleted": true, + "enterprise": null, + "head_commit": null, + "hook_id": 788005, + "hook_name": "tag_push_hooks", + "hook_url": "https://gitee.com/kit101/drone-yml-test/hooks/788005/edit", + "password": "", + "project": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:16:28+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:16:28+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "push_data": null, + "pusher": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "ref": "refs/tags/1.3", + "repository": { + "clone_url": "https://gitee.com/kit101/drone-yml-test.git", + "created_at": "2021-03-24T11:24:34+08:00", + "default_branch": "master", + "description": "", + "fork": false, + "forks_count": 0, + "full_name": "kit101/drone-yml-test", + "git_http_url": "https://gitee.com/kit101/drone-yml-test.git", + "git_ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "git_svn_url": "svn://gitee.com/kit101/drone-yml-test", + "git_url": "git://gitee.com/kit101/drone-yml-test.git", + "has_issues": true, + "has_pages": false, + "has_wiki": true, + "homepage": "https://gitee.com/kit101/drone-yml-test", + "html_url": "https://gitee.com/kit101/drone-yml-test", + "id": 14836026, + "language": null, + "license": null, + "name": "drone-yml-test", + "name_with_namespace": "kit101/drone-yml-test", + "namespace": "kit101", + "open_issues_count": 2, + "owner": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "path": "drone-yml-test", + "path_with_namespace": "kit101/drone-yml-test", + "private": false, + "pushed_at": "2021-10-08T16:16:28+08:00", + "ssh_url": "git@gitee.com:kit101/drone-yml-test.git", + "stargazers_count": 0, + "svn_url": "svn://gitee.com/kit101/drone-yml-test", + "updated_at": "2021-10-08T16:16:28+08:00", + "url": "https://gitee.com/kit101/drone-yml-test", + "watchers_count": 1 + }, + "sender": { + "avatar_url": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "email": "qkssk1711@163.com", + "html_url": "https://gitee.com/kit101", + "id": 1535738, + "login": "kit101", + "name": "kit101", + "remark": null, + "site_admin": false, + "type": "User", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "sign": "p2XLcddyIKP/Yf7VatUqTj+N1tuHchQ1c7//Lk4KSE8=", + "timestamp": "1633680992245", + "total_commits_count": null, + "user": { + "email": "qkssk1711@163.com", + "id": 1535738, + "name": "kit101", + "url": "https://gitee.com/kit101", + "user_name": "kit101", + "username": "kit101" + }, + "user_id": 1535738, + "user_name": "kit101" +} \ No newline at end of file diff --git a/scm/driver/gitee/testdata/webhooks/tag_delete.json.golden b/scm/driver/gitee/testdata/webhooks/tag_delete.json.golden new file mode 100644 index 000000000..7152c2287 --- /dev/null +++ b/scm/driver/gitee/testdata/webhooks/tag_delete.json.golden @@ -0,0 +1,25 @@ +{ + "Action": "deleted", + "Ref": { + "Name": "1.3", + "Sha": "" + }, + "Repo": { + "ID": "14836026", + "Namespace": "kit101", + "Name": "drone-yml-test", + "Branch": "master", + "Private": false, + "Clone": "https://gitee.com/kit101/drone-yml-test.git", + "CloneSSH": "git@gitee.com:kit101/drone-yml-test.git", + "Link": "https://gitee.com/kit101/drone-yml-test", + "Created": "2021-03-24T11:24:34+08:00", + "Updated": "2021-10-08T16:16:28+08:00" + }, + "Sender": { + "Avatar": "https://portrait.gitee.com/uploads/avatars/user/511/1535738_qkssk1711_1578953939.png", + "Email": "qkssk1711@163.com", + "Login": "kit101", + "Name": "kit101" + } +} \ No newline at end of file diff --git a/scm/driver/gitee/user.go b/scm/driver/gitee/user.go new file mode 100644 index 000000000..d893908de --- /dev/null +++ b/scm/driver/gitee/user.go @@ -0,0 +1,81 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "fmt" + "time" + + "github.com/drone/go-scm/scm" +) + +type userService struct { + client *wrapper +} + +func (s *userService) Find(ctx context.Context) (*scm.User, *scm.Response, error) { + out := new(user) + res, err := s.client.do(ctx, "GET", "user", nil, out) + return convertUser(out), res, err +} + +func (s *userService) FindEmail(ctx context.Context) (string, *scm.Response, error) { + user, res, err := s.Find(ctx) + if err != nil { + return "", nil, err + } + return user.Email, res, err +} + +func (s *userService) FindLogin(ctx context.Context, login string) (*scm.User, *scm.Response, error) { + path := fmt.Sprintf("users/%s", login) + out := new(user) + res, err := s.client.do(ctx, "GET", path, nil, out) + return convertUser(out), res, err +} + +type user struct { + ID int `json:"id"` + Login string `json:"login"` + Name string `json:"name"` + AvatarURL string `json:"avatar_url"` + URL string `json:"url"` + HtmlURL string `json:"html_url"` + FollowersURL string `json:"followers_url"` + FollowingURL string `json:"following_url"` + GistsURL string `json:"gists_url"` + StarredURL string `json:"starred_url"` + SubscriptionsURL string `json:"subscriptions_url"` + OrganizationsURL string `json:"organizations_url"` + ReposURL string `json:"repos_url"` + EventsURL string `json:"events_url"` + ReceivedEventsURL string `json:"received_events_url"` + Type string `json:"type"` + Blog string `json:"blog"` + Weibo string `json:"weibo"` + Bio string `json:"bio"` + PublicRepos int `json:"public_repos"` + PublicGists int `json:"public_gists"` + Followers int `json:"followers"` + Following int `json:"following"` + Stared int `json:"stared"` + Watched int `json:"watched"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + Email string `json:"email"` + Remark string `json:"remark"` +} + +func convertUser(from *user) *scm.User { + return &scm.User{ + Avatar: from.AvatarURL, + Email: from.Email, + Login: from.Login, + Name: from.Name, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + } +} diff --git a/scm/driver/gitee/user_test.go b/scm/driver/gitee/user_test.go new file mode 100644 index 000000000..dc299ddb3 --- /dev/null +++ b/scm/driver/gitee/user_test.go @@ -0,0 +1,106 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "context" + "encoding/json" + "io/ioutil" + "os" + "testing" + + "github.com/drone/go-scm/scm" + + "github.com/google/go-cmp/cmp" + "github.com/h2non/gock" +) + +func TestUserFind(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/user"). + Reply(200). + Type("application/json"). + SetHeader("X-Request-Id", "7cb049dbf1fafae67b4f0aa81ca7e870"). + SetHeader("X-Runtime", "0.040217"). + SetHeader("ETag", "W/\"c50ecf93b72a24474a76423d6d5c338c\""). + File("testdata/user.json") + + client := NewDefault() + got, res, err := client.Users.Find(context.Background()) + if err != nil { + t.Error(err) + return + } + + want := new(scm.User) + raw, _ := ioutil.ReadFile("testdata/user.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + } + + t.Run("Request", testRequest(res)) + // t.Run("Rate", testRate(res)) +} + +func TestUserFindEmail(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/user"). + Reply(200). + Type("application/json"). + SetHeader("X-Request-Id", "7cb049dbf1fafae67b4f0aa81ca7e870"). + SetHeader("X-Runtime", "0.040217"). + SetHeader("ETag", "W/\"c50ecf93b72a24474a76423d6d5c338c\""). + File("testdata/user.json") + + client := NewDefault() + result, res, err := client.Users.FindEmail(context.Background()) + if err != nil { + t.Error(err) + return + } + if got, want := result, "qkssk1711@163.com"; got != want { + t.Errorf("Want user Email %q, got %q", want, got) + } + t.Run("Request", testRequest(res)) + // t.Run("Rate", testRate(res)) +} + +func TestUserFindLogin(t *testing.T) { + defer gock.Off() + + gock.New("https://gitee.com/api/v5"). + Get("/users/kit101"). + Reply(200). + Type("application/json"). + SetHeader("X-Request-Id", "7cb049dbf1fafae67b4f0aa81ca7e870"). + SetHeader("X-Runtime", "0.040217"). + File("testdata/user.json") + + client := NewDefault() + got, res, err := client.Users.FindLogin(context.Background(), "kit101") + if err != nil { + t.Error(err) + } + + want := new(scm.User) + raw, _ := ioutil.ReadFile("testdata/user.json.golden") + json.Unmarshal(raw, &want) + + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("Unexpected Results") + t.Log(diff) + json.NewEncoder(os.Stdout).Encode(got) + } + + t.Run("Request", testRequest(res)) + // t.Run("Rate", testRate(res)) +} diff --git a/scm/driver/gitee/util.go b/scm/driver/gitee/util.go new file mode 100644 index 000000000..a5e1f973e --- /dev/null +++ b/scm/driver/gitee/util.go @@ -0,0 +1,75 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "net/url" + "strconv" + + "github.com/drone/go-scm/scm" +) + +func encodeListOptions(opts scm.ListOptions) string { + params := url.Values{} + if opts.Page != 0 { + params.Set("page", strconv.Itoa(opts.Page)) + } + if opts.Size != 0 { + params.Set("per_page", strconv.Itoa(opts.Size)) + } + return params.Encode() +} + +func encodeCommitListOptions(opts scm.CommitListOptions) string { + params := url.Values{} + if opts.Page != 0 { + params.Set("page", strconv.Itoa(opts.Page)) + } + if opts.Size != 0 { + params.Set("per_page", strconv.Itoa(opts.Size)) + } + if opts.Ref != "" { + params.Set("sha", opts.Ref) + } + return params.Encode() +} + +func encodeIssueListOptions(opts scm.IssueListOptions) string { + params := url.Values{} + if opts.Page != 0 { + params.Set("page", strconv.Itoa(opts.Page)) + } + if opts.Size != 0 { + params.Set("per_page", strconv.Itoa(opts.Size)) + } + // state: open, progressing, closed, rejected, all; default: open + if opts.Open && opts.Closed { + params.Set("state", "all") + } else if opts.Closed { + params.Set("state", "closed") + } else if opts.Open { + params.Set("state", "open") + } + return params.Encode() +} + +func encodePullRequestListOptions(opts scm.PullRequestListOptions) string { + params := url.Values{} + if opts.Page != 0 { + params.Set("page", strconv.Itoa(opts.Page)) + } + if opts.Size != 0 { + params.Set("per_page", strconv.Itoa(opts.Size)) + } + // state: open, closed, merged, all; default: open + if opts.Open && opts.Closed { + params.Set("state", "all") + } else if opts.Closed { + params.Set("state", "closed") + } else if opts.Open { + params.Set("state", "open") + } + return params.Encode() +} diff --git a/scm/driver/gitee/util_test.go b/scm/driver/gitee/util_test.go new file mode 100644 index 000000000..2846a9bf2 --- /dev/null +++ b/scm/driver/gitee/util_test.go @@ -0,0 +1,94 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "testing" + + "github.com/drone/go-scm/scm" +) + +func Test_encodeListOptions(t *testing.T) { + opts := scm.ListOptions{ + Page: 10, + Size: 30, + } + want := "page=10&per_page=30" + got := encodeListOptions(opts) + if got != want { + t.Errorf("Want encoded list options %q, got %q", want, got) + } +} + +func Test_encodeCommitListOptions(t *testing.T) { + opts := scm.CommitListOptions{ + Page: 10, + Size: 30, + Ref: "master", + } + want := "page=10&per_page=30&sha=master" + got := encodeCommitListOptions(opts) + if got != want { + t.Errorf("Want encoded commit list options %q, got %q", want, got) + } +} + +func Test_encodeIssueListOptions(t *testing.T) { + opts := scm.IssueListOptions{ + Page: 10, + Size: 30, + Open: true, + Closed: true, + } + want := "page=10&per_page=30&state=all" + got := encodeIssueListOptions(opts) + if got != want { + t.Errorf("Want encoded issue list options %q, got %q", want, got) + } +} + +func Test_encodeIssueListOptions_Closed(t *testing.T) { + opts := scm.IssueListOptions{ + Page: 10, + Size: 30, + Open: false, + Closed: true, + } + want := "page=10&per_page=30&state=closed" + got := encodeIssueListOptions(opts) + if got != want { + t.Errorf("Want encoded issue list options %q, got %q", want, got) + } +} + +func Test_encodePullRequestListOptions(t *testing.T) { + t.Parallel() + opts := scm.PullRequestListOptions{ + Page: 10, + Size: 30, + Open: true, + Closed: true, + } + want := "page=10&per_page=30&state=all" + got := encodePullRequestListOptions(opts) + if got != want { + t.Errorf("Want encoded pr list options %q, got %q", want, got) + } +} + +func Test_encodePullRequestListOptions_Closed(t *testing.T) { + t.Parallel() + opts := scm.PullRequestListOptions{ + Page: 10, + Size: 30, + Open: false, + Closed: true, + } + want := "page=10&per_page=30&state=closed" + got := encodePullRequestListOptions(opts) + if got != want { + t.Errorf("Want encoded pr list options %q, got %q", want, got) + } +} diff --git a/scm/driver/gitee/webhook.go b/scm/driver/gitee/webhook.go new file mode 100644 index 000000000..ec86d4d57 --- /dev/null +++ b/scm/driver/gitee/webhook.go @@ -0,0 +1,463 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "time" + + "github.com/drone/go-scm/scm" +) + +type webhookService struct { + client *wrapper +} + +func (s *webhookService) Parse(req *http.Request, fn scm.SecretFunc) (scm.Webhook, error) { + data, err := ioutil.ReadAll( + io.LimitReader(req.Body, 10000000), + ) + if err != nil { + return nil, err + } + + var hook scm.Webhook + switch req.Header.Get("X-Gitee-Event") { + case "Push Hook": + hook, err = s.parsePushHook(data) + case "Merge Request Hook": + hook, err = s.parseMergeRequestHook(data) + case "Issue Hook": + hook, err = s.parseIssueHook(data) + case "Note Hook": + hook, err = s.parseNoteHook(data) + case "Tag Push Hook": + hook, err = s.parseTagPushHook(data) + default: + return nil, scm.ErrUnknownEvent + } + if err != nil { + return nil, err + } + + key, err := fn(hook) + if err != nil { + return hook, err + } else if key == "" { + return hook, nil + } + + agent := req.Header.Get("User-Agent") + if agent != "git-oschina-hook" { + return hook, &Error{ + Message: "hook's user-agent is not git-oschina-hook", + } + } + timestamp := req.Header.Get("X-Gitee-Timestamp") + signature := req.Header.Get("X-Gitee-Token") + + if !validateSignature(signature, key, timestamp) { + return hook, scm.ErrSignatureInvalid + } + return hook, nil +} + +func (s *webhookService) parsePushHook(data []byte) (scm.Webhook, error) { + dst := new(pushOrTagPushHook) + err := json.Unmarshal(data, dst) + return convertPushHook(dst), err +} + +func (s *webhookService) parseMergeRequestHook(data []byte) (scm.Webhook, error) { + dst := new(mergeRequestHook) + err := json.Unmarshal(data, dst) + return convertPullRequestHook(dst), err +} + +func (s *webhookService) parseIssueHook(data []byte) (scm.Webhook, error) { + dst := new(issueHook) + err := json.Unmarshal(data, dst) + return convertIssueHook(dst), err +} + +func (s *webhookService) parseTagPushHook(data []byte) (scm.Webhook, error) { + dst := new(pushOrTagPushHook) + err := json.Unmarshal(data, dst) + return convertTagPushHook(dst), err +} + +func (s *webhookService) parseNoteHook(data []byte) (scm.Webhook, error) { + dst := new(noteHook) + err := json.Unmarshal(data, dst) + return convertNoteHook(dst), err +} + +// validateSignature +// see https://gitee.com/help/articles/4290#article-header3 +func validateSignature(signature, key, timestamp string) bool { + stringToSign := timestamp + "\n" + key + h := hmac.New(sha256.New, []byte(key)) + h.Write([]byte(stringToSign)) + computedSignature := base64.StdEncoding.EncodeToString(h.Sum(nil)) + return computedSignature == signature +} + +type ( + pushOrTagPushHook struct { + Action string `json:"action"` + HookName string `json:"hook_name"` + Password string `json:"password"` + HookID int `json:"hook_id"` + HookURL string `json:"hook_url"` + Timestamp string `json:"timestamp"` + Sign string `json:"sign"` + Ref string `json:"ref"` + Before string `json:"before"` + After string `json:"after"` + Created bool `json:"created"` + Deleted bool `json:"deleted"` + Compare string `json:"compare"` + Commits []hookCommit `json:"commits"` + HeadCommit hookCommit `json:"head_commit"` + TotalCommitsCount int `json:"total_commits_count"` + CommitsMoreThanTen bool `json:"commits_more_than_ten"` + Repository hookRepository `json:"repository"` + Sender user `json:"sender"` + Enterprise enterprise `json:"enterprise"` + } + mergeRequestHook struct { + Action string `json:"action"` + + Number int `json:"number"` + Title string `json:"title"` + Project hookRepository `json:"project"` + PullRequest pr `json:"pull_request"` + + Iid int `json:"iid"` + ActionDesc string `json:"action_desc"` + Author user `json:"author"` + Body string `json:"body"` + Enterprise enterprise `json:"enterprise"` + Languages []string `json:"languages"` + MergeCommitSha string `json:"merge_commit_sha"` + MergeStatus string `json:"merge_status"` + Password string `json:"password"` + Repository hookRepository `json:"repository"` + Sender user `json:"sender"` + SourceBranch string `json:"source_branch"` + + SourceRepo struct { + Project hookRepository `json:"project"` + Repository hookRepository `json:"repository"` + } `json:"source_repo"` + TargetRepo struct { + Project hookRepository `json:"project"` + Repository hookRepository `json:"repository"` + } `json:"target_repo"` + State string `json:"state"` + TargetBranch string `json:"target_branch"` + TargetUser user `json:"target_user"` + Timestamp string `json:"timestamp"` + UpdatedBy user `json:"updated_by"` + URL string `json:"url"` + } + noteHook struct { + Action string `json:"action"` + HookName string `json:"hook_name"` + Password string `json:"password"` + HookID int `json:"hook_id"` + HookURL string `json:"hook_url"` + Timestamp string `json:"timestamp"` + Sign string `json:"sign"` + Comment hookComment `json:"comment"` + NoteableType string `json:"noteable_type"` + Issue issue `json:"issue"` + PullRequest pr `json:"pull_request"` + Repository hookRepository `json:"repository"` + Sender user `json:"sender"` + Enterprise enterprise `json:"enterprise"` + } + issueHook struct { + Action string `json:"action"` + HookName string `json:"hook_name"` + Password string `json:"password"` + HookID int `json:"hook_id"` + HookURL string `json:"hook_url"` + Timestamp string `json:"timestamp"` + Sign string `json:"sign"` + Issue issue `json:"issue"` + Repository hookRepository `json:"repository"` + Sender user `json:"sender"` + Enterprise enterprise `json:"enterprise"` + } + + hookAuthorOrCommitter struct { + Time time.Time `json:"time"` + Name string `json:"name"` + Email string `json:"email"` + Username string `json:"username"` + UserName string `json:"user_name"` + URL string `json:"url"` + } + hookCommit struct { + ID string `json:"id"` + TreeID string `json:"tree_id"` + Distinct bool `json:"distinct"` + Message string `json:"message"` + Timestamp time.Time `json:"timestamp"` + URL string `json:"url"` + Author hookAuthorOrCommitter `json:"author"` + Committer hookAuthorOrCommitter `json:"committer"` + Added interface{} `json:"added"` + Removed interface{} `json:"removed"` + Modified []string `json:"modified"` + } + hookComment struct { + HtmlURL string `json:"html_url"` + ID int `json:"id"` + Body string `json:"body"` + User user `json:"user"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + } + hookRepository struct { + CloneURL string `json:"clone_url"` + CreatedAt time.Time `json:"created_at"` + DefaultBranch string `json:"default_branch"` + Description string `json:"description"` + Fork bool `json:"fork"` + ForksCount int `json:"forks_count"` + FullName string `json:"full_name"` + GitHttpURL string `json:"git_http_url"` + GitSshURL string `json:"git_ssh_url"` + GitSvnURL string `json:"git_svn_url"` + GitURL string `json:"git_url"` + HasIssues bool `json:"has_issues"` + HasPages bool `json:"has_pages"` + HasWiki bool `json:"has_wiki"` + Homepage string `json:"homepage"` + HtmlURL string `json:"html_url"` + ID int `json:"id"` + Language interface{} `json:"language"` + License interface{} `json:"license"` + Name string `json:"name"` + NameWithNamespace string `json:"name_with_namespace"` + Namespace string `json:"namespace"` + OpenIssuesCount int `json:"open_issues_count"` + Owner user `json:"owner"` + Path string `json:"path"` + PathWithNamespace string `json:"path_with_namespace"` + Private bool `json:"private"` + PushedAt time.Time `json:"pushed_at"` + SSHURL string `json:"ssh_url"` + StargazersCount int `json:"stargazers_count"` + SvnURL string `json:"svn_url"` + UpdatedAt time.Time `json:"updated_at"` + URL string `json:"url"` + WatchersCount int `json:"watchers_count"` + } + enterprise struct { + Name string `json:"name"` + URL string `json:"url"` + } +) + +func convertPushHook(src *pushOrTagPushHook) *scm.PushHook { + var commits []scm.Commit + if &src.Commits != nil { + for _, c := range src.Commits { + commits = append(commits, + scm.Commit{ + Sha: c.ID, + Message: c.Message, + Link: c.URL, + Author: scm.Signature{ + Login: c.Author.Username, + Email: c.Author.Email, + Name: c.Author.Name, + Date: c.Timestamp, + }, + Committer: scm.Signature{ + Login: c.Committer.Username, + Email: c.Committer.Email, + Name: c.Committer.Name, + Date: c.Timestamp, + }, + }) + } + } + + dst := &scm.PushHook{ + Ref: src.Ref, + Repo: *convertHookRepository(&src.Repository), + Before: src.Before, + After: src.After, + Commit: scm.Commit{ + Sha: src.After, + Link: src.Compare, + }, + Sender: *convertUser(&src.Sender), + Commits: commits, + } + if &src.HeadCommit != nil { + dst.Commit.Message = src.HeadCommit.Message + dst.Commit.Author = scm.Signature{ + Login: src.HeadCommit.Author.Username, + Email: src.HeadCommit.Author.Email, + Name: src.HeadCommit.Author.Name, + Date: src.HeadCommit.Timestamp, + } + dst.Commit.Committer = scm.Signature{ + Login: src.HeadCommit.Committer.Username, + Email: src.HeadCommit.Committer.Email, + Name: src.HeadCommit.Committer.Name, + Date: src.HeadCommit.Timestamp, + } + } + return dst +} + +func convertPullRequestHook(src *mergeRequestHook) *scm.PullRequestHook { + dst := &scm.PullRequestHook{ + Repo: *convertHookRepository(&src.Repository), + PullRequest: *convertPullRequest(&src.PullRequest), + Sender: *convertUser(&src.Sender), + } + switch src.Action { + case "update": + if src.ActionDesc == "update_label" { + if len(src.PullRequest.Labels) == 0 { + dst.Action = scm.ActionUnlabel + } else { + dst.Action = scm.ActionLabel + } + } else { + if src.ActionDesc == "target_branch_changed" || src.ActionDesc == "source_branch_changed" { + dst.Action = scm.ActionUpdate + } + } + case "open": + dst.Action = scm.ActionOpen + case "close": + dst.Action = scm.ActionClose + case "merge": + dst.Action = scm.ActionMerge + case "test", "tested", "assign", "approved": + // do nothing + } + return dst +} + +func convertIssueHook(src *issueHook) *scm.IssueHook { + dst := &scm.IssueHook{ + Repo: *convertHookRepository(&src.Repository), + Issue: *convertIssue(&src.Issue), + Sender: *convertUser(&src.Sender), + } + switch src.Action { + case "open": + dst.Action = scm.ActionOpen + case "delete": + dst.Action = scm.ActionClose + case "state_change": + switch src.Issue.State { + case "open": + dst.Action = scm.ActionOpen + case "progressing": + dst.Action = scm.ActionOpen + case "close", "rejected": + dst.Action = scm.ActionClose + } + case "assign": + dst.Action = scm.ActionUpdate + } + return dst +} + +func convertTagPushHook(src *pushOrTagPushHook) scm.Webhook { + dst := &scm.TagHook{ + Ref: scm.Reference{ + Name: scm.TrimRef(src.Ref), + Sha: src.HeadCommit.ID, + }, + Repo: *convertHookRepository(&src.Repository), + Sender: *convertUser(&src.Sender), + } + if src.Created { + dst.Action = scm.ActionCreate + } else if src.Deleted { + dst.Action = scm.ActionDelete + dst.Ref.Sha = "" + } + return dst +} + +func convertNoteHook(src *noteHook) scm.Webhook { + convertHookComment := func(comment *hookComment) *scm.Comment { + return &scm.Comment{ + ID: comment.ID, + Body: comment.Body, + Author: *convertUser(&comment.User), + Created: comment.CreatedAt, + Updated: comment.UpdatedAt, + } + } + convertCommentAction := func(src string) (action scm.Action) { + switch src { + case "comment": + return scm.ActionCreate + case "edited": + return scm.ActionEdit + case "deleted": + return scm.ActionDelete + default: + return + } + } + + if src.NoteableType == "Issue" { + return &scm.IssueCommentHook{ + Action: convertCommentAction(src.Action), + Repo: *convertHookRepository(&src.Repository), + Issue: *convertIssue(&src.Issue), + Comment: *convertHookComment(&src.Comment), + Sender: *convertUser(&src.Sender), + } + } + + if src.NoteableType == "PullRequest" { + // not support review comment + return &scm.PullRequestCommentHook{ + Action: convertCommentAction(src.Action), + Repo: *convertHookRepository(&src.Repository), + PullRequest: *convertPullRequest(&src.PullRequest), + Comment: *convertHookComment(&src.Comment), + Sender: *convertUser(&src.Sender), + } + } + return nil +} + +func convertHookRepository(from *hookRepository) *scm.Repository { + return &scm.Repository{ + ID: fmt.Sprint(from.ID), + Namespace: from.Namespace, + Name: from.Name, + Branch: from.DefaultBranch, + Private: from.Private, + Clone: from.CloneURL, + CloneSSH: from.GitSshURL, + Link: from.HtmlURL, + Created: from.CreatedAt, + Updated: from.UpdatedAt, + } +} diff --git a/scm/driver/gitee/webhook_test.go b/scm/driver/gitee/webhook_test.go new file mode 100644 index 000000000..9cb013db3 --- /dev/null +++ b/scm/driver/gitee/webhook_test.go @@ -0,0 +1,265 @@ +// Copyright 2017 Drone.IO Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package gitee + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "net/http" + "strings" + "testing" + + "github.com/drone/go-scm/scm" + + "github.com/google/go-cmp/cmp" +) + +func TestWebhooks(t *testing.T) { + tests := []struct { + event string + before string + after string + obj interface{} + }{ + // + // Push Hook events + // + + // Push Hook + { + event: "Push Hook", + before: "testdata/webhooks/push.json", + after: "testdata/webhooks/push.json.golden", + obj: new(scm.PushHook), + }, + // Push Hook create + { + event: "Push Hook", + before: "testdata/webhooks/push_branch_create.json", + after: "testdata/webhooks/push_branch_create.json.golden", + obj: new(scm.PushHook), + }, + // Push Hook delete + { + event: "Push Hook", + before: "testdata/webhooks/push_branch_delete.json", + after: "testdata/webhooks/push_branch_delete.json.golden", + obj: new(scm.PushHook), + }, + + // + // Push Tag Hook events + // + + // Push Tag Hook create + { + event: "Tag Push Hook", + before: "testdata/webhooks/tag_create.json", + after: "testdata/webhooks/tag_create.json.golden", + obj: new(scm.TagHook), + }, + // Push Tag Hook delete + { + event: "Tag Push Hook", + before: "testdata/webhooks/tag_delete.json", + after: "testdata/webhooks/tag_delete.json.golden", + obj: new(scm.TagHook), + }, + + // + // Merge Request Hook events + // + + // Merge Request Hook merge + { + event: "Merge Request Hook", + before: "testdata/webhooks/pr_merge.json", + after: "testdata/webhooks/pr_merge.json.golden", + obj: new(scm.PullRequestHook), + }, + // Merge Request Hook open + { + event: "Merge Request Hook", + before: "testdata/webhooks/pr_open.json", + after: "testdata/webhooks/pr_open.json.golden", + obj: new(scm.PullRequestHook), + }, + // Merge Request Hook close + { + event: "Merge Request Hook", + before: "testdata/webhooks/pr_close.json", + after: "testdata/webhooks/pr_close.json.golden", + obj: new(scm.PullRequestHook), + }, + // pull request update + { + event: "Merge Request Hook", + before: "testdata/webhooks/pr_update.json", + after: "testdata/webhooks/pr_update.json.golden", + obj: new(scm.PullRequestHook), + }, + // Merge Request Hook labeled + { + event: "Merge Request Hook", + before: "testdata/webhooks/pr_labeled.json", + after: "testdata/webhooks/pr_labeled.json.golden", + obj: new(scm.PullRequestHook), + }, + // Merge Request Hook unlabeled + { + event: "Merge Request Hook", + before: "testdata/webhooks/pr_unlabeled.json", + after: "testdata/webhooks/pr_unlabeled.json.golden", + obj: new(scm.PullRequestHook), + }, + + // + // Issue Hook events + // + + // Issue Hook open + { + event: "Issue Hook", + before: "testdata/webhooks/issue_hook_open.json", + after: "testdata/webhooks/issue_hook_open.json.golden", + obj: new(scm.IssueHook), + }, + // Issue Hook delete + { + event: "Issue Hook", + before: "testdata/webhooks/issue_hook_delete.json", + after: "testdata/webhooks/issue_hook_delete.json.golden", + obj: new(scm.IssueHook), + }, + // Issue Hook state_change + { + event: "Issue Hook", + before: "testdata/webhooks/issue_hook_state_change.json", + after: "testdata/webhooks/issue_hook_state_change.json.golden", + obj: new(scm.IssueHook), + }, + // Issue Hook assign + { + event: "Issue Hook", + before: "testdata/webhooks/issue_hook_assign.json", + after: "testdata/webhooks/issue_hook_assign.json.golden", + obj: new(scm.IssueHook), + }, + + // + // Note Hook events + // + + // Note Hook issue comment + { + event: "Note Hook", + before: "testdata/webhooks/note_hook_issue_comment.json", + after: "testdata/webhooks/note_hook_issue_comment.json.golden", + obj: new(scm.IssueCommentHook), + }, + // Note Hook pull request comment + { + event: "Note Hook", + before: "testdata/webhooks/note_hook_pr_comment.json", + after: "testdata/webhooks/note_hook_pr_comment.json.golden", + obj: new(scm.PullRequestCommentHook), + }, + } + + for _, test := range tests { + before, err := ioutil.ReadFile(test.before) + if err != nil { + t.Error(err) + continue + } + after, err := ioutil.ReadFile(test.after) + if err != nil { + t.Error(err) + continue + } + + buf := bytes.NewBuffer(before) + r, _ := http.NewRequest("GET", "/", buf) + r.Header.Set("X-Gitee-Event", test.event) + r.Header.Set("X-Gitee-Token", "Xvh4YPVe6l31XpDRL9J2yeaEXabsckIoUUschpXiVck=") + r.Header.Set("X-Gitee-Timestamp", "1633679083918") + r.Header.Set("User-Agent", "git-oschina-hook") + + s := new(webhookService) + o, err := s.Parse(r, secretFunc) + if err != nil && err != scm.ErrSignatureInvalid { + t.Error(err) + continue + } + + err = json.Unmarshal(after, test.obj) + if err != nil { + t.Error(err) + continue + } + + if diff := cmp.Diff(test.obj, o); diff != "" { + t.Errorf("Error unmarshaling %s", test.before) + t.Log(diff) + } + + switch event := o.(type) { + case *scm.PushHook: + if !strings.HasPrefix(event.Ref, "refs/") { + t.Errorf("Push hook reference must start with refs/") + } + case *scm.TagHook: + if strings.HasPrefix(event.Ref.Name, "refs/") { + t.Errorf("Branch hook reference must not start with refs/") + } + } + } +} + +func TestWebhook_ErrUnknownEvent(t *testing.T) { + f, _ := ioutil.ReadFile("testdata/webhooks/push.json") + r, _ := http.NewRequest("GET", "/", bytes.NewBuffer(f)) + + s := new(webhookService) + _, err := s.Parse(r, secretFunc) + if err != scm.ErrUnknownEvent { + t.Errorf("Expect unknown event error, got %v", err) + } +} + +func TestWebhookInvalid(t *testing.T) { + f, _ := ioutil.ReadFile("testdata/webhooks/push.json") + r, _ := http.NewRequest("GET", "/", bytes.NewBuffer(f)) + r.Header.Set("X-Gitee-Event", "Push Hook") + r.Header.Set("X-Gitee-Token", "Xvh4YPVe6l31XpDRL9J2yeaEXabsckIoUUschpXiVck=") + r.Header.Set("X-Gitee-Timestamp", "1633679083917") + r.Header.Set("User-Agent", "git-oschina-hook") + + s := new(webhookService) + _, err := s.Parse(r, secretFunc) + if err != scm.ErrSignatureInvalid { + t.Errorf("Expect invalid signature error, got %v", err) + } +} + +func TestWebhookValid(t *testing.T) { + f, _ := ioutil.ReadFile("testdata/webhooks/push.json") + r, _ := http.NewRequest("GET", "/", bytes.NewBuffer(f)) + r.Header.Set("X-Gitee-Event", "Push Hook") + r.Header.Set("X-Gitee-Token", "Xvh4YPVe6l31XpDRL9J2yeaEXabsckIoUUschpXiVck=") + r.Header.Set("X-Gitee-Timestamp", "1633679083918") + r.Header.Set("User-Agent", "git-oschina-hook") + + s := new(webhookService) + _, err := s.Parse(r, secretFunc) + if err != nil { + t.Errorf("Expect valid signature, got %v", err) + } +} + +func secretFunc(scm.Webhook) (string, error) { + return "bBg5lrt03VixkX85CNqYIcecC0SIGASE", nil +}