From 6cf558e9b870796dec424ab1b1df6008b30c2731 Mon Sep 17 00:00:00 2001 From: Gerrit Date: Tue, 9 Jan 2024 11:53:48 +0100 Subject: [PATCH] Allow specifying additional team memberships when repo gets created. --- pkg/config/actions.go | 6 ++- .../github/actions/repository_maintainers.go | 41 ++++++++++++++++--- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/pkg/config/actions.go b/pkg/config/actions.go index a03ffae..8f5a73b 100644 --- a/pkg/config/actions.go +++ b/pkg/config/actions.go @@ -8,7 +8,11 @@ type WebhookAction struct { Args map[string]any `json:"args" description:"action configuration"` } type RepositoryMaintainersConfig struct { - Suffix *string `mapstructure:"suffix" description:"suffix for maintainers group"` + Suffix *string `mapstructure:"suffix" description:"suffix for maintainers group"` + AdditionalMemberships []struct { + TeamSlug string `mapstructure:"team" description:"the slug of the team"` + Permission string `mapstructure:"permission" description:"the permission for the team, must be one of "` + } `mapstructure:"additional-teams" description:"adds additional teams to this repository"` } type DocsPreviewCommentConfig struct { diff --git a/pkg/webhooks/github/actions/repository_maintainers.go b/pkg/webhooks/github/actions/repository_maintainers.go index 7bccdba..b7d171c 100644 --- a/pkg/webhooks/github/actions/repository_maintainers.go +++ b/pkg/webhooks/github/actions/repository_maintainers.go @@ -13,9 +13,17 @@ import ( ) type repositoryMaintainers struct { - logger *zap.SugaredLogger - client *clients.Github - suffix string + logger *zap.SugaredLogger + client *clients.Github + suffix string + additionalTeams repositoryAdditionalMemberships +} + +type repositoryAdditionalMemberships []repositoryAdditionalMembership + +type repositoryAdditionalMembership struct { + teamSlug string + permission string } type repositoryMaintainersParams struct { @@ -38,10 +46,20 @@ func newCreateRepositoryMaintainers(logger *zap.SugaredLogger, client *clients.G suffix = *typedConfig.Suffix } + var additionalTeams repositoryAdditionalMemberships + for _, team := range typedConfig.AdditionalMemberships { + team := team + additionalTeams = append(additionalTeams, repositoryAdditionalMembership{ + teamSlug: team.TeamSlug, + permission: team.Permission, + }) + } + return &repositoryMaintainers{ - logger: logger, - client: client, - suffix: suffix, + logger: logger, + client: client, + suffix: suffix, + additionalTeams: additionalTeams, }, nil } @@ -67,5 +85,16 @@ func (r *repositoryMaintainers) CreateRepositoryMaintainers(ctx context.Context, r.logger.Infow("created new maintainers team for repository", "repository", p.RepositoryName, "team", name) } + for _, additionalTeam := range r.additionalTeams { + additionalTeam := additionalTeam + + _, err := r.client.GetV3Client().Teams.AddTeamRepoBySlug(ctx, r.client.Organization(), additionalTeam.teamSlug, r.client.Organization(), p.RepositoryName, &v3.TeamAddTeamRepoOptions{ + Permission: additionalTeam.permission, + }) + if err != nil { + return fmt.Errorf("error adding additional team membership: %w", err) + } + } + return nil }