woodpecker/remote/gitlab/client/project.go

169 lines
3.7 KiB
Go
Raw Normal View History

2018-02-19 22:24:10 +00:00
// Copyright 2018 Drone.IO Inc.
2018-03-21 13:02:17 +00:00
//
2018-02-19 22:24:10 +00:00
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
2018-03-21 13:02:17 +00:00
//
2018-02-19 22:24:10 +00:00
// http://www.apache.org/licenses/LICENSE-2.0
2018-03-21 13:02:17 +00:00
//
2018-02-19 22:24:10 +00:00
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2015-12-12 12:20:01 +00:00
package client
import (
2017-08-10 06:24:35 +00:00
"encoding/base64"
2015-12-12 12:20:01 +00:00
"encoding/json"
"strconv"
"strings"
)
const (
2017-03-18 11:25:53 +00:00
projectsUrl = "/projects"
projectUrl = "/projects/:id"
2017-08-10 06:24:35 +00:00
repoUrlRawFileRef = "/projects/:id/repository/files/:filepath"
2017-03-18 11:25:53 +00:00
commitStatusUrl = "/projects/:id/statuses/:sha"
2015-12-12 12:20:01 +00:00
)
// Get a list of all projects owned by the authenticated user.
func (g *Client) AllProjects(hide_archives bool) ([]*Project, error) {
2015-12-12 12:20:01 +00:00
var per_page = 100
var projects []*Project
for i := 1; true; i++ {
contents, err := g.Projects(i, per_page, hide_archives)
2015-12-12 12:20:01 +00:00
if err != nil {
return projects, err
}
for _, value := range contents {
projects = append(projects, value)
}
if len(projects) == 0 {
break
}
if len(projects)/i < per_page {
break
}
}
return projects, nil
}
// Get a list of projects owned by the authenticated user.
func (c *Client) Projects(page int, per_page int, hide_archives bool) ([]*Project, error) {
projectsOptions := QMap{
2018-03-21 13:02:17 +00:00
"page": strconv.Itoa(page),
"per_page": strconv.Itoa(per_page),
2017-08-10 06:24:35 +00:00
"membership": "true",
}
if hide_archives {
projectsOptions["archived"] = "false"
}
url, opaque := c.ResourceUrl(projectsUrl, nil, projectsOptions)
2015-12-12 12:20:01 +00:00
var projects []*Project
contents, err := c.Do("GET", url, opaque, nil)
if err == nil {
err = json.Unmarshal(contents, &projects)
}
return projects, err
}
// Get a project by id
func (c *Client) Project(id string) (*Project, error) {
url, opaque := c.ResourceUrl(projectUrl, QMap{":id": id}, nil)
var project *Project
contents, err := c.Do("GET", url, opaque, nil)
if err == nil {
err = json.Unmarshal(contents, &project)
}
return project, err
}
2017-03-18 11:25:53 +00:00
func (c *Client) RepoRawFileRef(id, ref, filepath string) ([]byte, error) {
2017-08-10 06:24:35 +00:00
var fileRef FileRef
2017-03-18 11:25:53 +00:00
url, opaque := c.ResourceUrl(
repoUrlRawFileRef,
QMap{
2017-08-10 06:24:35 +00:00
":id": id,
":filepath": filepath,
2017-03-18 11:25:53 +00:00
},
QMap{
2017-08-10 06:24:35 +00:00
"ref": ref,
2017-03-18 11:25:53 +00:00
},
)
contents, err := c.Do("GET", url, opaque, nil)
2017-08-10 06:24:35 +00:00
if err != nil {
return nil, err
}
err = json.Unmarshal(contents, &fileRef)
if err != nil {
return nil, err
}
2015-12-12 12:20:01 +00:00
2017-08-10 06:24:35 +00:00
fileRawContent, err := base64.StdEncoding.DecodeString(fileRef.Content)
return fileRawContent, err
2015-12-12 12:20:01 +00:00
}
2015-12-12 17:09:59 +00:00
//
func (c *Client) SetStatus(id, sha, state, desc, ref, link string) error {
url, opaque := c.ResourceUrl(
commitStatusUrl,
QMap{
":id": id,
":sha": sha,
},
QMap{
"state": state,
"ref": ref,
"target_url": link,
"description": desc,
"context": "ci/drone",
},
)
_, err := c.Do("POST", url, opaque, nil)
return err
}
2015-12-12 12:20:01 +00:00
// Get a list of projects by query owned by the authenticated user.
func (c *Client) SearchProjectId(namespace string, name string) (id int, err error) {
2017-08-10 06:24:35 +00:00
url, opaque := c.ResourceUrl(projectsUrl, nil, QMap{
2018-03-21 13:02:17 +00:00
"query": strings.ToLower(name),
2017-08-10 06:24:35 +00:00
"membership": "true",
2015-12-12 12:20:01 +00:00
})
var projects []*Project
contents, err := c.Do("GET", url, opaque, nil)
if err == nil {
err = json.Unmarshal(contents, &projects)
} else {
return id, err
}
for _, project := range projects {
if project.Namespace.Name == namespace && strings.ToLower(project.Name) == strings.ToLower(name) {
id = project.Id
}
}
return id, err
}