mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-26 20:01:02 +00:00
Update gitlab API to version v4
This commit is contained in:
parent
3de3662d29
commit
6074a0164e
5 changed files with 39 additions and 44 deletions
|
@ -1,17 +1,16 @@
|
||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
searchUrl = "/projects/search/:query"
|
|
||||||
projectsUrl = "/projects"
|
projectsUrl = "/projects"
|
||||||
projectUrl = "/projects/:id"
|
projectUrl = "/projects/:id"
|
||||||
repoUrlRawFile = "/projects/:id/repository/blobs/:sha"
|
repoUrlRawFileRef = "/projects/:id/repository/files/:filepath"
|
||||||
repoUrlRawFileRef = "/projects/:id/repository/files"
|
|
||||||
commitStatusUrl = "/projects/:id/statuses/:sha"
|
commitStatusUrl = "/projects/:id/statuses/:sha"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -47,6 +46,7 @@ func (c *Client) Projects(page int, per_page int, hide_archives bool) ([]*Projec
|
||||||
projectsOptions := QMap{
|
projectsOptions := QMap{
|
||||||
"page": strconv.Itoa(page),
|
"page": strconv.Itoa(page),
|
||||||
"per_page": strconv.Itoa(per_page),
|
"per_page": strconv.Itoa(per_page),
|
||||||
|
"membership": "true",
|
||||||
}
|
}
|
||||||
|
|
||||||
if hide_archives {
|
if hide_archives {
|
||||||
|
@ -79,39 +79,31 @@ func (c *Client) Project(id string) (*Project, error) {
|
||||||
return project, err
|
return project, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Raw file content
|
|
||||||
func (c *Client) RepoRawFile(id, sha, filepath string) ([]byte, error) {
|
|
||||||
url, opaque := c.ResourceUrl(
|
|
||||||
repoUrlRawFile,
|
|
||||||
QMap{
|
|
||||||
":id": id,
|
|
||||||
":sha": sha,
|
|
||||||
},
|
|
||||||
QMap{
|
|
||||||
"filepath": filepath,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
contents, err := c.Do("GET", url, opaque, nil)
|
|
||||||
|
|
||||||
return contents, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Client) RepoRawFileRef(id, ref, filepath string) ([]byte, error) {
|
func (c *Client) RepoRawFileRef(id, ref, filepath string) ([]byte, error) {
|
||||||
|
var fileRef FileRef
|
||||||
url, opaque := c.ResourceUrl(
|
url, opaque := c.ResourceUrl(
|
||||||
repoUrlRawFileRef,
|
repoUrlRawFileRef,
|
||||||
QMap{
|
QMap{
|
||||||
":id": id,
|
":id": id,
|
||||||
|
":filepath": filepath,
|
||||||
},
|
},
|
||||||
QMap{
|
QMap{
|
||||||
"filepath": filepath,
|
"ref": ref,
|
||||||
"ref": ref,
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
contents, err := c.Do("GET", url, opaque, nil)
|
contents, err := c.Do("GET", url, opaque, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return contents, err
|
err = json.Unmarshal(contents, &fileRef)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fileRawContent, err := base64.StdEncoding.DecodeString(fileRef.Content)
|
||||||
|
return fileRawContent, err
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -138,8 +130,9 @@ func (c *Client) SetStatus(id, sha, state, desc, ref, link string) error {
|
||||||
// Get a list of projects by query owned by the authenticated user.
|
// Get a list of projects by query owned by the authenticated user.
|
||||||
func (c *Client) SearchProjectId(namespace string, name string) (id int, err error) {
|
func (c *Client) SearchProjectId(namespace string, name string) (id int, err error) {
|
||||||
|
|
||||||
url, opaque := c.ResourceUrl(searchUrl, nil, QMap{
|
url, opaque := c.ResourceUrl(projectsUrl, nil, QMap{
|
||||||
":query": strings.ToLower(name),
|
"query": strings.ToLower(name),
|
||||||
|
"membership": "true",
|
||||||
})
|
})
|
||||||
|
|
||||||
var projects []*Project
|
var projects []*Project
|
||||||
|
|
|
@ -136,3 +136,15 @@ type HookPayload struct {
|
||||||
ObjectKind string `json:"object_kind,omitempty"`
|
ObjectKind string `json:"object_kind,omitempty"`
|
||||||
ObjectAttributes *HookObjAttr `json:"object_attributes,omitempty"`
|
ObjectAttributes *HookObjAttr `json:"object_attributes,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FileRef struct {
|
||||||
|
FileName string `json:"file_name,omitempty"`
|
||||||
|
FilePath string `json:"file_path,omitempty"`
|
||||||
|
Size int `json:"size,omitempty"`
|
||||||
|
Encoding string `json:"encoding,omitempty"`
|
||||||
|
Content string `json:"content"`
|
||||||
|
Ref string `json:"ref,omitempty"`
|
||||||
|
BlobId string `json:"blob_id,omitempty"`
|
||||||
|
CommitId string `json:"commit_id,omitempty"`
|
||||||
|
LastCommitId string `json:"last_commit_id,omitempty"`
|
||||||
|
}
|
||||||
|
|
|
@ -311,17 +311,7 @@ func (g *Gitlab) Perm(u *model.User, owner, name string) (*model.Perm, error) {
|
||||||
|
|
||||||
// File fetches a file from the remote repository and returns in string format.
|
// File fetches a file from the remote repository and returns in string format.
|
||||||
func (g *Gitlab) File(user *model.User, repo *model.Repo, build *model.Build, f string) ([]byte, error) {
|
func (g *Gitlab) File(user *model.User, repo *model.Repo, build *model.Build, f string) ([]byte, error) {
|
||||||
var client = NewClient(g.URL, user.Token, g.SkipVerify)
|
return g.FileRef(user, repo, build.Commit, f)
|
||||||
id, err := GetProjectId(g, client, repo.Owner, repo.Name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
out, err := client.RepoRawFile(id, build.Commit, f)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileRef fetches the file from the GitHub repository and returns its contents.
|
// FileRef fetches the file from the GitHub repository and returns its contents.
|
||||||
|
|
|
@ -18,7 +18,7 @@ const (
|
||||||
// NewClient is a helper function that returns a new GitHub
|
// NewClient is a helper function that returns a new GitHub
|
||||||
// client using the provided OAuth token.
|
// client using the provided OAuth token.
|
||||||
func NewClient(url, accessToken string, skipVerify bool) *client.Client {
|
func NewClient(url, accessToken string, skipVerify bool) *client.Client {
|
||||||
client := client.New(url, "/api/v3", accessToken, skipVerify)
|
client := client.New(url, "/api/v4", accessToken, skipVerify)
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
remote/gitlab/testdata/testdata.go
vendored
10
remote/gitlab/testdata/testdata.go
vendored
|
@ -15,7 +15,7 @@ func NewServer() *httptest.Server {
|
||||||
//println(r.URL.Path + " " + r.Method)
|
//println(r.URL.Path + " " + r.Method)
|
||||||
// evaluate the path to serve a dummy data file
|
// evaluate the path to serve a dummy data file
|
||||||
switch r.URL.Path {
|
switch r.URL.Path {
|
||||||
case "/api/v3/projects":
|
case "/api/v4/projects":
|
||||||
if r.URL.Query().Get("archived") == "false" {
|
if r.URL.Query().Get("archived") == "false" {
|
||||||
w.Write(notArchivedProjectsPayload)
|
w.Write(notArchivedProjectsPayload)
|
||||||
} else {
|
} else {
|
||||||
|
@ -23,13 +23,13 @@ func NewServer() *httptest.Server {
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
case "/api/v3/projects/diaspora/diaspora-client":
|
case "/api/v4/projects/diaspora/diaspora-client":
|
||||||
w.Write(project4Paylod)
|
w.Write(project4Paylod)
|
||||||
return
|
return
|
||||||
case "/api/v3/projects/brightbox/puppet":
|
case "/api/v4/projects/brightbox/puppet":
|
||||||
w.Write(project6Paylod)
|
w.Write(project6Paylod)
|
||||||
return
|
return
|
||||||
case "/api/v3/projects/diaspora/diaspora-client/services/drone-ci":
|
case "/api/v4/projects/diaspora/diaspora-client/services/drone-ci":
|
||||||
switch r.Method {
|
switch r.Method {
|
||||||
case "PUT":
|
case "PUT":
|
||||||
if r.FormValue("token") == "" {
|
if r.FormValue("token") == "" {
|
||||||
|
@ -45,7 +45,7 @@ func NewServer() *httptest.Server {
|
||||||
case "/oauth/token":
|
case "/oauth/token":
|
||||||
w.Write(accessTokenPayload)
|
w.Write(accessTokenPayload)
|
||||||
return
|
return
|
||||||
case "/api/v3/user":
|
case "/api/v4/user":
|
||||||
w.Write(currentUserPayload)
|
w.Write(currentUserPayload)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue