@@ -57,6 +57,67 @@ func (r *GlobalRepositoryReconciler) EditRepoSettings(ctx context.Context, gr *s
5757 return nil
5858}
5959
60+ // pull - team members can pull, but not push to or administer this repository
61+ // push - team members can pull and push, but not administer this repository
62+ // admin - team members can pull, push and administer this repository
63+ // maintain - team members can manage the repository without access to sensitive or destructive actions.
64+ // triage - team members can proactively manage issues and pull requests without write access.
65+ func (r * GlobalRepositoryReconciler ) EditRepoTeams (ctx context.Context , gr * settingsv1beta1.GlobalRepository , repoName string , reqLogger logr.Logger ) error {
66+ if gr .Spec .RepositoryTeams == nil {
67+ return nil
68+ }
69+
70+ ghClient := gh .Login (ctx )
71+
72+ for _ , adminTeam := range gr .Spec .RepositoryTeams .AdminPermission {
73+ err := addTeamToRepoPerm (ctx , gr , repoName , ghClient , adminTeam , "admin" , reqLogger )
74+ if err != nil {
75+ return fmt .Errorf ("failed to add admin perm for %s to %s" , adminTeam , repoName )
76+ }
77+ }
78+
79+ for _ , pullTeam := range gr .Spec .RepositoryTeams .PullPermission {
80+ err := addTeamToRepoPerm (ctx , gr , repoName , ghClient , pullTeam , "pull" , reqLogger )
81+ if err != nil {
82+ return fmt .Errorf ("failed to add pull perm for %s to %s" , pullTeam , repoName )
83+ }
84+ }
85+
86+ for _ , pushTeam := range gr .Spec .RepositoryTeams .PushPermission {
87+ err := addTeamToRepoPerm (ctx , gr , repoName , ghClient , pushTeam , "push" , reqLogger )
88+ if err != nil {
89+ return fmt .Errorf ("failed to add push perm for %s to %s" , pushTeam , repoName )
90+ }
91+ }
92+
93+ for _ , maintainTeam := range gr .Spec .RepositoryTeams .MaintainPermission {
94+ err := addTeamToRepoPerm (ctx , gr , repoName , ghClient , maintainTeam , "maintain" , reqLogger )
95+ if err != nil {
96+ return fmt .Errorf ("failed to add maintain perm for %s to %s" , maintainTeam , repoName )
97+ }
98+ }
99+
100+ for _ , triageTeam := range gr .Spec .RepositoryTeams .TriagePermission {
101+ err := addTeamToRepoPerm (ctx , gr , repoName , ghClient , triageTeam , "triage" , reqLogger )
102+ if err != nil {
103+ return fmt .Errorf ("failed to add triage perm for %s to %s" , triageTeam , repoName )
104+ }
105+ }
106+
107+ return nil
108+ }
109+
110+ func addTeamToRepoPerm (ctx context.Context , gr * settingsv1beta1.GlobalRepository , repoName string , ghClient * github.Client , team string , perm string , reqLogger logr.Logger ) error {
111+ _ , err := ghClient .Teams .AddTeamRepoBySlug (ctx , gr .Spec .Organization , team , gr .Spec .Organization , repoName , & github.TeamAddTeamRepoOptions {
112+ Permission : perm ,
113+ })
114+ if err != nil {
115+ return fmt .Errorf ("failed to add perm for team for repo: %w" , err )
116+ }
117+ reqLogger .Info ("gave " + team + "" + perm + " permission" )
118+ return nil
119+ }
120+
60121func (r * GlobalRepositoryReconciler ) EditRepoCollaboraters (ctx context.Context , gr * settingsv1beta1.GlobalRepository , repoName string , reqLogger logr.Logger ) error {
61122 ghClient := gh .Login (ctx )
62123
0 commit comments