Skip to content

Commit

Permalink
Merge branch 'atarax:main' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
lado936 authored Nov 27, 2023
2 parents 33a4dfb + 6db84cd commit 31edc66
Showing 1 changed file with 50 additions and 29 deletions.
79 changes: 50 additions & 29 deletions internal/controller/organization/organization.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,42 +204,16 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
return managed.ExternalUpdate{}, err
}

crARepos := getSortedEnabledReposFromCr(cr.Spec.ForProvider.Actions.EnabledRepos)

// To use this function, the organization permission policy for enabled_repositories must be configured to selected, otherwise you get error 409 Conflict
aResp, _, err := gh.Actions.ListEnabledReposInOrg(ctx, name, &github.ListOptions{PerPage: 100})
if err != nil {
return managed.ExternalUpdate{}, err
}

// Extract repository names from the list
aRepos := getSortedRepoNames(aResp.Repositories)

missingReposIds, err := getUpdateRepoIds(ctx, gh, name, crARepos, aRepos)
missingReposIds, toDeleteReposIds, err := getMissingAndToDeleteRepos(ctx, gh, name, cr)
if err != nil {
return managed.ExternalUpdate{}, err
}

for _, missingRepo := range missingReposIds {
_, err := gh.Actions.AddEnabledReposInOrg(ctx, name, missingRepo)
if cr.Spec.ForProvider.Actions.EnabledRepos != nil {
err = updateRepos(ctx, gh, name, missingReposIds, toDeleteReposIds)
if err != nil {
return managed.ExternalUpdate{}, err
}
}

toDeleteReposIds, err := getUpdateRepoIds(ctx, gh, name, aRepos, crARepos)
if err != nil {
return managed.ExternalUpdate{}, err
}

// Disable actions for missing repositories
for _, toDeleteRepo := range toDeleteReposIds {
_, err := gh.Actions.RemoveEnabledRepoInOrg(ctx, name, toDeleteRepo)
if err != nil {
return managed.ExternalUpdate{}, err
}
}

return managed.ExternalUpdate{}, nil
}

Expand Down Expand Up @@ -290,3 +264,50 @@ func getUpdateRepoIds(ctx context.Context, gh *ghclient.Client, org string, crRe
}
return reposIds, nil
}

func getMissingAndToDeleteRepos(ctx context.Context, gh *ghclient.Client, name string, cr *v1alpha1.Organization) ([]int64, []int64, error) {
crARepos := getSortedEnabledReposFromCr(cr.Spec.ForProvider.Actions.EnabledRepos)

// To use this function, the organization permission policy for enabled_repositories must be configured to selected, otherwise you get error 409 Conflict
aResp, _, err := gh.Actions.ListEnabledReposInOrg(ctx, name, &github.ListOptions{PerPage: 100})
if err != nil {
return nil, nil, err
}

// Extract repository names from the list
aRepos := getSortedRepoNames(aResp.Repositories)

missingReposIds, err := getUpdateRepoIds(ctx, gh, name, crARepos, aRepos)
if err != nil {
return nil, nil, err
}

toDeleteReposIds, err := getUpdateRepoIds(ctx, gh, name, aRepos, crARepos)
if err != nil {
return nil, nil, err
}

return missingReposIds, toDeleteReposIds, nil
}

func updateRepos(ctx context.Context, gh *ghclient.Client, name string, missingReposIds []int64, toDeleteReposIds []int64) error {
if len(missingReposIds) > 0 {
for _, missingRepo := range missingReposIds {
_, err := gh.Actions.AddEnabledReposInOrg(ctx, name, missingRepo)
if err != nil {
return err
}
}
}

if len(toDeleteReposIds) > 0 {
for _, toDeleteRepo := range toDeleteReposIds {
_, err := gh.Actions.RemoveEnabledRepoInOrg(ctx, name, toDeleteRepo)
if err != nil {
return err
}
}
}

return nil
}

0 comments on commit 31edc66

Please sign in to comment.