Skip to content

Commit 6fca829

Browse files
authored
Merge pull request #16 from PRODYNA/feature/15-repositories-of-contributors-are-only-listed-once
Attaching mutliple repositories work
2 parents 0730d90 + e6289c6 commit 6fca829

File tree

4 files changed

+54
-10
lines changed

4 files changed

+54
-10
lines changed

action.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ inputs:
2525
default: 1
2626
runs:
2727
using: 'docker'
28-
image: 'docker://ghcr.io/prodyna/github-users:v1.1'
28+
image: 'docker://ghcr.io/prodyna/github-users:v1.2'
2929
env:
3030
ACTION: ${{ inputs.action }}
3131
ENTERPRISE: ${{ inputs.enterprise }}

template/collaborators.tpl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@ Last updated: {{ .Updated }}
66
| ------ | ---- | ------------- | ------------ | ---------- |
77
{{ range $user := .Users }}{{ range $org := $user.Organizations }}{{ range $repo := $org.Repositories }}| {{ $user.Number }} | [{{ $user.Login }}](https://github.com/{{ $user.Login }}) | {{if $user.Contributions}}:green_square:{{else}}:red_square:{{end}} {{ $user.Contributions }} | [{{ $org.Name }}](https://github.com/{{ $org.Login }}) | [{{ $repo.Name }}](https://github.com/{{ $org.Login }}/{{ $repo.Name }}) |
88
{{ end }}{{ end }}{{ end }}
9-
109
---
1110
Generated with :heart: by [github-users](https://github.com/prodyna/github-users)

userlist/collaborators.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,23 +143,32 @@ func (c *UserListConfig) loadCollaborators() error {
143143
slog.DebugContext(ctx, "Processing repository", "repository", repo.Name, "collaborator.count", len(repo.Collaborators.Nodes))
144144
for _, collaborator := range repo.Collaborators.Nodes {
145145
slog.DebugContext(ctx, "Processing collaborator", "login", collaborator.Login, "name", collaborator.Name, "contributions", collaborator.ContributionsCollection.ContributionCalendar.TotalContributions)
146+
147+
// User
146148
user := c.userList.findUser(collaborator.Login)
147149
if user == nil {
148150
user = c.userList.createUser(userNumber+1, collaborator.Login, collaborator.Name, "", collaborator.ContributionsCollection.ContributionCalendar.TotalContributions)
149151
userNumber++
150152
} else {
151153
slog.Info("Found existing user", "login", user.Login)
152154
}
153-
organization := Organization{
154-
Login: org.Login,
155-
Name: org.Name,
156-
Repositories: new([]Repository),
155+
156+
// Organization
157+
organization := user.findOrganization(org.Login)
158+
if organization == nil {
159+
organization = user.createOrganization(org.Login, org.Name)
160+
} else {
161+
slog.Info("Found existing organization", "organization", organization.Name)
157162
}
158-
user.upsertOrganization(organization)
159-
repository := Repository{
160-
Name: repo.Name,
163+
164+
// Repository
165+
repository := organization.findRepository(repo.Name)
166+
if repository == nil {
167+
repository = organization.createRepository(repo.Name)
168+
} else {
169+
slog.Info("Found existing repository", "repository", repository.Name)
161170
}
162-
organization.upsertRepository(repository)
171+
organization.upsertRepository(*repository)
163172
}
164173
}
165174

userlist/userlist.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,39 @@ func (o *Organization) upsertRepository(repo Repository) {
208208
slog.Debug("Upserting repository", "name", repo.Name, "organization", o.Name)
209209
*o.Repositories = append(*o.Repositories, repo)
210210
}
211+
212+
func (u *User) findOrganization(login string) *Organization {
213+
for _, o := range *u.Organizations {
214+
if o.Login == login {
215+
return &o
216+
}
217+
}
218+
return nil
219+
}
220+
221+
func (u *User) createOrganization(login string, name string) *Organization {
222+
org := &Organization{
223+
Login: login,
224+
Name: name,
225+
Repositories: new([]Repository),
226+
}
227+
u.upsertOrganization(*org)
228+
return org
229+
}
230+
231+
func (o *Organization) findRepository(name string) *Repository {
232+
for _, r := range *o.Repositories {
233+
if r.Name == name {
234+
return &r
235+
}
236+
}
237+
return nil
238+
}
239+
240+
func (o *Organization) createRepository(name string) *Repository {
241+
repo := &Repository{
242+
Name: name,
243+
}
244+
o.upsertRepository(*repo)
245+
return repo
246+
}

0 commit comments

Comments
 (0)