Skip to content

Commit 3a9d633

Browse files
feat: Add ListTags to Azure (#338)
* feat: Add ListTags to Azure * feat: Add ListTags to Azure. Add linting suggestions
1 parent a515870 commit 3a9d633

File tree

4 files changed

+159
-1
lines changed

4 files changed

+159
-1
lines changed

scm/driver/azure/git.go

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,18 @@ func (s *gitService) ListCommits(ctx context.Context, repo string, opts scm.Comm
9494
}
9595

9696
func (s *gitService) ListTags(ctx context.Context, repo string, opts scm.ListOptions) ([]*scm.Reference, *scm.Response, error) {
97-
return nil, nil, scm.ErrNotSupported
97+
if s.client.project == "" {
98+
return nil, nil, ProjectRequiredError()
99+
}
100+
endpoint := fmt.Sprintf("%s/%s/_apis/git/repositories/%s/refs?", s.client.owner, s.client.project, repo)
101+
// add tags
102+
endpoint += fmt.Sprintf("filter=tags/")
103+
// add target
104+
endpoint += fmt.Sprintf("&api-version=7.1-preview.1")
105+
out := new(tags)
106+
res, err := s.client.do(ctx, "GET", endpoint, nil, &out)
107+
108+
return convertTags(out.Value), res, err
98109
}
99110

100111
func (s *gitService) ListChanges(ctx context.Context, repo, ref string, _ scm.ListOptions) ([]*scm.Change, *scm.Response, error) {
@@ -202,6 +213,29 @@ type compare struct {
202213
TargetCommit string `json:"targetCommit"`
203214
}
204215

216+
type tags struct {
217+
Value []*tag `json:"value"`
218+
Count int `json:"count"`
219+
}
220+
type tag struct {
221+
Name string `json:"name"`
222+
ObjectID string `json:"objectId"`
223+
Creator struct {
224+
DisplayName string `json:"displayName"`
225+
URL string `json:"url"`
226+
Links struct {
227+
Avatar struct {
228+
Href string `json:"href"`
229+
} `json:"avatar"`
230+
} `json:"_links"`
231+
ID string `json:"id"`
232+
UniqueName string `json:"uniqueName"`
233+
ImageURL string `json:"imageUrl"`
234+
Descriptor string `json:"descriptor"`
235+
} `json:"creator"`
236+
URL string `json:"url"`
237+
}
238+
205239
func convertBranchList(from []*branch) []*scm.Reference {
206240
to := []*scm.Reference{}
207241
for _, v := range from {
@@ -269,3 +303,15 @@ func convertChange(from *file) *scm.Change {
269303

270304
return returnVal
271305
}
306+
307+
func convertTags(from []*tag) []*scm.Reference {
308+
var to []*scm.Reference
309+
for _, v := range from {
310+
to = append(to, &scm.Reference{
311+
Name: scm.TrimRef(v.Name),
312+
Path: scm.ExpandRef(v.Name, "refs/tags/"),
313+
Sha: v.ObjectID,
314+
})
315+
}
316+
return to
317+
}

scm/driver/azure/git_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,62 @@ func TestGitCompareChanges(t *testing.T) {
175175
}
176176

177177
}
178+
179+
func TestGitListTags(t *testing.T) {
180+
defer gock.Off()
181+
182+
gock.New("https:/dev.azure.com/").
183+
Get("/ORG/PROJ/_apis/git/repositories/REPOID/").
184+
Reply(200).
185+
Type("application/json").
186+
File("testdata/tags.json")
187+
188+
client := NewDefault("ORG", "PROJ")
189+
got, _, err := client.Git.ListTags(context.Background(), "REPOID", scm.ListOptions{})
190+
if err != nil {
191+
t.Error(err)
192+
return
193+
}
194+
195+
want := []*scm.Reference{}
196+
raw, _ := ioutil.ReadFile("testdata/tags.json.golden")
197+
_ = json.Unmarshal(raw, &want)
198+
199+
if diff := cmp.Diff(got, want); diff != "" {
200+
t.Errorf("Unexpected Results")
201+
t.Log(diff)
202+
}
203+
}
204+
205+
func TestConvertTags(t *testing.T) {
206+
from := []*tag{
207+
{
208+
Name: "refs/tags/v1.0.0",
209+
ObjectID: "23d9c1d0d6c41f1c8e08ab98a6a79c2d5ada649d",
210+
},
211+
{
212+
Name: "refs/tags/v1.1.0",
213+
ObjectID: "8a9db19b5e19613c18e9059d7b9fa5d6d6a3785f",
214+
},
215+
}
216+
217+
got := convertTags(from)
218+
219+
want := []*scm.Reference{
220+
{
221+
Name: "v1.0.0",
222+
Path: "refs/tags/v1.0.0",
223+
Sha: "23d9c1d0d6c41f1c8e08ab98a6a79c2d5ada649d",
224+
},
225+
{
226+
Name: "v1.1.0",
227+
Path: "refs/tags/v1.1.0",
228+
Sha: "8a9db19b5e19613c18e9059d7b9fa5d6d6a3785f",
229+
},
230+
}
231+
232+
if diff := cmp.Diff(got, want); diff != "" {
233+
t.Errorf("Unexpected Results")
234+
t.Log(diff)
235+
}
236+
}

scm/driver/azure/testdata/tags.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"value": [
3+
{
4+
"name": "refs/tags/v1.0.0",
5+
"objectId": "23d9c1d0d6c41f1c8e08ab98a6a79c2d5ada649d",
6+
"creator": {
7+
"displayName": "Test User",
8+
"url": "https://dev.azure.com/fabrikam/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db",
9+
"_links": {
10+
"avatar": {
11+
"href": "https://dev.azure.com/fabrikam/_apis/GraphProfile/MemberAvatars/aad.YTYyNDVmMjAtMmFmOC00NGY0LTk0NTEtODEwN2NiMjc2N2Ri"
12+
}
13+
},
14+
"id": "d6245f20-2af8-44f4-9451-8107cb2767db",
15+
"uniqueName": "[email protected]",
16+
"imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db",
17+
"descriptor": "aad.YTYyNDVmMjAtMmFmOC00NGY0LTk0NTEtODEwN2NiMjc2N2Ri"
18+
},
19+
"url": "https://dev.azure.com/fabrikam/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/refs/tags/v1.0.0"
20+
},
21+
{
22+
"name": "refs/tags/v1.1.0",
23+
"objectId": "8a9db19b5e19613c18e9059d7b9fa5d6d6a3785f",
24+
"creator": {
25+
"displayName": "Test User",
26+
"url": "https://dev.azure.com/fabrikam/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db",
27+
"_links": {
28+
"avatar": {
29+
"href": "https://dev.azure.com/fabrikam/_apis/GraphProfile/MemberAvatars/aad.YTYyNDVmMjAtMmFmOC00NGY0LTk0NTEtODEwN2NiMjc2N2Ri"
30+
}
31+
},
32+
"id": "d6245f20-2af8-44f4-9451-8107cb2767db",
33+
"uniqueName": "[email protected]",
34+
"imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db",
35+
"descriptor": "aad.YTYyNDVmMjAtMmFmOC00NGY0LTk0NTEtODEwN2NiMjc2N2Ri"
36+
},
37+
"url": "https://dev.azure.com/fabrikam/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/refs/tags/v1.1.0"
38+
}
39+
],
40+
"count": 2
41+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"Name": "v1.0.0",
4+
"Path": "refs/tags/v1.0.0",
5+
"Sha": "23d9c1d0d6c41f1c8e08ab98a6a79c2d5ada649d"
6+
},
7+
{
8+
"Name": "v1.1.0",
9+
"Path": "refs/tags/v1.1.0",
10+
"Sha": "8a9db19b5e19613c18e9059d7b9fa5d6d6a3785f"
11+
}
12+
]

0 commit comments

Comments
 (0)