1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package gitlab
18
19 import (
20 "fmt"
21 "net/http"
22 )
23
24
25
26
27
28 type ReleaseLinksService struct {
29 client *Client
30 }
31
32
33
34
35 type ReleaseLink struct {
36 ID int `json:"id"`
37 Name string `json:"name"`
38 URL string `json:"url"`
39 DirectAssetURL string `json:"direct_asset_url"`
40 External bool `json:"external"`
41 LinkType LinkTypeValue `json:"link_type"`
42 }
43
44
45
46
47 type ListReleaseLinksOptions ListOptions
48
49
50
51
52 func (s *ReleaseLinksService) ListReleaseLinks(pid interface{}, tagName string, opt *ListReleaseLinksOptions, options ...RequestOptionFunc) ([]*ReleaseLink, *Response, error) {
53 project, err := parseID(pid)
54 if err != nil {
55 return nil, nil, err
56 }
57 u := fmt.Sprintf("projects/%s/releases/%s/assets/links", PathEscape(project), PathEscape(tagName))
58
59 req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
60 if err != nil {
61 return nil, nil, err
62 }
63
64 var rls []*ReleaseLink
65 resp, err := s.client.Do(req, &rls)
66 if err != nil {
67 return nil, resp, err
68 }
69
70 return rls, resp, nil
71 }
72
73
74
75
76 func (s *ReleaseLinksService) GetReleaseLink(pid interface{}, tagName string, link int, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
77 project, err := parseID(pid)
78 if err != nil {
79 return nil, nil, err
80 }
81 u := fmt.Sprintf("projects/%s/releases/%s/assets/links/%d",
82 PathEscape(project),
83 PathEscape(tagName),
84 link)
85
86 req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
87 if err != nil {
88 return nil, nil, err
89 }
90
91 rl := new(ReleaseLink)
92 resp, err := s.client.Do(req, rl)
93 if err != nil {
94 return nil, resp, err
95 }
96
97 return rl, resp, nil
98 }
99
100
101
102
103 type CreateReleaseLinkOptions struct {
104 Name *string `url:"name,omitempty" json:"name,omitempty"`
105 URL *string `url:"url,omitempty" json:"url,omitempty"`
106 FilePath *string `url:"filepath,omitempty" json:"filepath,omitempty"`
107 LinkType *LinkTypeValue `url:"link_type,omitempty" json:"link_type,omitempty"`
108 }
109
110
111
112
113 func (s *ReleaseLinksService) CreateReleaseLink(pid interface{}, tagName string, opt *CreateReleaseLinkOptions, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
114 project, err := parseID(pid)
115 if err != nil {
116 return nil, nil, err
117 }
118 u := fmt.Sprintf("projects/%s/releases/%s/assets/links", PathEscape(project), PathEscape(tagName))
119
120 req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
121 if err != nil {
122 return nil, nil, err
123 }
124
125 rl := new(ReleaseLink)
126 resp, err := s.client.Do(req, rl)
127 if err != nil {
128 return nil, resp, err
129 }
130
131 return rl, resp, nil
132 }
133
134
135
136
137
138
139 type UpdateReleaseLinkOptions struct {
140 Name *string `url:"name,omitempty" json:"name,omitempty"`
141 URL *string `url:"url,omitempty" json:"url,omitempty"`
142 FilePath *string `url:"filepath,omitempty" json:"filepath,omitempty"`
143 LinkType *LinkTypeValue `url:"link_type,omitempty" json:"link_type,omitempty"`
144 }
145
146
147
148
149 func (s *ReleaseLinksService) UpdateReleaseLink(pid interface{}, tagName string, link int, opt *UpdateReleaseLinkOptions, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
150 project, err := parseID(pid)
151 if err != nil {
152 return nil, nil, err
153 }
154 u := fmt.Sprintf("projects/%s/releases/%s/assets/links/%d",
155 PathEscape(project),
156 PathEscape(tagName),
157 link)
158
159 req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
160 if err != nil {
161 return nil, nil, err
162 }
163
164 rl := new(ReleaseLink)
165 resp, err := s.client.Do(req, rl)
166 if err != nil {
167 return nil, resp, err
168 }
169
170 return rl, resp, nil
171 }
172
173
174
175
176 func (s *ReleaseLinksService) DeleteReleaseLink(pid interface{}, tagName string, link int, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
177 project, err := parseID(pid)
178 if err != nil {
179 return nil, nil, err
180 }
181 u := fmt.Sprintf("projects/%s/releases/%s/assets/links/%d",
182 PathEscape(project),
183 PathEscape(tagName),
184 link,
185 )
186
187 req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
188 if err != nil {
189 return nil, nil, err
190 }
191
192 rl := new(ReleaseLink)
193 resp, err := s.client.Do(req, rl)
194 if err != nil {
195 return nil, resp, err
196 }
197
198 return rl, resp, nil
199 }
200
View as plain text