diff --git a/scraper/main.go b/scraper/main.go index 417fd2c..9f77745 100644 --- a/scraper/main.go +++ b/scraper/main.go @@ -15,6 +15,7 @@ const ( repositoriesFile = "../public/repositories.json" ignoredTopicsFile = "../public/ignored-topics.json" ignoreRepositoriesFile = "../public/ignored-repositories.json" + topContributorsCount = 3 ) var ( @@ -69,6 +70,7 @@ func main() { loadConfiguration() var repoData types.RepoData + var contactData []types.Contact ir := *ignoredRepositories for _, o := range *sOrgs { ghrepos := github.GitHubRepositories(ctx, o) @@ -88,8 +90,17 @@ func main() { } if !ignored { topics := r.Topics - repo := types.Repo{Org: r.Owner.GetLogin(), Name: r.GetName(), URL: r.GetHTMLURL(), Description: r.GetDescription(), Labels: topics} - repoData.Repos = append(repoData.Repos, repo) + contributors := github.ListContrib(ctx, r.Owner.GetLogin(), r.GetName()) + for n, contributor := range contributors { + if n > topContributorsCount-1 { + break + } + contacts := types.Contact{Username: *contributor.Login, URL: *contributor.HTMLURL} + contactData = append(contactData, contacts) + } + repo := types.Repo{Org: r.Owner.GetLogin(), Name: r.GetName(), URL: r.GetHTMLURL(), Description: r.GetDescription(), Labels: topics, Contacts: contactData} + repoData.Repos = append(repoData.Repos, repo) + } } } @@ -98,5 +109,6 @@ func main() { if err != nil { log.Fatalf("Error marshaling Repositories: %s", err) } +// fmt.Println(repoData.Repos) os.WriteFile(repositoriesFile, reposJson, 0666) } diff --git a/scraper/pkg/github/github.go b/scraper/pkg/github/github.go index 2ddc51c..6e6ca9f 100644 --- a/scraper/pkg/github/github.go +++ b/scraper/pkg/github/github.go @@ -4,7 +4,7 @@ import ( "context" "log" - "github.com/google/go-github/github" + "github.com/google/go-github/v51/github" ) func GitHubRepositories(ctx context.Context, org string) []*github.Repository { @@ -16,3 +16,14 @@ func GitHubRepositories(ctx context.Context, org string) []*github.Repository { } return ghrepos } + +func ListContrib(ctx context.Context, org string, repository string) []*github.Contributor { + //Using Unauthenticated client + client := github.NewClient(nil) + opts := &github.ListContributorsOptions{Anon: "false"} + contributors, _, err := client.Repositories.ListContributors(ctx, org, repository, opts) + if err != nil { + log.Fatalf("Error getting contributors: %s", err) + } + return contributors +} diff --git a/scraper/pkg/types/repodata.go b/scraper/pkg/types/repodata.go index ebad3e9..b00d1eb 100644 --- a/scraper/pkg/types/repodata.go +++ b/scraper/pkg/types/repodata.go @@ -1,13 +1,24 @@ package types type Repo struct { - Org string `json:"org"` - Name string `json:"name"` - Description string `json:"description"` - URL string `json:"url"` - Labels []string `json:"labels"` + Org string `json:"org"` + Name string `json:"name"` + Description string `json:"description"` + URL string `json:"url"` + Labels []string `json:"labels"` + Contacts []Contact `json:"contacts"` } type RepoData struct { Repos []Repo `json:"repos"` } + +type Contact struct { + Username string `json:"username"` + URL string `json:"htmlurl"` +} + +type ContactData struct { + Contacts []Contact `json:"contact"` +} +