fix(github): project duplicatas
This commit is contained in:
parent
b398bd1601
commit
08cdb44490
@ -41,104 +41,10 @@ func (f *Forge) CreateIssue(ctx context.Context, projectID string, title string,
|
|||||||
func (f *Forge) GetAllProjects(ctx context.Context) ([]*model.Project, error) {
|
func (f *Forge) GetAllProjects(ctx context.Context) ([]*model.Project, error) {
|
||||||
projects := make([]*model.Project, 0)
|
projects := make([]*model.Project, 0)
|
||||||
|
|
||||||
collectUserProjects := func() error {
|
|
||||||
page := 1
|
|
||||||
for {
|
|
||||||
repos, res, err := f.client.Repositories.ListByAuthenticatedUser(ctx, &github.RepositoryListByAuthenticatedUserOptions{
|
|
||||||
Type: "all",
|
|
||||||
ListOptions: github.ListOptions{
|
|
||||||
Page: page,
|
|
||||||
PerPage: 100,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
if res.StatusCode == http.StatusForbidden || res.StatusCode == http.StatusUnauthorized {
|
|
||||||
slog.ErrorContext(ctx, "could not retrieve user repositories", slog.Any("error", errors.WithStack(err)))
|
|
||||||
return errors.WithStack(service.ErrForgeNotAvailable)
|
|
||||||
}
|
|
||||||
|
|
||||||
return errors.WithStack(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, r := range repos {
|
|
||||||
if r.ID == nil || r.FullName == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var projectDescription string
|
|
||||||
if r.Description != nil {
|
|
||||||
projectDescription = *r.Description
|
|
||||||
}
|
|
||||||
|
|
||||||
projects = append(projects, &model.Project{
|
|
||||||
ID: strconv.FormatInt(*r.ID, 10),
|
|
||||||
Name: *r.FullName,
|
|
||||||
Description: projectDescription,
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.NextPage == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
page = res.NextPage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
collectOrgProjects := func(owner string) error {
|
|
||||||
page := 1
|
|
||||||
for {
|
|
||||||
repos, res, err := f.client.Repositories.ListByOrg(ctx, owner, &github.RepositoryListByOrgOptions{
|
|
||||||
Type: "all",
|
|
||||||
ListOptions: github.ListOptions{
|
|
||||||
Page: page,
|
|
||||||
PerPage: 100,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
if res.StatusCode == http.StatusForbidden || res.StatusCode == http.StatusUnauthorized {
|
|
||||||
slog.ErrorContext(ctx, "could not retrieve org repositories", slog.String("org", owner), slog.Any("error", errors.WithStack(err)))
|
|
||||||
return errors.WithStack(service.ErrForgeNotAvailable)
|
|
||||||
}
|
|
||||||
|
|
||||||
return errors.WithStack(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, r := range repos {
|
|
||||||
if r.ID == nil || r.FullName == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var projectDescription string
|
|
||||||
if r.Description != nil {
|
|
||||||
projectDescription = *r.Description
|
|
||||||
}
|
|
||||||
|
|
||||||
projects = append(projects, &model.Project{
|
|
||||||
ID: strconv.FormatInt(*r.ID, 10),
|
|
||||||
Name: *r.FullName,
|
|
||||||
Description: projectDescription,
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if res.NextPage == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
page = res.NextPage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := collectUserProjects(); err != nil {
|
|
||||||
return nil, errors.WithStack(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
page := 1
|
page := 1
|
||||||
for {
|
for {
|
||||||
orgs, res, err := f.client.Organizations.ListOrgMemberships(ctx, &github.ListOrgMembershipsOptions{
|
repos, res, err := f.client.Repositories.ListByAuthenticatedUser(ctx, &github.RepositoryListByAuthenticatedUserOptions{
|
||||||
State: "active",
|
Type: "all",
|
||||||
ListOptions: github.ListOptions{
|
ListOptions: github.ListOptions{
|
||||||
Page: page,
|
Page: page,
|
||||||
PerPage: 100,
|
PerPage: 100,
|
||||||
@ -146,27 +52,37 @@ func (f *Forge) GetAllProjects(ctx context.Context) ([]*model.Project, error) {
|
|||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if res.StatusCode == http.StatusForbidden || res.StatusCode == http.StatusUnauthorized {
|
if res.StatusCode == http.StatusForbidden || res.StatusCode == http.StatusUnauthorized {
|
||||||
slog.ErrorContext(ctx, "could not retrieve user organizations", slog.Any("error", errors.WithStack(err)))
|
slog.ErrorContext(ctx, "could not retrieve user repositories", slog.Any("error", errors.WithStack(err)))
|
||||||
return nil, errors.WithStack(service.ErrForgeNotAvailable)
|
return nil, errors.WithStack(service.ErrForgeNotAvailable)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.WithStack(err)
|
return nil, errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, o := range orgs {
|
for _, r := range repos {
|
||||||
if err := collectOrgProjects(*o.Organization.Login); err != nil {
|
if r.ID == nil || r.FullName == nil {
|
||||||
return nil, errors.WithStack(err)
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var projectDescription string
|
||||||
|
if r.Description != nil {
|
||||||
|
projectDescription = *r.Description
|
||||||
|
}
|
||||||
|
|
||||||
|
projects = append(projects, &model.Project{
|
||||||
|
ID: strconv.FormatInt(*r.ID, 10),
|
||||||
|
Name: *r.FullName,
|
||||||
|
Description: projectDescription,
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if res.NextPage == 0 {
|
if res.NextPage == 0 {
|
||||||
break
|
return projects, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
page = res.NextPage
|
page = res.NextPage
|
||||||
}
|
}
|
||||||
|
|
||||||
return projects, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFile implements port.Forge.
|
// GetFile implements port.Forge.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user