Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = ["gitlab.go"],
importpath = "go-common/app/admin/ep/saga/service/gitlab",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//vendor/github.com/pkg/errors:go_default_library",
"//vendor/github.com/xanzy/go-gitlab:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
go_test(
name = "go_default_test",
srcs = ["gitlab_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/admin/ep/saga/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)

View File

@@ -0,0 +1,239 @@
package gitlab
import (
"context"
"time"
"github.com/pkg/errors"
"github.com/xanzy/go-gitlab"
)
const (
_defaultPerPage = 20
_maxPerPage = 100
)
// Gitlab def
type Gitlab struct {
url string
token string
client *gitlab.Client
}
// New new gitlab structure
func New(url string, token string) (g *Gitlab) {
g = &Gitlab{
url: url,
token: token,
client: gitlab.NewClient(nil, token),
}
g.client.SetBaseURL(url)
return
}
// ListProjects list all project
func (g *Gitlab) ListProjects(page int) (projects []*gitlab.Project, err error) {
opt := &gitlab.ListProjectsOptions{}
opt.ListOptions.Page = page
opt.ListOptions.PerPage = _defaultPerPage
if projects, _, err = g.client.Projects.ListProjects(opt); err != nil {
err = errors.Wrapf(err, "ListProjects err(%+v)", err)
return
}
return
}
// ListProjectCommit ...
func (g *Gitlab) ListProjectCommit(projectID, page int, since, until *time.Time) (commits []*gitlab.Commit, resp *gitlab.Response, err error) {
var (
opt = &gitlab.ListCommitsOptions{}
all = true
)
opt.Page = page
opt.PerPage = _maxPerPage
opt.All = &all
if since != nil {
opt.Since = since
}
if until != nil {
opt.Until = until
}
if commits, resp, err = g.client.Commits.ListCommits(projectID, opt); err != nil {
err = errors.Wrapf(err, "ListCommits projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListProjectMergeRequests list all MR
func (g *Gitlab) ListProjectMergeRequests(projectID int, since, until *time.Time, page int) (mrs []*gitlab.MergeRequest, resp *gitlab.Response, err error) {
opt := &gitlab.ListProjectMergeRequestsOptions{}
opt.UpdatedAfter = since
opt.UpdatedBefore = until
if page != -1 {
opt.PerPage = _defaultPerPage
opt.Page = page
}
if mrs, resp, err = g.client.MergeRequests.ListProjectMergeRequests(projectID, opt); err != nil {
err = errors.Wrapf(err, "ListProjectMergeRequests projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListProjectPipelines list all pipelines
func (g *Gitlab) ListProjectPipelines(page, projectID int, status gitlab.BuildStateValue) (pipelineList gitlab.PipelineList, resp *gitlab.Response, err error) {
opt := &gitlab.ListProjectPipelinesOptions{}
opt.ListOptions.Page = page
if status != "" {
opt.Status = gitlab.BuildState(status)
}
if pipelineList, resp, err = g.client.Pipelines.ListProjectPipelines(projectID, opt); err != nil {
err = errors.Wrapf(err, "ListProjectPipelines projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListPipelineJobs list all pipeline jobs
func (g *Gitlab) ListPipelineJobs(opt *gitlab.ListJobsOptions, projectID, pipelineID int) (jobList []*gitlab.Job, resp *gitlab.Response, err error) {
if jobList, resp, err = g.client.Jobs.ListPipelineJobs(projectID, pipelineID, opt); err != nil {
err = errors.Wrapf(err, "ListPipelineJobs projectId(%d), pipelineId(%d), err(%+v)", projectID, pipelineID, err)
return
}
return
}
// GetPipeline get a pipeline info
func (g *Gitlab) GetPipeline(projectID, pipelineID int) (pipeline *gitlab.Pipeline, resp *gitlab.Response, err error) {
if pipeline, resp, err = g.client.Pipelines.GetPipeline(projectID, pipelineID); err != nil {
err = errors.Wrapf(err, "GetPipeline projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListProjectBranch ...
func (g *Gitlab) ListProjectBranch(projectID, page int) (branches []*gitlab.Branch, resp *gitlab.Response, err error) {
var opt = &gitlab.ListBranchesOptions{Page: page, PerPage: 20}
if branches, resp, err = g.client.Branches.ListBranches(projectID, opt); err != nil {
err = errors.Wrapf(err, "ListBranches projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListMRNotes get notes of the MR
func (g *Gitlab) ListMRNotes(c context.Context, projectID, mrID, page int) (notes []*gitlab.Note, resp *gitlab.Response, err error) {
var opt = &gitlab.ListMergeRequestNotesOptions{Page: page, PerPage: 20}
if notes, resp, err = g.client.Notes.ListMergeRequestNotes(projectID, mrID, opt); err != nil {
err = errors.Wrapf(err, "ListMergeRequestNotes projectId(%d), mrId(%d), err(%+v)", projectID, mrID, err)
return
}
return
}
// MergeBase 获取两个分支最近的合并commit
func (g *Gitlab) MergeBase(c context.Context, projectID int, refs []string) (commit *gitlab.Commit, resp *gitlab.Response, err error) {
var opt = &gitlab.MergeBaseOptions{Ref: refs}
if commit, resp, err = g.client.Repositories.MergeBase(projectID, opt); err != nil {
err = errors.Wrapf(err, "MergeBase projectId(%d), refs(%v), err(%+v)", projectID, refs, err)
return
}
return
}
// ListMRAwardEmoji ...
func (g *Gitlab) ListMRAwardEmoji(projectID, mrIID, page int) (emojis []*gitlab.AwardEmoji, resp *gitlab.Response, err error) {
var opt = &gitlab.ListAwardEmojiOptions{Page: page, PerPage: _defaultPerPage}
if emojis, resp, err = g.client.AwardEmoji.ListMergeRequestAwardEmoji(projectID, mrIID, opt); err != nil {
err = errors.Wrapf(err, "ListMergeRequestAwardEmoji projectId(%d), mrIID(%d), err(%+v)", projectID, mrIID, err)
return
}
return
}
//ListMRDiscussions ...
func (g *Gitlab) ListMRDiscussions(projectID, mrIID, page int) (result []*gitlab.Discussion, resp *gitlab.Response, err error) {
var opt = &gitlab.ListMergeRequestDiscussionsOptions{Page: page, PerPage: _defaultPerPage}
if result, resp, err = g.client.Discussions.ListMergeRequestDiscussions(projectID, mrIID, opt); err != nil {
err = errors.Wrapf(err, "ListMergeRequestDiscussions projectId(%d), mrIID(%d), err(%+v)", projectID, mrIID, err)
return
}
return
}
// GetMergeRequestDiff ...
func (g *Gitlab) GetMergeRequestDiff(projectID, mrID int) (mr *gitlab.MergeRequest, resp *gitlab.Response, err error) {
if mr, resp, err = g.client.MergeRequests.GetMergeRequestChanges(projectID, mrID); err != nil {
err = errors.Wrapf(err, "GetMergeRequestChanges projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListProjectJobs get jobs of the project
func (g *Gitlab) ListProjectJobs(projID, page int) (jobs []gitlab.Job, resp *gitlab.Response, err error) {
var opt = &gitlab.ListJobsOptions{}
opt.Page = page
// perPage max is 100
opt.PerPage = _maxPerPage
if jobs, resp, err = g.client.Jobs.ListProjectJobs(projID, opt); err != nil {
err = errors.Wrapf(err, "ListProjectJobs projectId(%d), err(%+v)", projID, err)
return
}
return
}
// ListProjectMembers ...
func (g *Gitlab) ListProjectMembers(projectID, page int) (members []*gitlab.ProjectMember, resp *gitlab.Response, err error) {
opt := &gitlab.ListProjectMembersOptions{}
opt.Page = page
opt.PerPage = _defaultPerPage
if members, resp, err = g.client.ProjectMembers.ListProjectMembers(projectID, opt); err != nil {
err = errors.Wrapf(err, "ListProjectMembers projectId(%d), err(%+v)", projectID, err)
return
}
return
}
// ListProjectIssues ...
func (g *Gitlab) ListProjectIssues(projID, page int, since, until *time.Time) (issues []*gitlab.Issue, resp *gitlab.Response, err error) {
var opt = &gitlab.ListProjectIssuesOptions{}
opt.Page = page
// perPage max is 100
opt.PerPage = _maxPerPage
if since != nil {
opt.CreatedBefore = until
}
if until != nil {
opt.CreatedAfter = since
}
if issues, resp, err = g.client.Issues.ListProjectIssues(projID, opt); err != nil {
err = errors.Wrapf(err, "ListProjectIssues projectId(%d), err(%+v)", projID, err)
return
}
return
}
// ListProjectRunners ...
func (g *Gitlab) ListProjectRunners(projID, page int) (result []*gitlab.Runner, resp *gitlab.Response, err error) {
var opt = &gitlab.ListProjectRunnersOptions{}
opt.ListOptions.Page = page
opt.PerPage = _defaultPerPage
if result, resp, err = g.client.Runners.ListProjectRunners(projID, opt); err != nil {
err = errors.Wrapf(err, "ListProjectRunners projectId(%d), err(%+v)", projID, err)
return
}
return
}

View File

@@ -0,0 +1,113 @@
package gitlab
import (
"flag"
"os"
"testing"
"time"
"go-common/app/admin/ep/saga/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
g *Gitlab
)
// TestMain ...
func TestMain(m *testing.M) {
flag.Set("conf", "../../cmd/saga-admin-test.toml")
var err error
if err = conf.Init(); err != nil {
panic(err)
}
g = New(conf.Conf.Property.Gitlab.API, conf.Conf.Property.Gitlab.Token)
os.Exit(m.Run())
}
// TestListProjects ...
func TestListProjects(t *testing.T) {
Convey("ListProjects", t, func() {
projects, err := g.ListProjects(1)
So(err, ShouldBeNil)
So(len(projects), ShouldBeGreaterThan, 1)
})
}
func TestListProjectPipelines(t *testing.T) {
Convey("listProjectPipelines", t, func() {
_, _, err := g.ListProjectPipelines(1, 682, "")
So(err, ShouldBeNil)
})
}
func TestGetPipeline(t *testing.T) {
Convey("GetPipeline", t, func() {
_, _, err := g.GetPipeline(682, 166011)
So(err, ShouldBeNil)
})
}
func TestListProjectJobs(t *testing.T) {
Convey("ListJobs", t, func() {
jobs, resp, err := g.ListProjectJobs(5822, 1)
So(err, ShouldBeNil)
So(resp, ShouldNotBeNil)
So(len(jobs), ShouldBeGreaterThan, 1)
})
}
func TestGitlab_ListProjectMergeRequests(t *testing.T) {
Convey("ListProjectMergeRequest", t, func() {
var (
project = 682
until = time.Now()
since = until.AddDate(0, -1, 0)
)
mrs, resp, err := g.ListProjectMergeRequests(project, &since, &until, -1)
So(len(mrs), ShouldBeGreaterThan, 1)
So(resp, ShouldNotBeNil)
So(err, ShouldBeNil)
})
}
func TestGitlab_ListProjectBranch(t *testing.T) {
Convey("ListProjectBranch", t, func() {
var (
project = 682
page = 1
)
branches, resp, err := g.ListProjectBranch(project, page)
So(err, ShouldBeNil)
So(len(branches), ShouldBeGreaterThan, 0)
So(resp, ShouldNotBeNil)
})
}
func TestGitlab_ListProjectCommit(t *testing.T) {
Convey("List Project branch commit", t, func() {
var (
project = 682
page = 1
)
commits, resp, err := g.ListProjectCommit(project, page, nil, nil)
So(err, ShouldBeNil)
So(commits, ShouldNotBeNil)
So(resp.StatusCode, ShouldEqual, 200)
})
}
func TestGitlab_ListProjectRunners(t *testing.T) {
Convey("test list project runners", t, func() {
var (
project = 4928
page = 1
)
runners, resp, err := g.ListProjectRunners(project, page)
So(err, ShouldBeNil)
So(resp.StatusCode, ShouldEqual, 200)
So(runners, ShouldNotBeNil)
})
}