@@ -32,7 +32,7 @@ class TeamNotFound < RuntimeError; end
3232 ou : String ,
3333 ignore_not_found : C ::Maybe [ C ::Bool ] ,
3434 ] => C ::Any
35- def initialize ( addr : nil , org :, token :, ou :, ignore_not_found : false )
35+ def initialize ( org :, token :, ou :, addr : nil , ignore_not_found : false )
3636 super
3737 Entitlements . cache [ :github_team_members ] ||= { }
3838 Entitlements . cache [ :github_team_members ] [ org_signature ] ||= { }
@@ -107,8 +107,8 @@ def read_team(entitlement_group)
107107 end
108108
109109 maintainers = teamdata [ :members ] . select { |u | teamdata [ :roles ] [ u ] == "maintainer" }
110- team_metadata = team_metadata || { }
111- team_metadata = team_metadata . merge ( { "team_maintainers" => maintainers . any? ? maintainers . join ( "," ) : nil } )
110+ team_metadata ||= { }
111+ team_metadata = team_metadata . merge ( { "team_maintainers" => maintainers . any? ? maintainers . join ( "," ) : nil } )
112112
113113 team = Entitlements ::Backend ::GitHubTeam ::Models ::Team . new (
114114 team_id : teamdata [ :team_id ] ,
@@ -139,7 +139,7 @@ def read_team(entitlement_group)
139139 def from_predictive_cache? ( entitlement_group )
140140 team_identifier = entitlement_group . cn . downcase
141141 read_team ( entitlement_group ) unless @team_cache [ team_identifier ]
142- ( @team_cache [ team_identifier ] && @team_cache [ team_identifier ] [ :cache ] ) ? true : false
142+ @team_cache [ team_identifier ] && @team_cache [ team_identifier ] [ :cache ] ? true : false
143143 end
144144
145145 # Declare the entry to be invalid for a specific team, and if the prior knowledge
@@ -192,7 +192,7 @@ def sync_team(desired_state, current_state)
192192 if desired_metadata [ "parent_team_name" ] . nil?
193193 Entitlements . logger . debug "sync_team(team=#{ current_state . team_name } ): IGNORING GitHub Parent Team DELETE"
194194 else
195- # :nocov:
195+ # :nocov:
196196 Entitlements . logger . debug "sync_team(#{ current_state . team_name } =#{ current_state . team_id } ): Parent team change found - From #{ current_metadata [ "parent_team_name" ] || "No Parent Team" } to #{ desired_metadata [ "parent_team_name" ] } "
197197 desired_parent_team_id = team_by_name ( org_name : org , team_name : desired_metadata [ "parent_team_name" ] ) [ :id ]
198198 unless desired_parent_team_id . nil?
@@ -240,17 +240,20 @@ def sync_team(desired_state, current_state)
240240 Entitlements . logger . debug "sync_team(#{ current_state . team_name } =#{ current_state . team_id } ): Textual change but no semantic change in maintainers. It is remains: #{ current_maintainers . to_a } ."
241241 else
242242 Entitlements . logger . debug "sync_team(#{ current_state . team_name } =#{ current_state . team_id } ): Maintainer members change found - From #{ current_maintainers . to_a } to #{ desired_maintainers . to_a } "
243- added_maintainers . select! { |username | add_user_to_team ( user : username , team : current_state , role : "maintainer" ) }
243+ added_maintainers . select! do |username |
244+ add_user_to_team ( user : username , team : current_state , role : "maintainer" )
245+ end
244246
245247 ## We only touch previous maintainers who are actually still going to be members of the team
246248 removed_maintainers = removed_maintainers . intersection ( desired_team_members )
247249 ## Downgrade membership to default (role: "member")
248- removed_maintainers . select! { |username | add_user_to_team ( user : username , team : current_state , role : "member" ) }
250+ removed_maintainers . select! do |username |
251+ add_user_to_team ( user : username , team : current_state , role : "member" )
252+ end
249253 end
250254 end
251255 end
252256
253-
254257 Entitlements . logger . debug "sync_team(#{ current_state . team_name } =#{ current_state . team_id } ): Added #{ added_members . count } , removed #{ removed_members . count } "
255258 added_members . any? || removed_members . any? || added_maintainers . any? || removed_maintainers . any? || changed_parent_team
256259 end
@@ -264,39 +267,41 @@ def sync_team(desired_state, current_state)
264267 entitlement_group : Entitlements ::Models ::Group ,
265268 ] => C ::Bool
266269 def create_team ( entitlement_group :)
270+ team_name = entitlement_group . cn . downcase
271+ team_options = { name : team_name , repo_names : [ ] , privacy : "closed" }
272+
267273 begin
268- team_name = entitlement_group . cn . downcase
269- team_options = { name : team_name , repo_names : [ ] , privacy : "closed" }
274+ entitlement_metadata = entitlement_group . metadata
275+ unless entitlement_metadata [ "parent_team_name" ] . nil?
270276
271- begin
272- entitlement_metadata = entitlement_group . metadata
273- unless entitlement_metadata [ "parent_team_name" ] . nil?
274-
275- begin
276- parent_team_data = graphql_team_data ( entitlement_metadata [ "parent_team_name" ] )
277- team_options [ :parent_team_id ] = parent_team_data [ :team_id ]
278- rescue TeamNotFound
279- # if the parent team does not exist, create it (think `mkdir -p` logic here)
280- result = octokit . create_team (
281- org ,
282- { name : entitlement_metadata [ "parent_team_name" ] , repo_names : [ ] , privacy : "closed" }
283- )
284- team_options [ :parent_team_id ] = result [ :id ]
285- end
277+ begin
278+ parent_team_data = graphql_team_data ( entitlement_metadata [ "parent_team_name" ] )
279+ team_options [ :parent_team_id ] = parent_team_data [ :team_id ]
280+ rescue TeamNotFound
281+ # if the parent team does not exist, create it (think `mkdir -p` logic here)
282+ result = octokit . create_team (
283+ org ,
284+ { name : entitlement_metadata [ "parent_team_name" ] , repo_names : [ ] , privacy : "closed" }
285+ )
286+
287+ Entitlements . logger . debug "created parent team #{ entitlement_metadata [ "parent_team_name" ] } with id #{ result [ :id ] } "
286288
287- Entitlements . logger . debug "create_team(team= #{ team_name } ) Parent team #{ entitlement_metadata [ "parent_team_name" ] } with id #{ parent_team_data [ :team_id ] } found"
289+ team_options [ :parent_team_id ] = result [ :id ]
288290 end
289- rescue Entitlements ::Models ::Group ::NoMetadata
290- Entitlements . logger . debug "create_team(team=#{ team_name } ) No metadata found"
291- end
292291
293- Entitlements . logger . debug "create_team(team=#{ team_name } )"
294- octokit . create_team ( org , team_options )
295- true
296- rescue Octokit ::UnprocessableEntity => e
297- Entitlements . logger . debug "create_team(team=#{ team_name } ) ERROR - #{ e . message } "
298- false
292+ Entitlements . logger . debug "create_team(team=#{ team_name } ) Parent team #{ entitlement_metadata [ "parent_team_name" ] } with id #{ team_options [ :parent_team_id ] } found"
293+ end
294+ rescue Entitlements ::Models ::Group ::NoMetadata
295+ Entitlements . logger . debug "create_team(team=#{ team_name } ) No metadata found"
299296 end
297+
298+ Entitlements . logger . debug "create_team(team=#{ team_name } )"
299+ result = octokit . create_team ( org , team_options )
300+ Entitlements . logger . debug "created team #{ team_name } with id #{ result [ :id ] } "
301+ true
302+ rescue Octokit ::UnprocessableEntity => e
303+ Entitlements . logger . debug "create_team(team=#{ team_name } ) ERROR - #{ e . message } "
304+ false
300305 end
301306
302307 # Update a team
@@ -309,15 +314,14 @@ def create_team(entitlement_group:)
309314 metadata : C ::Or [ Hash , nil ]
310315 ] => C ::Bool
311316 def update_team ( team :, metadata : { } )
312- begin
313- Entitlements . logger . debug "update_team(team=#{ team . team_name } )"
314- options = { name : team . team_name , repo_names : [ ] , privacy : "closed" , parent_team_id : metadata [ :parent_team_id ] }
315- octokit . update_team ( team . team_id , options )
316- true
317- rescue Octokit ::UnprocessableEntity => e
318- Entitlements . logger . debug "update_team(team=#{ team . team_name } ) ERROR - #{ e . message } "
319- false
320- end
317+ Entitlements . logger . debug "update_team(team=#{ team . team_name } )"
318+ options = { name : team . team_name , repo_names : [ ] , privacy : "closed" ,
319+ parent_team_id : metadata [ :parent_team_id ] }
320+ octokit . update_team ( team . team_id , options )
321+ true
322+ rescue Octokit ::UnprocessableEntity => e
323+ Entitlements . logger . debug "update_team(team=#{ team . team_name } ) ERROR - #{ e . message } "
324+ false
321325 end
322326
323327 # Gets a team by name
@@ -343,7 +347,8 @@ def team_by_name(org_name:, team_name:)
343347 # team_slug - Identifier of the team to retrieve.
344348 #
345349 # Returns a data structure with team data.
346- Contract String => { members : C ::ArrayOf [ String ] , team_id : Integer , parent_team_name : C ::Or [ String , nil ] , roles : C ::HashOf [ String => String ] }
350+ Contract String => { members : C ::ArrayOf [ String ] , team_id : Integer , parent_team_name : C ::Or [ String , nil ] ,
351+ roles : C ::HashOf [ String => String ] }
347352 def graphql_team_data ( team_slug )
348353 cursor = nil
349354 team_id = nil
@@ -381,9 +386,7 @@ def graphql_team_data(team_slug)
381386 end
382387
383388 team = response [ :data ] . fetch ( "data" ) . fetch ( "organization" ) . fetch ( "team" )
384- if team . nil?
385- raise TeamNotFound , "Requested team #{ team_slug } does not exist in #{ org } !"
386- end
389+ raise TeamNotFound , "Requested team #{ team_slug } does not exist in #{ org } !" if team . nil?
387390
388391 team_id = team . fetch ( "databaseId" )
389392 parent_team_name = team . dig ( "parentTeam" , "slug" )
@@ -401,6 +404,7 @@ def graphql_team_data(team_slug)
401404
402405 cursor = edges . last . fetch ( "cursor" )
403406 next if cursor && buffer . size == max_graphql_results
407+
404408 break
405409 end
406410
@@ -426,6 +430,7 @@ def validate_team_id_and_slug!(team_id, team_slug)
426430 team_data [ :slug ]
427431 end
428432 return if @validation_cache [ team_id ] == team_slug
433+
429434 raise "validate_team_id_and_slug! mismatch: team_id=#{ team_id } expected=#{ team_slug . inspect } got=#{ @validation_cache [ team_id ] . inspect } "
430435 end
431436
@@ -443,10 +448,11 @@ def validate_team_id_and_slug!(team_id, team_slug)
443448 ] => C ::Bool
444449 def add_user_to_team ( user :, team :, role : "member" )
445450 return false unless org_members . include? ( user . downcase )
446- unless role == "member" || role == "maintainer"
451+ unless [ "member" , "maintainer" ] . include? ( role )
447452 # :nocov:
448453 raise "add_user_to_team role mismatch: team_id=#{ team . team_id } user=#{ user } expected role=maintainer/member got=#{ role } "
449454 end
455+
450456 Entitlements . logger . debug "#{ identifier } add_user_to_team(user=#{ user } , org=#{ org } , team_id=#{ team . team_id } , role=#{ role } )"
451457 validate_team_id_and_slug! ( team . team_id , team . team_name )
452458
@@ -473,6 +479,7 @@ def add_user_to_team(user:, team:, role: "member")
473479 ] => C ::Bool
474480 def remove_user_from_team ( user :, team :)
475481 return false unless org_members . include? ( user . downcase )
482+
476483 Entitlements . logger . debug "#{ identifier } remove_user_from_team(user=#{ user } , org=#{ org } , team_id=#{ team . team_id } )"
477484 validate_team_id_and_slug! ( team . team_id , team . team_name )
478485 octokit . remove_team_membership ( team . team_id , user )
0 commit comments