Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 30 additions & 11 deletions github/resource_github_team_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ func resourceGithubTeamSettings() *schema.Resource {
Default: false,
Description: "whether to notify the entire team when at least one member is also assigned to the pull request.",
},
// TODO: The underlying graphql call is using memberIds. Might be better UX to use usernames, or add both as an option...
"excluded_team_member_node_ids": {
Type: schema.TypeSet,
Optional: true,
Description: "A list of users to exclude from the PR review process",
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
},
},
Expand Down Expand Up @@ -152,6 +161,7 @@ func resourceGithubTeamSettingsRead(d *schema.ResourceData, meta interface{}) er
return err
}
}
// TODO: The exlusion list is not available via the GraphQL call yet (https://docs.github.com/en/enterprise-cloud@latest/graphql/overview/schema-previews#team-review-assignments-preview). Leaving that for future implementation

return nil

Expand Down Expand Up @@ -179,12 +189,20 @@ func resourceGithubTeamSettingsUpdate(d *schema.ResourceData, meta interface{})
} `graphql:"updateTeamReviewAssignment(input:$input)"`
}

exclusionList := make([]string, 0)
for _, v := range settings["excluded_team_member_node_ids"].(*schema.Set).List() {
if v != nil {
exclusionList = append(exclusionList, v.(string))
}
}

return graphql.Mutate(ctx, &mutation, UpdateTeamReviewAssignmentInput{
TeamID: d.Id(),
ReviewRequestDelegation: true,
ReviewRequestDelegationAlgorithm: settings["algorithm"].(string),
ReviewRequestDelegationCount: settings["member_count"].(int),
ReviewRequestDelegationNotifyAll: settings["notify"].(bool),
TeamID: d.Id(),
ReviewRequestDelegation: true,
ReviewRequestDelegationAlgorithm: settings["algorithm"].(string),
ReviewRequestDelegationCount: settings["member_count"].(int),
ReviewRequestDelegationNotifyAll: settings["notify"].(bool),
ReviewRequestexcludedTeamMemberIds: exclusionList,
}, nil)
}
}
Expand Down Expand Up @@ -256,12 +274,13 @@ func resolveTeamIDs(idOrSlug string, meta *Owner, ctx context.Context) (nodeId s
}

type UpdateTeamReviewAssignmentInput struct {
ClientMutationID string `json:"clientMutationId,omitempty"`
TeamID string `graphql:"id" json:"id"`
ReviewRequestDelegation bool `graphql:"enabled" json:"enabled"`
ReviewRequestDelegationAlgorithm string `graphql:"algorithm" json:"algorithm"`
ReviewRequestDelegationCount int `graphql:"teamMemberCount" json:"teamMemberCount"`
ReviewRequestDelegationNotifyAll bool `graphql:"notifyTeam" json:"notifyTeam"`
ClientMutationID string `json:"clientMutationId,omitempty"`
TeamID string `graphql:"id" json:"id"`
ReviewRequestDelegation bool `graphql:"enabled" json:"enabled"`
ReviewRequestDelegationAlgorithm string `graphql:"algorithm" json:"algorithm"`
ReviewRequestDelegationCount int `graphql:"teamMemberCount" json:"teamMemberCount"`
ReviewRequestDelegationNotifyAll bool `graphql:"notifyTeam" json:"notifyTeam"`
ReviewRequestexcludedTeamMemberIds []string `graphql:"excludedTeamMemberIds" json:"excludedTeamMemberIds"`
}

func defaultTeamReviewAssignmentSettings(id string) UpdateTeamReviewAssignmentInput {
Expand Down