-
Notifications
You must be signed in to change notification settings - Fork 2.8k
/
project.go
154 lines (124 loc) · 3.09 KB
/
project.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package client
import (
"encoding/base64"
"encoding/json"
"strconv"
"strings"
)
const (
projectsUrl = "/projects"
projectUrl = "/projects/:id"
repoUrlRawFileRef = "/projects/:id/repository/files/:filepath"
commitStatusUrl = "/projects/:id/statuses/:sha"
)
// Get a list of all projects owned by the authenticated user.
func (g *Client) AllProjects(hide_archives bool) ([]*Project, error) {
var per_page = 100
var projects []*Project
for i := 1; true; i++ {
contents, err := g.Projects(i, per_page, hide_archives)
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{
"page": strconv.Itoa(page),
"per_page": strconv.Itoa(per_page),
"membership": "true",
}
if hide_archives {
projectsOptions["archived"] = "false"
}
url, opaque := c.ResourceUrl(projectsUrl, nil, projectsOptions)
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
}
func (c *Client) RepoRawFileRef(id, ref, filepath string) ([]byte, error) {
var fileRef FileRef
url, opaque := c.ResourceUrl(
repoUrlRawFileRef,
QMap{
":id": id,
":filepath": filepath,
},
QMap{
"ref": ref,
},
)
contents, err := c.Do("GET", url, opaque, nil)
if err != nil {
return nil, err
}
err = json.Unmarshal(contents, &fileRef)
if err != nil {
return nil, err
}
fileRawContent, err := base64.StdEncoding.DecodeString(fileRef.Content)
return fileRawContent, err
}
//
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
}
// Get a list of projects by query owned by the authenticated user.
func (c *Client) SearchProjectId(namespace string, name string) (id int, err error) {
url, opaque := c.ResourceUrl(projectsUrl, nil, QMap{
"query": strings.ToLower(name),
"membership": "true",
})
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
}