Skip to content

Commit 21beff2

Browse files
committed
Consolidate getTeamSlugContext and resolveTeamIDs to use shared logic with getTeam
Signed-off-by: Timo Sand <timo.sand@f-secure.com>
1 parent 101b3b9 commit 21beff2

File tree

2 files changed

+32
-31
lines changed

2 files changed

+32
-31
lines changed

github/resource_github_team_settings.go

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package github
22

33
import (
44
"context"
5-
"errors"
6-
"strconv"
75

86
"github.com/hashicorp/terraform-plugin-log/tflog"
97
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -97,7 +95,7 @@ func resourceGithubTeamSettingsCreate(ctx context.Context, d *schema.ResourceDat
9795
})
9896
// Given a string that is either a team id or team slug, return the
9997
// get the basic details of the team including node_id and slug
100-
nodeId, slug, err := resolveTeamIDs(teamIDString, meta, ctx)
98+
nodeId, slug, err := resolveTeamIDs(ctx, meta, teamIDString)
10199
if err != nil {
102100
return diag.FromErr(err)
103101
}
@@ -291,7 +289,7 @@ func resourceGithubTeamSettingsDelete(ctx context.Context, d *schema.ResourceDat
291289
}
292290

293291
func resourceGithubTeamSettingsImport(ctx context.Context, d *schema.ResourceData, meta any) ([]*schema.ResourceData, error) {
294-
nodeId, slug, err := resolveTeamIDs(d.Id(), meta.(*Owner), ctx)
292+
nodeId, slug, err := resolveTeamIDs(ctx, meta.(*Owner), d.Id())
295293
if err != nil {
296294
return nil, err
297295
}
@@ -308,34 +306,12 @@ func resourceGithubTeamSettingsImport(ctx context.Context, d *schema.ResourceDat
308306
return []*schema.ResourceData{d}, nil
309307
}
310308

311-
func resolveTeamIDs(idOrSlug string, meta *Owner, ctx context.Context) (nodeId, slug string, err error) {
312-
client := meta.v3client
313-
orgName := meta.name
314-
orgId := meta.id
315-
316-
teamId, parseIntErr := strconv.ParseInt(idOrSlug, 10, 64)
317-
if parseIntErr != nil {
318-
// The given id not an integer, assume it is a team slug
319-
team, _, slugErr := client.Teams.GetTeamBySlug(ctx, orgName, idOrSlug)
320-
if slugErr != nil {
321-
return "", "", errors.New(parseIntErr.Error() + slugErr.Error())
322-
}
323-
return team.GetNodeID(), team.GetSlug(), nil
324-
} else {
325-
// The given id is an integer, assume it is a team id
326-
team, _, teamIdErr := client.Teams.GetTeamByID(ctx, orgId, teamId)
327-
if teamIdErr != nil {
328-
// There isn't a team with the given ID, assume it is a teamslug
329-
team, _, slugErr := client.Teams.GetTeamBySlug(ctx, orgName, idOrSlug)
330-
if slugErr != nil {
331-
return "", "", errors.New(teamIdErr.Error() + slugErr.Error())
332-
}
333-
334-
return team.GetNodeID(), team.GetSlug(), nil
335-
}
336-
337-
return team.GetNodeID(), team.GetSlug(), nil
309+
func resolveTeamIDs(ctx context.Context, meta *Owner, idOrSlug string) (nodeId, slug string, err error) {
310+
team, err := getTeam(ctx, meta, idOrSlug)
311+
if err != nil {
312+
return "", "", err
338313
}
314+
return team.GetNodeID(), team.GetSlug(), nil
339315
}
340316

341317
// resolveNotify returns the notify value from the top-level attribute or the

github/util_team.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package github
22

33
import (
44
"context"
5+
"fmt"
56
"strconv"
67

78
"github.com/google/go-github/v84/github"
@@ -150,3 +151,27 @@ func lookupTeamID(ctx context.Context, client *github.Client, orgName, slug stri
150151
}
151152
return team.GetID(), nil
152153
}
154+
155+
// Given a string that is either a team id or team slug, return the
156+
// team object it is referring to.
157+
func getTeam(ctx context.Context, meta *Owner, idOrSlug string) (*github.Team, error) {
158+
client := meta.v3client
159+
orgName := meta.name
160+
orgId := meta.id
161+
162+
if id, ok := parseTeamID(idOrSlug); ok {
163+
// The given id is an integer, assume it is the team ID.
164+
team, _, err := client.Teams.GetTeamByID(ctx, orgId, id)
165+
if err != nil {
166+
return nil, fmt.Errorf("failed to get team by ID (%d): %w", id, err)
167+
}
168+
return team, nil
169+
}
170+
171+
// The given id not an integer, assume it is a team slug
172+
team, _, err := client.Teams.GetTeamBySlug(ctx, orgName, idOrSlug)
173+
if err != nil {
174+
return nil, fmt.Errorf("failed to get team by slug (%s): %w", idOrSlug, err)
175+
}
176+
return team, nil
177+
}

0 commit comments

Comments
 (0)