Skip to content

Commit ae4de2c

Browse files
committed
feat: Add team notification settings
Signed-off-by: Steve Hipwell <steve.hipwell@gmail.com>
1 parent c2a1941 commit ae4de2c

File tree

6 files changed

+290
-202
lines changed

6 files changed

+290
-202
lines changed

github/data_source_github_team.go

Lines changed: 45 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ import (
88

99
"github.com/shurcooL/githubv4"
1010

11+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1213
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1314
)
1415

1516
func dataSourceGithubTeam() *schema.Resource {
1617
return &schema.Resource{
17-
Read: dataSourceGithubTeamRead,
18+
ReadContext: dataSourceGithubTeamRead,
1819

1920
Schema: map[string]*schema.Schema{
2021
"slug": {
@@ -33,10 +34,15 @@ func dataSourceGithubTeam() *schema.Resource {
3334
Type: schema.TypeString,
3435
Computed: true,
3536
},
36-
"permission": {
37+
"notification_setting": {
3738
Type: schema.TypeString,
3839
Computed: true,
3940
},
41+
"permission": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
Deprecated: "Closing down notice.",
45+
},
4046
"members": {
4147
Type: schema.TypeList,
4248
Computed: true,
@@ -88,30 +94,50 @@ func dataSourceGithubTeam() *schema.Resource {
8894
Optional: true,
8995
Default: 100,
9096
ValidateDiagFunc: toDiagFunc(validation.IntBetween(0, 100), "results_per_page"),
97+
Deprecated: "This is deprecated and will be removed in a future release.",
9198
},
9299
},
93100
}
94101
}
95102

96-
func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
97-
slug := d.Get("slug").(string)
98-
103+
func dataSourceGithubTeamRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
99104
client := meta.(*Owner).v3client
100-
orgId := meta.(*Owner).id
101-
ctx := context.Background()
102-
summaryOnly := d.Get("summary_only").(bool)
103-
resultsPerPage := d.Get("results_per_page").(int)
105+
owner := meta.(*Owner).name
106+
107+
slug := d.Get("slug").(string)
104108

105109
team, _, err := client.Teams.GetTeamBySlug(ctx, meta.(*Owner).name, slug)
106110
if err != nil {
107-
return err
111+
return diag.FromErr(err)
112+
}
113+
114+
d.SetId(strconv.FormatInt(team.GetID(), 10))
115+
if err = d.Set("name", team.GetName()); err != nil {
116+
return diag.FromErr(err)
117+
}
118+
if err = d.Set("description", team.GetDescription()); err != nil {
119+
return diag.FromErr(err)
120+
}
121+
if err = d.Set("privacy", team.GetPrivacy()); err != nil {
122+
return diag.FromErr(err)
123+
}
124+
if err = d.Set("notification_setting", team.GetNotificationSetting()); err != nil {
125+
return diag.FromErr(err)
126+
}
127+
if err = d.Set("permission", team.GetPermission()); err != nil {
128+
return diag.FromErr(err)
129+
}
130+
if err = d.Set("node_id", team.GetNodeID()); err != nil {
131+
return diag.FromErr(err)
108132
}
109133

110134
var members []string
111135
var repositories []string
112136
var repositories_detailed []any
113137

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

121147
if d.Get("membership_type").(string) == "all" {
122148
for {
123-
member, resp, err := client.Teams.ListTeamMembersByID(ctx, orgId, team.GetID(), &options)
149+
member, resp, err := client.Teams.ListTeamMembersBySlug(ctx, owner, team.GetSlug(), &options)
124150
if err != nil {
125-
return err
151+
return diag.FromErr(err)
126152
}
127153

128154
for _, v := range member {
@@ -160,7 +186,7 @@ func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
160186
for {
161187
nameErr := client.Query(ctx, &query, variables)
162188
if nameErr != nil {
163-
return nameErr
189+
return diag.FromErr(nameErr)
164190
}
165191
for _, v := range query.Organization.Team.Members.Nodes {
166192
members = append(members, v.Login)
@@ -173,12 +199,11 @@ func dataSourceGithubTeamRead(d *schema.ResourceData, meta any) error {
173199
}
174200
}
175201

176-
repositories_detailed = make([]any, 0, resultsPerPage) // removed this from the loop
177-
202+
repositories_detailed = make([]any, 0, resultsPerPage)
178203
for {
179-
repository, resp, err := client.Teams.ListTeamReposByID(ctx, orgId, team.GetID(), &options.ListOptions)
204+
repository, resp, err := client.Teams.ListTeamReposBySlug(ctx, owner, team.GetSlug(), &options.ListOptions)
180205
if err != nil {
181-
return err
206+
return diag.FromErr(err)
182207
}
183208

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

200-
d.SetId(strconv.FormatInt(team.GetID(), 10))
201-
if err = d.Set("name", team.GetName()); err != nil {
202-
return err
203-
}
204225
if err = d.Set("members", members); err != nil {
205-
return err
226+
return diag.FromErr(err)
206227
}
207228
if err = d.Set("repositories", repositories); err != nil {
208-
return err
229+
return diag.FromErr(err)
209230
}
210231
if err = d.Set("repositories_detailed", repositories_detailed); err != nil {
211-
return err
212-
}
213-
if err = d.Set("description", team.GetDescription()); err != nil {
214-
return err
215-
}
216-
if err = d.Set("privacy", team.GetPrivacy()); err != nil {
217-
return err
218-
}
219-
if err = d.Set("permission", team.GetPermission()); err != nil {
220-
return err
221-
}
222-
if err = d.Set("node_id", team.GetNodeID()); err != nil {
223-
return err
232+
return diag.FromErr(err)
224233
}
225234

226235
return nil

github/data_source_github_team_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ func TestAccGithubTeamDataSource(t *testing.T) {
2525
check := resource.ComposeAggregateTestCheckFunc(
2626
resource.TestCheckResourceAttrSet("data.github_team.test", "name"),
2727
resource.TestCheckResourceAttrSet("data.github_team.test", "node_id"),
28+
resource.TestCheckResourceAttrSet("data.github_team.test", "privacy"),
29+
resource.TestCheckResourceAttrSet("data.github_team.test", "notification_setting"),
2830
)
2931

3032
resource.Test(t, resource.TestCase{
@@ -104,6 +106,8 @@ func TestAccGithubTeamDataSource(t *testing.T) {
104106
check := resource.ComposeAggregateTestCheckFunc(
105107
resource.TestCheckResourceAttrSet("data.github_team.test", "name"),
106108
resource.TestCheckResourceAttrSet("data.github_team.test", "node_id"),
109+
resource.TestCheckResourceAttrSet("data.github_team.test", "privacy"),
110+
resource.TestCheckResourceAttrSet("data.github_team.test", "notification_setting"),
107111
resource.TestCheckResourceAttr("data.github_team.test", "members.#", "0"),
108112
resource.TestCheckResourceAttr("data.github_team.test", "repositories.#", "0"),
109113
)

0 commit comments

Comments
 (0)