Skip to content

Commit 558d642

Browse files
authored
feat: support review config (#101)
* feat: support review config * fix: lint * fix: lint
1 parent fcf9ea7 commit 558d642

37 files changed

+949
-59
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.19
1+
1.0.20

api/client.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,14 @@ type Client interface {
163163
GetWorkspaceIAMPolicy(ctx context.Context) (*v1pb.IamPolicy, error)
164164
// SetWorkspaceIAMPolicy sets the workspace IAM policy.
165165
SetWorkspaceIAMPolicy(ctx context.Context, setIamPolicyRequest *v1pb.SetIamPolicyRequest) (*v1pb.IamPolicy, error)
166+
167+
// Review config
168+
// ListReviewConfig will return review configs.
169+
ListReviewConfig(ctx context.Context) (*v1pb.ListReviewConfigsResponse, error)
170+
// GetReviewConfig gets the review config by full name.
171+
GetReviewConfig(ctx context.Context, reviewName string) (*v1pb.ReviewConfig, error)
172+
// UpsertReviewConfig updates or creates the review config.
173+
UpsertReviewConfig(ctx context.Context, patch *v1pb.ReviewConfig, updateMasks []string) (*v1pb.ReviewConfig, error)
174+
// DeleteReviewConfig deletes the review config.
175+
DeleteReviewConfig(ctx context.Context, reviewName string) error
166176
}

client/instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"google.golang.org/protobuf/encoding/protojson"
1111
)
1212

