/
github.go
113 lines (104 loc) · 2.66 KB
/
github.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
package core
import (
"context"
"github.com/google/go-github/github"
)
type GithubOwner struct {
Login *string
ID *int
Type *string
Name *string
AvatarURL *string
URL *string
Company *string
Blog *string
Location *string
Email *string
Bio *string
}
type GithubRepository struct {
Owner *string
ID *int
Name *string
FullName *string
CloneURL *string
URL *string
DefaultBranch *string
Description *string
Homepage *string
}
func GetUserOrOrganization(login string, client *github.Client) (*GithubOwner, error) {
ctx := context.Background()
user, _, err := client.Users.Get(ctx, login)
if err != nil {
return nil, err
}
return &GithubOwner{
Login: user.Login,
ID: user.ID,
Type: user.Type,
Name: user.Name,
AvatarURL: user.AvatarURL,
URL: user.HTMLURL,
Company: user.Company,
Blog: user.Blog,
Location: user.Location,
Email: user.Email,
Bio: user.Bio,
}, nil
}
func GetRepositoriesFromOwner(login *string, client *github.Client) ([]*GithubRepository, error) {
var allRepos []*GithubRepository
loginVal := *login
ctx := context.Background()
opt := &github.RepositoryListOptions{
Type: "sources",
}
for {
repos, resp, err := client.Repositories.List(ctx, loginVal, opt)
if err != nil {
return allRepos, err
}
for _, repo := range repos {
if !*repo.Fork {
r := GithubRepository{
Owner: repo.Owner.Login,
ID: repo.ID,
Name: repo.Name,
FullName: repo.FullName,
CloneURL: repo.CloneURL,
URL: repo.HTMLURL,
DefaultBranch: repo.DefaultBranch,
Description: repo.Description,
Homepage: repo.Homepage,
}
allRepos = append(allRepos, &r)
}
}
if resp.NextPage == 0 {
break
}
opt.Page = resp.NextPage
}
return allRepos, nil
}
func GetOrganizationMembers(login *string, client *github.Client) ([]*GithubOwner, error) {
var allMembers []*GithubOwner
loginVal := *login
ctx := context.Background()
opt := &github.ListMembersOptions{}
for {
members, resp, err := client.Organizations.ListMembers(ctx, loginVal, opt)
if err != nil {
return allMembers, err
}
for _, member := range members {
allMembers = append(allMembers, &GithubOwner{Login: member.Login, ID: member.ID, Type: member.Type})
}
if resp.NextPage == 0 {
break
}
opt.Page = resp.NextPage
}
return allMembers, nil
}