Skip to content
This repository was archived by the owner on Jan 13, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
220 changes: 129 additions & 91 deletions core/github.go
Original file line number Diff line number Diff line change
@@ -1,113 +1,151 @@
package core

import (
"context"
"context"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did you change the format? Wasn't it gofmt'd?


"github.com/google/go-github/github"
"github.com/google/go-github/github"
)

type GithubOwner struct {
Login *string
ID *int64
Type *string
Name *string
AvatarURL *string
URL *string
Company *string
Blog *string
Location *string
Email *string
Bio *string
Login *string
ID *int64
Type *string
Name *string
AvatarURL *string
URL *string
Company *string
Blog *string
Location *string
Email *string
Bio *string
}

type GithubRepository struct {
Owner *string
ID *int64
Name *string
FullName *string
CloneURL *string
URL *string
DefaultBranch *string
Description *string
Homepage *string
Owner *string
ID *int64
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
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",
}
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
}
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
return allRepos, nil
}

func GetRepositoriesFromOrganization(login *string, client *github.Client) ([]*GithubRepository, error) {
var allRepos []*GithubRepository
loginVal := *login
ctx := context.Background()
opt := &github.RepositoryListByOrgOptions{
Type: "sources",
}

for {
repos, resp, err := client.Repositories.ListByOrg(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.SSHURL,
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
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
}
8 changes: 7 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,18 @@ func GatherRepositories(sess *core.Session) {
for i := 0; i < threadNum; i++ {
go func() {
for {
var repos []*core.GithubRepository
var err error
target, ok := <-ch
if !ok {
wg.Done()
return
}
repos, err := core.GetRepositoriesFromOwner(target.Login, sess.GithubClient)
if *target.Type == "Organization" {
repos, err = core.GetRepositoriesFromOrganization(target.Login, sess.GithubClient)
} else {
repos, err = core.GetRepositoriesFromOwner(target.Login, sess.GithubClient)
}
if err != nil {
sess.Out.Error(" Failed to retrieve repositories from %s: %s\n", *target.Login, err)
}
Expand Down