这是indexloc提供的服务,不要输入任何密码
Skip to content

Fix inconsistent team_id in project_deployment_retention resource #323

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 13, 2025
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
44 changes: 29 additions & 15 deletions client/project_deployment_retention.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ type UpdateDeploymentRetentionRequest struct {
TeamID string
}

type DeploymentExpirationResponse struct {
DeploymentExpiration
TeamID string `json:"-"`
}

// DeleteDeploymentRetention will remove any existing deployment retention for a given project.
func (c *Client) DeleteDeploymentRetention(ctx context.Context, projectID, teamID string) error {
url := fmt.Sprintf("%s/v9/projects/%s/deployment-expiration", c.baseURL, projectID)
Expand Down Expand Up @@ -77,17 +82,20 @@ var DeploymentRetentionStringToDays = map[string]int{
"unlimited": 36500,
}

func (d deploymentExpirationResponse) toDeploymentExpiration() DeploymentExpiration {
return DeploymentExpiration{
ExpirationPreview: DeploymentRetentionStringToDays[d.DeploymentExpiration.Expiration],
ExpirationProduction: DeploymentRetentionStringToDays[d.DeploymentExpiration.ExpirationProduction],
ExpirationCanceled: DeploymentRetentionStringToDays[d.DeploymentExpiration.ExpirationCanceled],
ExpirationErrored: DeploymentRetentionStringToDays[d.DeploymentExpiration.ExpirationErrored],
func (d deploymentExpirationResponse) toDeploymentExpirationResponse(teamID string) DeploymentExpirationResponse {
return DeploymentExpirationResponse{
DeploymentExpiration: DeploymentExpiration{
ExpirationPreview: DeploymentRetentionStringToDays[d.DeploymentExpiration.Expiration],
ExpirationProduction: DeploymentRetentionStringToDays[d.DeploymentExpiration.ExpirationProduction],
ExpirationCanceled: DeploymentRetentionStringToDays[d.DeploymentExpiration.ExpirationCanceled],
ExpirationErrored: DeploymentRetentionStringToDays[d.DeploymentExpiration.ExpirationErrored],
},
TeamID: teamID,
}
}

// UpdateDeploymentRetention will update an existing deployment retention to the latest information.
func (c *Client) UpdateDeploymentRetention(ctx context.Context, request UpdateDeploymentRetentionRequest) (DeploymentExpiration, error) {
func (c *Client) UpdateDeploymentRetention(ctx context.Context, request UpdateDeploymentRetentionRequest) (DeploymentExpirationResponse, error) {
url := fmt.Sprintf("%s/v9/projects/%s/deployment-expiration", c.baseURL, request.ProjectID)
if c.teamID(request.TeamID) != "" {
url = fmt.Sprintf("%s?teamId=%s", url, c.teamID(request.TeamID))
Expand All @@ -105,11 +113,11 @@ func (c *Client) UpdateDeploymentRetention(ctx context.Context, request UpdateDe
url: url,
body: payload,
}, &d)
return d.toDeploymentExpiration(), err
return d.toDeploymentExpirationResponse(c.teamID(request.TeamID)), err
}

// GetDeploymentRetention returns the deployment retention for a given project.
func (c *Client) GetDeploymentRetention(ctx context.Context, projectID, teamID string) (d DeploymentExpiration, err error) {
func (c *Client) GetDeploymentRetention(ctx context.Context, projectID, teamID string) (d DeploymentExpirationResponse, err error) {
url := fmt.Sprintf("%s/v2/projects/%s", c.baseURL, projectID)
if c.teamID(teamID) != "" {
url = fmt.Sprintf("%s?teamId=%s", url, c.teamID(teamID))
Expand All @@ -126,12 +134,18 @@ func (c *Client) GetDeploymentRetention(ctx context.Context, projectID, teamID s
body: "",
}, &p)
if p.DeploymentExpiration == nil {
return DeploymentExpiration{
ExpirationPreview: 36500,
ExpirationProduction: 36500,
ExpirationCanceled: 36500,
ExpirationErrored: 36500,
return DeploymentExpirationResponse{
DeploymentExpiration: DeploymentExpiration{
ExpirationPreview: 36500,
ExpirationProduction: 36500,
ExpirationCanceled: 36500,
ExpirationErrored: 36500,
},
TeamID: c.teamID(teamID),
}, nil
}
return *p.DeploymentExpiration, err
return DeploymentExpirationResponse{
DeploymentExpiration: *p.DeploymentExpiration,
TeamID: c.teamID(teamID),
}, err
}
2 changes: 1 addition & 1 deletion vercel/data_source_project_deployment_retention.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func (r *projectDeploymentRetentionDataSource) Read(ctx context.Context, req dat
return
}

result := convertResponseToProjectDeploymentRetention(out, config.ProjectID, config.TeamID)
result := convertResponseToProjectDeploymentRetention(out, config.ProjectID)
tflog.Info(ctx, "read project deployment retention", map[string]any{
"team_id": result.TeamID.ValueString(),
"project_id": result.ProjectID.ValueString(),
Expand Down
12 changes: 6 additions & 6 deletions vercel/resource_project_deployment_retention.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,13 @@ func (e *ProjectDeploymentRetention) toUpdateDeploymentRetentionRequest() client
// convertResponseToProjectDeploymentRetention is used to populate terraform state based on an API response.
// Where possible, values from the API response are used to populate state. If not possible,
// values from plan are used.
func convertResponseToProjectDeploymentRetention(response client.DeploymentExpiration, projectID types.String, teamID types.String) ProjectDeploymentRetention {
func convertResponseToProjectDeploymentRetention(response client.DeploymentExpirationResponse, projectID types.String) ProjectDeploymentRetention {
return ProjectDeploymentRetention{
ExpirationPreview: types.StringValue(client.DeploymentRetentionDaysToString[response.ExpirationPreview]),
ExpirationProduction: types.StringValue(client.DeploymentRetentionDaysToString[response.ExpirationProduction]),
ExpirationCanceled: types.StringValue(client.DeploymentRetentionDaysToString[response.ExpirationCanceled]),
ExpirationErrored: types.StringValue(client.DeploymentRetentionDaysToString[response.ExpirationErrored]),
TeamID: teamID,
TeamID: types.StringValue(response.TeamID),
ProjectID: projectID,
}
}
Expand Down Expand Up @@ -186,7 +186,7 @@ func (r *projectDeploymentRetentionResource) Create(ctx context.Context, req res
return
}

result := convertResponseToProjectDeploymentRetention(response, plan.ProjectID, plan.TeamID)
result := convertResponseToProjectDeploymentRetention(response, plan.ProjectID)

tflog.Info(ctx, "created project deployment retention", map[string]any{
"team_id": result.TeamID.ValueString(),
Expand Down Expand Up @@ -227,7 +227,7 @@ func (r *projectDeploymentRetentionResource) Read(ctx context.Context, req resou
return
}

result := convertResponseToProjectDeploymentRetention(out, state.ProjectID, state.TeamID)
result := convertResponseToProjectDeploymentRetention(out, state.ProjectID)
tflog.Info(ctx, "read project deployment retention", map[string]any{
"team_id": result.TeamID.ValueString(),
"project_id": result.ProjectID.ValueString(),
Expand Down Expand Up @@ -289,7 +289,7 @@ func (r *projectDeploymentRetentionResource) Update(ctx context.Context, req res
return
}

result := convertResponseToProjectDeploymentRetention(response, plan.ProjectID, plan.TeamID)
result := convertResponseToProjectDeploymentRetention(response, plan.ProjectID)

tflog.Info(ctx, "updated project deployment retention", map[string]any{
"team_id": result.TeamID.ValueString(),
Expand Down Expand Up @@ -327,7 +327,7 @@ func (r *projectDeploymentRetentionResource) ImportState(ctx context.Context, re
return
}

result := convertResponseToProjectDeploymentRetention(out, types.StringValue(projectID), types.StringValue(teamID))
result := convertResponseToProjectDeploymentRetention(out, types.StringValue(projectID))
tflog.Info(ctx, "imported project deployment retention", map[string]any{
"team_id": result.TeamID.ValueString(),
"project_id": result.ProjectID.ValueString(),
Expand Down