-
Notifications
You must be signed in to change notification settings - Fork 32
Adds support for Rolling Releases #357
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
Changes from all commits
Commits
Show all changes
136 commits
Select commit
Hold shift + click to select a range
797b9cd
start terraform provider
dimitropoulos 6e9343b
wip: adding get delete
dimitropoulos 9be0fbe
it compiles
dimitropoulos 757452a
rename
dimitropoulos 11ea650
[tf] feat: support for rolling release
brookemosby ae54c84
[rolling-release] add in docs
brookemosby ba41d20
[rolling-release] add in docs
brookemosby c1370d6
[rolling-release] add in docs
brookemosby 53f04f3
Update resource_project_rolling_release.go
brookemosby 2796b4b
fix error
dimitropoulos 2bd5d9e
Merge remote-tracking branch 'origin/main' into dimitri/rolling-release
dimitropoulos 717d6de
gofmt
dimitropoulos dab88e5
gofmt
dimitropoulos d4f277c
rr test
dimitropoulos e4172a6
fixes resource name
dimitropoulos 2708ab1
resource name
dimitropoulos 71edcef
removes test
dimitropoulos 374a372
[rolling-release]
brookemosby 5792285
removes doRequestWithResponse
dimitropoulos 0b9b0d7
review
dimitropoulos 3647bd7
more review
dimitropoulos 10fcb76
review
dimitropoulos 5031a0d
remove sorting
dimitropoulos b9dd027
add import.sh
dimitropoulos 7fea6aa
eof
dimitropoulos 935d69d
fix name
dimitropoulos 206a8d1
eof
dimitropoulos 6b272c6
update nil to empty array
dimitropoulos f29fde5
Update vercel/data_source_project_rolling_release.go
dimitropoulos 0efd0a6
update TF prefix names
dimitropoulos 92f0f0b
removes more validation
dimitropoulos 96303ab
fix docs
dimitropoulos d263950
fix docs
dimitropoulos 6a5c6b1
fix docs even harder
dimitropoulos bc4af5e
[rr] fix tests
brookemosby c298f7d
[rr]
brookemosby 4efcb1c
[rr]
brookemosby 6e1389c
Delete examples/resources/vercel_project_rolling_release/import.sh
brookemosby 472eb7f
[rr]
brookemosby 9f2ae2d
[rr]
brookemosby 607fe39
[rr]
brookemosby 65607d8
[rr]
brookemosby 1d7d81c
[rr]
brookemosby 87c4c99
[rr]
brookemosby b93fdf8
[rr]
brookemosby afd0809
Tweak and delete a load of stuff
dglsparsons 9926350
More fixes
dglsparsons afbba0f
Update data_source_project_rolling_release_test.go
brookemosby 6acb266
[rr]
brookemosby 08370ec
[rr]
brookemosby 5ec8a67
[rr]
brookemosby 1562ef5
[rr]
brookemosby ed0fef6
[rr]
brookemosby 3e90d29
Update examples/resources/vercel_project_rolling_release/resource.tf
brookemosby d58f6e3
[rr]
brookemosby 9d249ac
Update project.go
brookemosby ddaec53
Merge remote-tracking branch 'origin/main' into dimitri/rolling-release
dimitropoulos 65ba997
[rolling-release]
brookemosby 305ca2b
[rolling-release]
brookemosby edead8f
[rolling-release]
brookemosby 13c8964
[rolling-release]
brookemosby 802c9a3
[rolling-release]
brookemosby 2bd7a50
[rolling-release]
brookemosby f7313ee
[rolling-release]
brookemosby f4a07cb
[rolling-release]
brookemosby 8d196ce
[rolling-release]
brookemosby 81d7ca8
[rolling-release]
brookemosby 3c65334
[rolling-release]
brookemosby 2f401da
[rolling-release]
brookemosby ad6201f
[rolling-release]
brookemosby 0d24b07
[rolling-release]
brookemosby 687becd
[rolling-release]
brookemosby 73d2393
[rr]
brookemosby fe6666d
[rr]
brookemosby ac876bd
[rr]
brookemosby b5987d6
[rr]
brookemosby 5103354
[rr]
brookemosby a295628
[rr]
brookemosby 904bac8
[rr]
brookemosby 434d6ec
[rr]
brookemosby b777160
[rr]
brookemosby d8a1ab9
[rr]
brookemosby b2498b6
[rr]
brookemosby 0d27bc1
[rr]
brookemosby 44025ef
[rr]
brookemosby 3d0f090
[rr]
brookemosby 3a6b47c
[rr]
brookemosby c6cca05
[rr]
brookemosby 8c0865e
[rolling-release]
brookemosby a14c59e
Merge branch 'main' into brooke/rr
brookemosby b499223
[rolling-release]
brookemosby 7abbbb6
[rolling-release]
brookemosby 9da99ff
[rolling-release]
brookemosby 88cccf0
[rolling-release]
brookemosby 313be6e
[rolling-release]
brookemosby 0b49195
[rolling-release]
brookemosby 368259f
[rolling-release]
brookemosby 1eedbe1
[rolling-release]
brookemosby 01c4a7c
[rolling-release]
brookemosby b4abf2d
[rolling-release]
brookemosby dc4e07c
[rolling-release]
brookemosby 671cfa3
[rolling-release]
brookemosby 58c2877
[rolling-release]
brookemosby e67363b
[rolling-release]
brookemosby 132f2b9
[rolling-release]
brookemosby 2449bbc
[rolling-release]
brookemosby b8e8428
[rolling-release]
brookemosby b02ea8b
[rolling-release]
brookemosby db79e93
removes rolling release item from project response
dimitropoulos e8d3607
remove enabled check
dimitropoulos 4d6d9b2
use Description rather than MarkdownDescription
dimitropoulos a0692ca
remove loop sleep
dimitropoulos e78835b
remove added check
dimitropoulos a8847ab
removes comment
dimitropoulos 75dbc74
remove diag handling
dimitropoulos 8e1d521
actually use delete
dimitropoulos 54b50ac
removes extra debug info
dimitropoulos c9ae422
remove duplication of check
dimitropoulos e12ba08
remove debugging line
dimitropoulos 035aade
remove un-used state
brookemosby ed11f39
separate create from update
brookemosby 29603cd
separate create from update
brookemosby 696f005
separate create from update
brookemosby 063a3ba
separate create from update
brookemosby ea5c904
separate create from update
brookemosby 235eb42
separate create from update
brookemosby bab496f
separate create from update
brookemosby c4ddfda
separate create from update
brookemosby db33f2c
separate create from update
brookemosby 0ab2c20
separate create from update
brookemosby d1cfe40
separate create from update
brookemosby cae6afd
separate create from update
brookemosby d882b22
test case fixes
brookemosby 0a08f30
update docs
brookemosby a595d14
update test
brookemosby 649a8a6
Update vercel/resource_project_rolling_release.go
brookemosby File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
package client | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"github.com/hashicorp/terraform-plugin-log/tflog" | ||
) | ||
|
||
// RollingReleaseStage represents a stage in a rolling release | ||
type RollingReleaseStage struct { | ||
TargetPercentage int `json:"targetPercentage"` // Required: 0-100 | ||
Duration *int `json:"duration,omitempty"` // Required for automatic advancement: 1-10000 minutes | ||
RequireApproval bool `json:"requireApproval,omitempty"` // Only in response for manual-approval type | ||
} | ||
|
||
// RollingRelease represents the rolling release configuration | ||
type RollingRelease struct { | ||
Enabled bool `json:"enabled"` // Required | ||
AdvancementType string `json:"advancementType"` // Required when enabled=true: 'automatic' or 'manual-approval' | ||
Stages []RollingReleaseStage `json:"stages"` // Required when enabled=true: 2-10 stages | ||
} | ||
|
||
type RollingReleaseInfo struct { | ||
RollingRelease RollingRelease `json:"rollingRelease"` | ||
ProjectID string `json:"projectId"` | ||
TeamID string `json:"teamId"` | ||
} | ||
|
||
// GetRollingRelease returns the rolling release for a given project. | ||
func (c *Client) GetRollingRelease(ctx context.Context, projectID, teamID string) (RollingReleaseInfo, error) { | ||
teamId := c.TeamID(teamID) | ||
url := fmt.Sprintf("%s/v1/projects/%s/rolling-release/config?teamId=%s", c.baseURL, projectID, teamId) | ||
|
||
var d RollingReleaseInfo | ||
err := c.doRequest(clientRequest{ | ||
ctx: ctx, | ||
method: "GET", | ||
url: url, | ||
}, &d) | ||
|
||
if err != nil { | ||
return RollingReleaseInfo{}, fmt.Errorf("error getting rolling-release: %w", err) | ||
} | ||
|
||
d.ProjectID = projectID | ||
d.TeamID = teamId | ||
|
||
return d, nil | ||
} | ||
|
||
// CreateRollingReleaseRequest defines the information that needs to be passed to Vercel in order to | ||
// create a new rolling release. | ||
type CreateRollingReleaseRequest struct { | ||
RollingRelease RollingRelease `json:"rollingRelease"` | ||
ProjectID string `json:"projectId"` | ||
TeamID string `json:"teamId"` | ||
} | ||
|
||
// CreateRollingRelease will create a new rolling release for a given project. | ||
func (c *Client) CreateRollingRelease(ctx context.Context, request CreateRollingReleaseRequest) (RollingReleaseInfo, error) { | ||
request.TeamID = c.TeamID(request.TeamID) | ||
enableRequest := map[string]any{ | ||
"enabled": true, | ||
"advancementType": request.RollingRelease.AdvancementType, | ||
"stages": request.RollingRelease.Stages, | ||
} | ||
|
||
var result RollingReleaseInfo | ||
err := c.doRequest(clientRequest{ | ||
ctx: ctx, | ||
method: "PATCH", | ||
url: fmt.Sprintf("%s/v1/projects/%s/rolling-release/config?teamId=%s", c.baseURL, request.ProjectID, request.TeamID), | ||
body: string(mustMarshal(enableRequest)), | ||
}, &result) | ||
if err != nil { | ||
return RollingReleaseInfo{}, fmt.Errorf("error enabling rolling release: %w", err) | ||
} | ||
|
||
result.ProjectID = request.ProjectID | ||
result.TeamID = request.TeamID | ||
tflog.Info(ctx, "created rolling release", map[string]any{ | ||
"response": result, | ||
"request": request, | ||
}) | ||
return result, nil | ||
} | ||
|
||
// UpdateRollingReleaseRequest defines the information that needs to be passed to Vercel in order to | ||
// update a rolling release. | ||
type UpdateRollingReleaseRequest struct { | ||
RollingRelease RollingRelease `json:"rollingRelease"` | ||
ProjectID string `json:"projectId"` | ||
TeamID string `json:"teamId"` | ||
} | ||
|
||
// UpdateRollingRelease will update an existing rolling release to the latest information. | ||
func (c *Client) UpdateRollingRelease(ctx context.Context, request UpdateRollingReleaseRequest) (RollingReleaseInfo, error) { | ||
request.TeamID = c.TeamID(request.TeamID) | ||
enableRequest := map[string]any{ | ||
"enabled": true, | ||
"advancementType": request.RollingRelease.AdvancementType, | ||
"stages": request.RollingRelease.Stages, | ||
} | ||
|
||
var result RollingReleaseInfo | ||
err := c.doRequest(clientRequest{ | ||
ctx: ctx, | ||
method: "PATCH", | ||
url: fmt.Sprintf("%s/v1/projects/%s/rolling-release/config?teamId=%s", c.baseURL, request.ProjectID, request.TeamID), | ||
body: string(mustMarshal(enableRequest)), | ||
}, &result) | ||
if err != nil { | ||
return RollingReleaseInfo{}, fmt.Errorf("error enabling rolling release: %w", err) | ||
} | ||
|
||
result.ProjectID = request.ProjectID | ||
result.TeamID = request.TeamID | ||
tflog.Info(ctx, "updated rolling release", map[string]any{ | ||
"response": result, | ||
"request": request, | ||
}) | ||
return result, nil | ||
} | ||
|
||
// DeleteRollingRelease will delete the rolling release for a given project. | ||
func (c *Client) DeleteRollingRelease(ctx context.Context, projectID, teamID string) error { | ||
teamId := c.TeamID(teamID) | ||
url := fmt.Sprintf("%s/v1/projects/%s/rolling-release/config?teamId=%s", c.baseURL, projectID, teamId) | ||
|
||
err := c.doRequest(clientRequest{ | ||
ctx: ctx, | ||
method: "DELETE", | ||
url: url, | ||
}, nil) | ||
return err | ||
} | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
--- | ||
# generated by https://github.com/hashicorp/terraform-plugin-docs | ||
page_title: "vercel_project_rolling_release Data Source - terraform-provider-vercel" | ||
subcategory: "" | ||
description: |- | ||
Data source for a Vercel project rolling release configuration. | ||
--- | ||
|
||
# vercel_project_rolling_release (Data Source) | ||
|
||
Data source for a Vercel project rolling release configuration. | ||
|
||
## Example Usage | ||
|
||
```terraform | ||
data "vercel_project" "example" { | ||
name = "example-project" | ||
} | ||
|
||
data "vercel_project_rolling_release" "example" { | ||
project_id = data.vercel_project.example.id | ||
} | ||
``` | ||
|
||
<!-- schema generated by tfplugindocs --> | ||
## Schema | ||
|
||
### Required | ||
|
||
- `project_id` (String) The ID of the project. | ||
|
||
### Optional | ||
|
||
- `team_id` (String) The ID of the Vercel team. | ||
|
||
### Read-Only | ||
|
||
- `advancement_type` (String) The type of advancement for the rolling release. Either 'automatic' or 'manual-approval'. | ||
- `stages` (Attributes List) The stages for the rolling release configuration. (see [below for nested schema](#nestedatt--stages)) | ||
|
||
<a id="nestedatt--stages"></a> | ||
### Nested Schema for `stages` | ||
|
||
Read-Only: | ||
|
||
- `duration` (Number) The duration in minutes to wait before advancing to the next stage. Present for automatic advancement type. | ||
- `target_percentage` (Number) The percentage of traffic to route to this stage. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
--- | ||
# generated by https://github.com/hashicorp/terraform-plugin-docs | ||
page_title: "vercel_project_rolling_release Resource - terraform-provider-vercel" | ||
subcategory: "" | ||
description: |- | ||
Resource for a Vercel project rolling release configuration. | ||
--- | ||
|
||
# vercel_project_rolling_release (Resource) | ||
|
||
Resource for a Vercel project rolling release configuration. | ||
|
||
## Example Usage | ||
|
||
```terraform | ||
resource "vercel_project" "example" { | ||
name = "example-project" | ||
skew_protection = "12 hours" | ||
} | ||
|
||
resource "vercel_project_rolling_release" "example" { | ||
project_id = vercel_project.example.id | ||
advancement_type = "manual-approval" | ||
stages = [ | ||
{ | ||
target_percentage = 20 | ||
}, | ||
{ | ||
target_percentage = 50 | ||
} | ||
] | ||
} | ||
``` | ||
|
||
<!-- schema generated by tfplugindocs --> | ||
## Schema | ||
|
||
### Required | ||
|
||
- `advancement_type` (String) The type of advancement for the rolling release. Must be either 'automatic' or 'manual-approval'. | ||
- `project_id` (String) The ID of the project. | ||
- `stages` (Attributes List) The stages for the rolling release configuration. The last stage must have target_percentage = 100. (see [below for nested schema](#nestedatt--stages)) | ||
|
||
### Optional | ||
|
||
- `team_id` (String) The ID of the Vercel team. | ||
|
||
<a id="nestedatt--stages"></a> | ||
### Nested Schema for `stages` | ||
|
||
Required: | ||
|
||
- `target_percentage` (Number) The percentage of traffic to route to this stage. | ||
|
||
Optional: | ||
|
||
- `duration` (Number) The duration in minutes to wait before advancing to the next stage. Required for automatic advancement type. |
7 changes: 7 additions & 0 deletions
7
examples/data-sources/vercel_project_rolling_release/data-source.tf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
data "vercel_project" "example" { | ||
name = "example-project" | ||
} | ||
|
||
data "vercel_project_rolling_release" "example" { | ||
project_id = data.vercel_project.example.id | ||
} |
17 changes: 17 additions & 0 deletions
17
examples/resources/vercel_project_rolling_release/resource.tf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
resource "vercel_project" "example" { | ||
name = "example-project" | ||
skew_protection = "12 hours" | ||
} | ||
|
||
resource "vercel_project_rolling_release" "example" { | ||
project_id = vercel_project.example.id | ||
advancement_type = "manual-approval" | ||
stages = [ | ||
{ | ||
target_percentage = 20 | ||
}, | ||
{ | ||
target_percentage = 50 | ||
} | ||
] | ||
} |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.