13-
// ListInstance will return instances in environment.
13+
// ListInstance will return instances.
1414
func (c *client) ListInstance(ctx context.Context, showDeleted bool) (*v1pb.ListInstancesResponse, error) {
1515
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/instances?showDeleted=%v", c.url, c.version, showDeleted), nil)
1616
if err != nil {

client/review_config.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package client
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"net/http"
7+
8+
v1pb "github.com/bytebase/bytebase/proto/generated-go/v1"
9+
)
10+
11+
// ListReviewConfig will return review configs.
12+
func (c *client) ListReviewConfig(ctx context.Context) (*v1pb.ListReviewConfigsResponse, error) {
13+
req, err := http.NewRequestWithContext(ctx, "GET", fmt.Sprintf("%s/%s/reviewConfigs", c.url, c.version), nil)
14+
if err != nil {
15+
return nil, err
16+
}
17+
18+
body, err := c.doRequest(req)
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
var res v1pb.ListReviewConfigsResponse
24+
if err := ProtojsonUnmarshaler.Unmarshal(body, &res); err != nil {
25+
return nil, err
26+
}
27+
28+
return &res, nil
29+
}
30+
31+
// GetReviewConfig gets the review config by full name.
32+
func (c *client) GetReviewConfig(ctx context.Context, reviewName string) (*v1pb.ReviewConfig, error) {
33+
body, err := c.getResource(ctx, reviewName)
34+
if err != nil {
35+
return nil, err
36+
}
37+
38+
var res v1pb.ReviewConfig
39+
if err := ProtojsonUnmarshaler.Unmarshal(body, &res); err != nil {
40+
return nil, err
41+
}
42+
43+
return &res, nil
44+
}
45+
46+
// UpsertReviewConfig updates or creates the review config.
47+
func (c *client) UpsertReviewConfig(ctx context.Context, patch *v1pb.ReviewConfig, updateMasks []string) (*v1pb.ReviewConfig, error) {
48+
body, err := c.updateResource(ctx, patch.Name, patch, updateMasks, true /* allow missing */)
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
var res v1pb.ReviewConfig
54+
if err := ProtojsonUnmarshaler.Unmarshal(body, &res); err != nil {
55+
return nil, err
56+
}
57+
58+
return &res, nil
59+
}
60+
61+
// DeleteReviewConfig deletes the review config.
62+
func (c *client) DeleteReviewConfig(ctx context.Context, reviewName string) error {
63+
return c.deleteResource(ctx, reviewName)
64+
}

docs/data-sources/group.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ The group data source.
2424
- `description` (String) The group description.
2525
- `id` (String) The ID of this resource.
2626
- `members` (Set of Object) The members in the group. (see [below for nested schema](#nestedatt--members))
27+
- `roles` (Set of String) The group's roles in the workspace level
2728
- `source` (String) Source means where the group comes from. For now we support Entra ID SCIM sync, so the source could be Entra ID.
2829
- `title` (String) The group title.
2930

docs/data-sources/group_list.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ Read-Only:
2828
- `description` (String)
2929
- `members` (Set of Object) (see [below for nested schema](#nestedobjatt--groups--members))
3030
- `name` (String)
31+
- `roles` (Set of String)
3132
- `source` (String)
3233
- `title` (String)
3334

docs/data-sources/review_config.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "bytebase_review_config Data Source - terraform-provider-bytebase"
4+
subcategory: ""
5+
description: |-
6+
The review config data source.
7+
---
8+
9+
# bytebase_review_config (Data Source)
10+
11+
The review config data source.
12+
13+
14+
15+
<!-- schema generated by tfplugindocs -->
16+
## Schema
17+
18+
### Read-Only
19+
20+
- `enabled` (Boolean) Enable the SQL review config
21+
- `id` (String) The ID of this resource.
22+
- `resource_id` (String) The unique resource id for the review config.
23+
- `resources` (Set of String) Resources using the config. We support attach the review config for environments or projects with format {resurce}/{resource id}. For example, environments/test, projects/sample.
24+
- `rules` (Set of Object) The SQL review rules. (see [below for nested schema](#nestedatt--rules))
25+
- `title` (String) The title for the review config.
26+
27+
<a id="nestedatt--rules"></a>
28+
### Nested Schema for `rules`
29+
30+
Read-Only:
31+
32+
- `comment` (String)
33+
- `engine` (String)
34+
- `level` (String)
35+
- `payload` (String)
36+
- `type` (String)
37+
38+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "bytebase_review_config_list Data Source - terraform-provider-bytebase"
4+
subcategory: ""
5+
description: |-
6+
The review config data source list.
7+
---
8+
9+
# bytebase_review_config_list (Data Source)
10+
11+
The review config data source list.
12+
13+
14+
15+
<!-- schema generated by tfplugindocs -->
16+
## Schema
17+
18+
### Read-Only
19+
20+
- `id` (String) The ID of this resource.
21+
- `review_configs` (List of Object) (see [below for nested schema](#nestedatt--review_configs))
22+
23+
<a id="nestedatt--review_configs"></a>
24+
### Nested Schema for `review_configs`
25+
26+
Read-Only:
27+
28+
- `enabled` (Boolean)
29+
- `resource_id` (String)
30+
- `resources` (Set of String)
31+
- `rules` (Set of Object) (see [below for nested schema](#nestedobjatt--review_configs--rules))
32+
- `title` (String)
33+
34+
<a id="nestedobjatt--review_configs--rules"></a>
35+
### Nested Schema for `review_configs.rules`
36+
37+
Read-Only:
38+
39+
- `comment` (String)
40+
- `engine` (String)
41+
- `level` (String)
42+
- `payload` (String)
43+
- `type` (String)
44+
45+

docs/resources/group.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ The group resource. Workspace domain is required for creating groups.
2424
### Optional
2525

2626
- `description` (String) The group description.
27+
- `roles` (Set of String) The group's roles in the workspace level
2728

2829
### Read-Only
2930

docs/resources/review_config.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "bytebase_review_config Resource - terraform-provider-bytebase"
4+
subcategory: ""
5+
description: |-
6+
The review config resource.
7+
---
8+
9+
# bytebase_review_config (Resource)
10+
11+
The review config resource.
12+
13+
14+
15+
<!-- schema generated by tfplugindocs -->
16+
## Schema
17+
18+
### Required
19+
20+
- `enabled` (Boolean) Enable the SQL review config
21+
- `resource_id` (String) The unique resource id for the review config.
22+
- `rules` (Block Set, Min: 1) The SQL review rules. (see [below for nested schema](#nestedblock--rules))
23+
- `title` (String) The title for the review config.
24+
25+
### Optional
26+
27+
- `resources` (Set of String) Resources using the config. We support attach the review config for environments or projects with format {resurce}/{resource id}. For example, environments/test, projects/sample.
28+
29+
### Read-Only
30+
31+
- `id` (String) The ID of this resource.
32+
33+
<a id="nestedblock--rules"></a>
34+
### Nested Schema for `rules`
35+
36+
Required:
37+
38+
- `engine` (String) The rule for the database engine.
39+
- `level` (String) The rule level.
40+
- `type` (String) The rule unique type. Check https://www.bytebase.com/docs/sql-review/review-rules for all rules
41+
42+
Optional:
43+
44+
- `comment` (String) The comment for the rule.
45+
- `payload` (String) The payload for the rule.
46+
47+

docs/resources/user.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ The user resource.
2525
- `password` (String, Sensitive) The user login password.
2626
- `phone` (String) The user phone.
2727
- `roles` (Set of String) The user's roles in the workspace level
28+
- `type` (String) The user type.
2829

2930
### Read-Only
3031

@@ -33,8 +34,8 @@ The user resource.
3334
- `last_login_time` (String) The user last login time.
3435
- `mfa_enabled` (Boolean) The mfa_enabled flag means if the user has enabled MFA.
3536
- `name` (String) The user name in users/{user id or email} format.
37+
- `service_key` (String) The service key for service account.
3638
- `source` (String) Source means where the user comes from. For now we support Entra ID SCIM sync, so the source could be Entra ID.
3739
- `state` (String) The user is deleted or not.
38-
- `type` (String) The user type.
3940

4041

examples/environments/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
terraform {
33
required_providers {
44
bytebase = {
5-
version = "1.0.19"
5+
version = "1.0.20"
66
# For local development, please use "terraform.local/bytebase/bytebase" instead
77
source = "registry.terraform.io/bytebase/bytebase"
88
}

examples/groups/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "1.0.19"
4+
version = "1.0.20"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}

examples/instances/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
terraform {
33
required_providers {
44
bytebase = {
5-
version = "1.0.19"
5+
version = "1.0.20"
66
# For local development, please use "terraform.local/bytebase/bytebase" instead
77
source = "registry.terraform.io/bytebase/bytebase"
88
}

examples/policies/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "1.0.19"
4+
version = "1.0.20"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}

examples/projects/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
terraform {
33
required_providers {
44
bytebase = {
5-
version = "1.0.19"
5+
version = "1.0.20"
66
# For local development, please use "terraform.local/bytebase/bytebase" instead
77
source = "registry.terraform.io/bytebase/bytebase"
88
}

examples/roles/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "1.0.19"
4+
version = "1.0.20"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}

examples/settings/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "1.0.19"
4+
version = "1.0.20"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}

examples/setup/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
terraform {
22
required_providers {
33
bytebase = {
4-
version = "1.0.19"
4+
version = "1.0.20"
55
# For local development, please use "terraform.local/bytebase/bytebase" instead
66
source = "registry.terraform.io/bytebase/bytebase"
77
}

examples/setup/sql_review.tf

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
resource "bytebase_review_config" "sample" {
2+
depends_on = [
3+
bytebase_environment.test,
4+
bytebase_environment.prod
5+
]
6+
7+
resource_id = "review-config-sample"
8+
title = "Sample SQL Review Config"
9+
enabled = true
10+
resources = toset([
11+
bytebase_environment.test.name,
12+
bytebase_environment.prod.name
13+
])
14+
rules {
15+
type = "column.no-null"
16+
engine = "MYSQL"
17+
level = "WARNING"
18+
}
19+
rules {
20+
type = "table.require-pk"
21+
engine = "MYSQL"
22+
level = "ERROR"
23+
}
24+
}

0 commit comments

Comments
 (0)