diff --git a/scraper/go.mod b/scraper/go.mod index c522217..aa864ed 100644 --- a/scraper/go.mod +++ b/scraper/go.mod @@ -5,6 +5,7 @@ go 1.19 require github.com/google/go-github/v51 v51.0.0 require ( + github.com/google/go-cmp v0.5.9 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect github.com/cloudflare/circl v1.1.0 // indirect github.com/golang/protobuf v1.5.2 // indirect diff --git a/scraper/go.sum b/scraper/go.sum index b9b3f21..d328a5c 100644 --- a/scraper/go.sum +++ b/scraper/go.sum @@ -8,10 +8,10 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-github/v51 v51.0.0 h1:KCjsbgPV28VoRftdP+K2mQL16jniUsLAJknsOVKwHyU= -github.com/google/go-github/v51 v51.0.0/go.mod h1:kZj/rn/c1lSUbr/PFWl2hhusPV7a5XNYKcwPrd5L3Us= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/scraper/main.go b/scraper/main.go index 417fd2c..0f4e2da 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} + 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 42b31de..6e6ca9f 100644 --- a/scraper/pkg/github/github.go +++ b/scraper/pkg/github/github.go @@ -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"` +} +