Skip to content
Merged
Show file tree
Hide file tree
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
81 changes: 45 additions & 36 deletions github/data_source_github_team.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ import (

"github.com/shurcooL/githubv4"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

func dataSourceGithubTeam() *schema.Resource {
return &schema.Resource{
Read: dataSourceGithubTeamRead,
ReadContext: dataSourceGithubTeamRead,

Schema: map[string]*schema.Schema{
"slug": {
Expand All @@ -33,10 +34,15 @@ func dataSourceGithubTeam() *schema.Resource {
Type: schema.TypeString,
Computed: true,
},
"permission": {
"notification_setting": {
Type: schema.TypeString,
Computed: true,
},
"permission": {
Type: schema.TypeString,
Computed: true,
Deprecated: "Closing down notice.",
},
"members": {
Type: schema.TypeList,
Computed: true,
Expand Down Expand Up @@ -88,30 +94,50 @@ func dataSourceGithubTeam() *schema.Resource {
Optional: true,
Default: 100,
ValidateDiagFunc: toDiagFunc(validation.IntBetween(0, 100), "results_per_page"),
Deprecated: "This is deprecated and will be removed in a future release.",
},
},
}
}

func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
slug := d.Get("slug").(string)

func dataSourceGithubTeamRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
orgId := meta.(*Owner).id
ctx := context.Background()
summaryOnly := d.Get("summary_only").(bool)
resultsPerPage := d.Get("results_per_page").(int)
owner := meta.(*Owner).name

slug := d.Get("slug").(string)

team, _, err := client.Teams.GetTeamBySlug(ctx, meta.(*Owner).name, slug)
if err != nil {
return err
return diag.FromErr(err)
}

d.SetId(strconv.FormatInt(team.GetID(), 10))
if err = d.Set("name", team.GetName()); err != nil {
return diag.FromErr(err)
}
if err = d.Set("description", team.GetDescription()); err != nil {
return diag.FromErr(err)
}
if err = d.Set("privacy", team.GetPrivacy()); err != nil {
return diag.FromErr(err)
}
if err = d.Set("notification_setting", team.GetNotificationSetting()); err != nil {
return diag.FromErr(err)
}
if err = d.Set("permission", team.GetPermission()); err != nil {
return diag.FromErr(err)
}
if err = d.Set("node_id", team.GetNodeID()); err != nil {
return diag.FromErr(err)
}

var members []string
var repositories []string
var repositories_detailed []any

summaryOnly := d.Get("summary_only").(bool)
if !summaryOnly {
resultsPerPage := d.Get("results_per_page").(int)
options := github.TeamListTeamMembersOptions{
ListOptions: github.ListOptions{
PerPage: resultsPerPage,
Expand All @@ -120,9 +146,9 @@ func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {

if d.Get("membership_type").(string) == "all" {
for {
member, resp, err := client.Teams.ListTeamMembersByID(ctx, orgId, team.GetID(), &options)
member, resp, err := client.Teams.ListTeamMembersBySlug(ctx, owner, team.GetSlug(), &options)
if err != nil {
return err
return diag.FromErr(err)
}

for _, v := range member {
Expand Down Expand Up @@ -160,7 +186,7 @@ func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
for {
nameErr := client.Query(ctx, &query, variables)
if nameErr != nil {
return nameErr
return diag.FromErr(nameErr)
}
for _, v := range query.Organization.Team.Members.Nodes {
members = append(members, v.Login)
Expand All @@ -173,12 +199,11 @@ func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
}
}

repositories_detailed = make([]any, 0, resultsPerPage) // removed this from the loop

repositories_detailed = make([]any, 0, resultsPerPage)
for {
repository, resp, err := client.Teams.ListTeamReposByID(ctx, orgId, team.GetID(), &options.ListOptions)
repository, resp, err := client.Teams.ListTeamReposBySlug(ctx, owner, team.GetSlug(), &options.ListOptions)
if err != nil {
return err
return diag.FromErr(err)
}

for _, v := range repository {
Expand All @@ -197,30 +222,14 @@ func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
}
}

d.SetId(strconv.FormatInt(team.GetID(), 10))
if err = d.Set("name", team.GetName()); err != nil {
return err
}
if err = d.Set("members", members); err != nil {
return err
return diag.FromErr(err)
}
if err = d.Set("repositories", repositories); err != nil {
return err
return diag.FromErr(err)
}
if err = d.Set("repositories_detailed", repositories_detailed); err != nil {
return err
}
if err = d.Set("description", team.GetDescription()); err != nil {
return err
}
if err = d.Set("privacy", team.GetPrivacy()); err != nil {
return err
}
if err = d.Set("permission", team.GetPermission()); err != nil {
return err
}
if err = d.Set("node_id", team.GetNodeID()); err != nil {
return err
return diag.FromErr(err)
}

return nil
Expand Down
4 changes: 4 additions & 0 deletions github/data_source_github_team_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ func TestAccGithubTeamDataSource(t *testing.T) {
check := resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttrSet("data.github_team.test", "name"),
resource.TestCheckResourceAttrSet("data.github_team.test", "node_id"),
resource.TestCheckResourceAttrSet("data.github_team.test", "privacy"),
resource.TestCheckResourceAttrSet("data.github_team.test", "notification_setting"),
)

resource.Test(t, resource.TestCase{
Expand Down Expand Up @@ -104,6 +106,8 @@ func TestAccGithubTeamDataSource(t *testing.T) {
check := resource.ComposeAggregateTestCheckFunc(
resource.TestCheckResourceAttrSet("data.github_team.test", "name"),
resource.TestCheckResourceAttrSet("data.github_team.test", "node_id"),
resource.TestCheckResourceAttrSet("data.github_team.test", "privacy"),
resource.TestCheckResourceAttrSet("data.github_team.test", "notification_setting"),
resource.TestCheckResourceAttr("data.github_team.test", "members.#", "0"),
resource.TestCheckResourceAttr("data.github_team.test", "repositories.#", "0"),
)
Expand Down
Loading