diff --git a/docs/docs/ref/proto.mdx b/docs/docs/ref/proto.mdx
index 62b218d0fb..1002b03426 100644
--- a/docs/docs/ref/proto.mdx
+++ b/docs/docs/ref/proto.mdx
@@ -2804,6 +2804,21 @@ Definition defines the rule type. It encompases the schema and the data evaluati
| ----- | ---- | ----- | ----------- |
| review_message | string | | review_message is the message to post in the PR review. |
| action | string | optional | action is the action to use for the PR review (comment or request_changes). Default is comment. |
+| line_comments | RuleType.Definition.Alert.AlertTypePRComment.PullRequestLineComment | repeated | |
+
+
+
+
+
+
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| filepath | string | | filepath is the path to the file to comment on. |
+| line_start | int32 | | line_start is the starting line number. |
+| line_end | int32 | | line_end is the ending line number. |
+| comment | string | | comment is the comment to post on those lines. |
diff --git a/internal/engine/actions/alert/pull_request_comment/pull_request_comment.go b/internal/engine/actions/alert/pull_request_comment/pull_request_comment.go
index 250d84804f..db59bbe140 100644
--- a/internal/engine/actions/alert/pull_request_comment/pull_request_comment.go
+++ b/internal/engine/actions/alert/pull_request_comment/pull_request_comment.go
@@ -57,15 +57,16 @@ type PrCommentTemplateParams struct {
}
type paramsPR struct {
- Owner string
- Repo string
- CommitSha string
- Number int
- Comment string
- RuleName string
- Event string
- Metadata *alertMetadata
- prevStatus *db.ListRuleEvaluationsByProfileIdRow
+ Owner string
+ Repo string
+ CommitSha string
+ Number int
+ Comment string
+ LineComments []*github.DraftReviewComment
+ RuleName string
+ Event string
+ Metadata *alertMetadata
+ prevStatus *db.ListRuleEvaluationsByProfileIdRow
}
type alertMetadata struct {
@@ -139,83 +140,117 @@ func (alert *Alert) Do(
}
func (alert *Alert) run(ctx context.Context, params *paramsPR, cmd interfaces.ActionCmd) (json.RawMessage, error) {
+ // Process the command
+ switch cmd {
+ // Create or update a review
+ case interfaces.ActionCmdOn:
+ return alert.handleActionOn(ctx, params)
+ // Dismiss the review
+ case interfaces.ActionCmdOff:
+ return alert.handleActionOff(ctx, params)
+ case interfaces.ActionCmdDoNothing:
+ // Return the previous alert status.
+ return alert.runDoNothing(ctx, params)
+ }
+ return nil, enginerr.ErrActionSkipped
+}
+
+func (alert *Alert) handleActionOn(ctx context.Context, params *paramsPR) (json.RawMessage, error) {
logger := zerolog.Ctx(ctx).With().
Str("owner", params.Owner).
Str("repo", params.Repo).
Int("pr", params.Number).
Logger()
- // Process the command
- switch cmd {
- // Create or update a review
- case interfaces.ActionCmdOn:
- existingReview, err := alert.findExistingReview(ctx, params)
- if err != nil {
- return nil, fmt.Errorf("error searching for existing PR review: %w", err)
- }
+ existingReview, err := alert.findExistingReview(ctx, params)
+ if err != nil {
+ return nil, fmt.Errorf("error searching for existing PR review: %w", err)
+ }
- var reviewID int64
- if existingReview != nil {
- reviewID = existingReview.GetID()
- if _, err := alert.gh.UpdateReview(ctx, params.Owner, params.Repo, params.Number, reviewID, params.Comment); err != nil {
- return nil, fmt.Errorf("error updating PR review: %w, %w", err, enginerr.ErrActionFailed)
- }
- logger.Info().Int64("review_id", reviewID).Msg("PR review updated")
+ var reviewID int64
+ if existingReview != nil {
+ reviewID = existingReview.GetID()
+ if _, err := alert.gh.UpdateReview(ctx, params.Owner, params.Repo, params.Number, reviewID, params.Comment); err != nil {
+ return nil, fmt.Errorf("error updating PR review: %w, %w", err, enginerr.ErrActionFailed)
+ }
+ if len(params.LineComments) > 0 {
+ // The GitHub UpdateReview API only accepts a new body; it cannot add new
+ // line-level comments to an already-submitted review. Line comments are
+ // only posted when the review is first created.
+ logger.Warn().Int64("review_id", reviewID).
+ Int("line_comments", len(params.LineComments)).
+ Msg("PR review updated but line comments were not re-posted (GitHub API limitation)")
} else {
- req := &github.PullRequestReviewRequest{
- Body: github.String(params.Comment),
- Event: github.String(params.Event),
- }
- review, err := alert.gh.CreateReview(ctx, params.Owner, params.Repo, params.Number, req)
- if err != nil {
- return nil, fmt.Errorf("error creating PR review: %w, %w", err, enginerr.ErrActionFailed)
- }
- reviewID = review.GetID()
- existingReview = review
- logger.Info().Int64("review_id", reviewID).Msg("PR review created")
+ logger.Info().Int64("review_id", reviewID).Msg("PR review updated")
}
-
- now := time.Now()
- newMeta, err := json.Marshal(alertMetadata{
- ReviewID: strconv.FormatInt(reviewID, 10),
- SubmittedAt: &now,
- PullRequestUrl: existingReview.HTMLURL,
- })
- if err != nil {
- return nil, fmt.Errorf("error marshalling alert metadata json: %w", err)
+ } else {
+ req := &github.PullRequestReviewRequest{
+ Body: github.String(params.Comment),
+ Event: github.String(params.Event),
}
-
- return newMeta, nil
- // Dismiss the review
- case interfaces.ActionCmdOff:
- existingReview, err := alert.findExistingReview(ctx, params)
+ // CommitID is required by GitHub for reviews that include line comments;
+ // it tells GitHub which commit's diff to annotate.
+ if params.CommitSha != "" {
+ req.CommitID = github.String(params.CommitSha)
+ }
+ // Attach line-specific draft comments if any were configured
+ if len(params.LineComments) > 0 {
+ req.Comments = params.LineComments
+ }
+ review, err := alert.gh.CreateReview(ctx, params.Owner, params.Repo, params.Number, req)
if err != nil {
- return nil, fmt.Errorf("error searching for existing PR review: %w", err)
+ return nil, fmt.Errorf("error creating PR review: %w, %w", err, enginerr.ErrActionFailed)
}
+ reviewID = review.GetID()
+ existingReview = review
+ logger.Info().Int64("review_id", reviewID).
+ Int("line_comments", len(params.LineComments)).
+ Msg("PR review created")
+ }
- if existingReview == nil {
- logger.Debug().Msg("No PR review to dismiss")
- return nil, enginerr.ErrActionTurnedOff
- }
+ now := time.Now()
+ newMeta, err := json.Marshal(alertMetadata{
+ ReviewID: strconv.FormatInt(reviewID, 10),
+ SubmittedAt: &now,
+ PullRequestUrl: existingReview.HTMLURL,
+ })
+ if err != nil {
+ return nil, fmt.Errorf("error marshalling alert metadata json: %w", err)
+ }
- reviewID := existingReview.GetID()
- if _, err := alert.gh.DismissReview(
- ctx, params.Owner, params.Repo, params.Number, reviewID, &github.PullRequestReviewDismissalRequest{
- Message: github.String("Dismissed due to alert being turned off"),
- },
- ); err != nil {
- if errors.Is(err, enginerr.ErrNotFound) {
- return nil, fmt.Errorf("PR review already dismissed: %w, %w", err, enginerr.ErrActionTurnedOff)
- }
- return nil, fmt.Errorf("error dismissing PR review: %w, %w", err, enginerr.ErrActionFailed)
- }
- logger.Info().Int64("review_id", reviewID).Msg("PR review dismissed")
+ return newMeta, nil
+}
+
+func (alert *Alert) handleActionOff(ctx context.Context, params *paramsPR) (json.RawMessage, error) {
+ logger := zerolog.Ctx(ctx).With().
+ Str("owner", params.Owner).
+ Str("repo", params.Repo).
+ Int("pr", params.Number).
+ Logger()
+
+ existingReview, err := alert.findExistingReview(ctx, params)
+ if err != nil {
+ return nil, fmt.Errorf("error searching for existing PR review: %w", err)
+ }
+
+ if existingReview == nil {
+ logger.Debug().Msg("No PR review to dismiss")
return nil, enginerr.ErrActionTurnedOff
- case interfaces.ActionCmdDoNothing:
- // Return the previous alert status.
- return alert.runDoNothing(ctx, params)
}
- return nil, enginerr.ErrActionSkipped
+
+ reviewID := existingReview.GetID()
+ if _, err := alert.gh.DismissReview(
+ ctx, params.Owner, params.Repo, params.Number, reviewID, &github.PullRequestReviewDismissalRequest{
+ Message: github.String("Dismissed due to alert being turned off"),
+ },
+ ); err != nil {
+ if errors.Is(err, enginerr.ErrNotFound) {
+ return nil, fmt.Errorf("PR review already dismissed: %w, %w", err, enginerr.ErrActionTurnedOff)
+ }
+ return nil, fmt.Errorf("error dismissing PR review: %w, %w", err, enginerr.ErrActionFailed)
+ }
+ logger.Info().Int64("review_id", reviewID).Msg("PR review dismissed")
+ return nil, enginerr.ErrActionTurnedOff
}
func (alert *Alert) findExistingReview(ctx context.Context, params *paramsPR) (*github.PullRequestReview, error) {
@@ -244,6 +279,9 @@ func (alert *Alert) runDry(ctx context.Context, params *paramsPR, cmd interfaces
body := github.String(params.Comment)
logger.Info().Msgf("dry run: create a PR comment on PR %d in repo %s/%s with the following body: %s",
params.Number, params.Owner, params.Repo, *body)
+ if len(params.LineComments) > 0 {
+ logger.Info().Msgf("dry run: would also post %d line comment(s)", len(params.LineComments))
+ }
return nil, nil
case interfaces.ActionCmdOff:
if params.Metadata == nil || params.Metadata.ReviewID == "" {
@@ -328,6 +366,31 @@ func (alert *Alert) getParamsForPRComment(
// Add magic comment to identify Minder reviews for this rule
result.Comment = fmt.Sprintf("%s\n\n", comment, result.RuleName)
+ // Render and collect line-specific draft comments
+ for i, lc := range alert.reviewCfg.GetLineComments() {
+ commentBody := lc.GetComment()
+ lineTmpl, err := util.NewSafeHTMLTemplate(&commentBody, fmt.Sprintf("line_comment_%d", i))
+ if err != nil {
+ return nil, fmt.Errorf("cannot parse line comment %d template: %w", i, err)
+ }
+ rendered, err := lineTmpl.Render(ctx, tmplParams, PrCommentMaxLength)
+ if err != nil {
+ return nil, fmt.Errorf("cannot render line comment %d: %w", i, err)
+ }
+
+ draftComment := &github.DraftReviewComment{
+ Path: github.String(lc.GetFilepath()),
+ Body: github.String(rendered),
+ Line: github.Int(int(lc.GetLineEnd())),
+ StartLine: github.Int(int(lc.GetLineStart())),
+ }
+ // If the comment spans only one line, omit StartLine (GitHub requires start_line < line)
+ if lc.GetLineStart() == lc.GetLineEnd() {
+ draftComment.StartLine = nil
+ }
+ result.LineComments = append(result.LineComments, draftComment)
+ }
+
// Unmarshal the existing alert metadata, if any
if metadata != nil {
meta := &alertMetadata{}
diff --git a/internal/engine/actions/alert/pull_request_comment/pull_request_comment_test.go b/internal/engine/actions/alert/pull_request_comment/pull_request_comment_test.go
index c1dbc51e6f..224ea09341 100644
--- a/internal/engine/actions/alert/pull_request_comment/pull_request_comment_test.go
+++ b/internal/engine/actions/alert/pull_request_comment/pull_request_comment_test.go
@@ -241,6 +241,186 @@ func TestPullRequestCommentAlert(t *testing.T) {
}
}
+func TestPullRequestLineCommentAlert(t *testing.T) {
+ t.Parallel()
+
+ reviewID := int64(789)
+
+ tests := []struct {
+ name string
+ lineComments []*pb.RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment
+ validateReq func(t *testing.T, req *github.PullRequestReviewRequest)
+ expectedErr error
+ expectMeta bool
+ }{
+ {
+ name: "creates review with single-line comment",
+ lineComments: []*pb.RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment{
+ {
+ Filepath: "home/path1.yaml",
+ LineStart: 110,
+ LineEnd: 110,
+ Comment: "This dependency needs to be updated",
+ },
+ },
+ validateReq: func(t *testing.T, req *github.PullRequestReviewRequest) {
+ t.Helper()
+ require.Len(t, req.Comments, 1)
+ require.Equal(t, "home/path1.yaml", req.Comments[0].GetPath())
+ require.Equal(t, 110, req.Comments[0].GetLine())
+ // single-line: StartLine should be nil
+ require.Nil(t, req.Comments[0].StartLine)
+ require.Equal(t, "This dependency needs to be updated", req.Comments[0].GetBody())
+ },
+ expectMeta: true,
+ },
+ {
+ name: "creates review with multi-line comment",
+ lineComments: []*pb.RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment{
+ {
+ Filepath: "home/path2.xml",
+ LineStart: 120,
+ LineEnd: 130,
+ Comment: "These lines of code need to be updated",
+ },
+ },
+ validateReq: func(t *testing.T, req *github.PullRequestReviewRequest) {
+ t.Helper()
+ require.Len(t, req.Comments, 1)
+ require.Equal(t, "home/path2.xml", req.Comments[0].GetPath())
+ require.Equal(t, 120, req.Comments[0].GetStartLine())
+ require.Equal(t, 130, req.Comments[0].GetLine())
+ require.Equal(t, "These lines of code need to be updated", req.Comments[0].GetBody())
+ },
+ expectMeta: true,
+ },
+ {
+ name: "creates review with multiple line comments on different files",
+ lineComments: []*pb.RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment{
+ {
+ Filepath: "home/path1.yaml",
+ LineStart: 110,
+ LineEnd: 110,
+ Comment: "This dependency needs to be updated",
+ },
+ {
+ Filepath: "home/path2.xml",
+ LineStart: 120,
+ LineEnd: 130,
+ Comment: "These lines of code need to be updated",
+ },
+ },
+ validateReq: func(t *testing.T, req *github.PullRequestReviewRequest) {
+ t.Helper()
+ require.Len(t, req.Comments, 2)
+ // First comment
+ require.Equal(t, "home/path1.yaml", req.Comments[0].GetPath())
+ require.Equal(t, 110, req.Comments[0].GetLine())
+ require.Nil(t, req.Comments[0].StartLine)
+ // Second comment
+ require.Equal(t, "home/path2.xml", req.Comments[1].GetPath())
+ require.Equal(t, 120, req.Comments[1].GetStartLine())
+ require.Equal(t, 130, req.Comments[1].GetLine())
+ },
+ expectMeta: true,
+ },
+ {
+ name: "line comment body is a template rendered with eval params",
+ lineComments: []*pb.RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment{
+ {
+ Filepath: "home/file.go",
+ LineStart: 5,
+ LineEnd: 5,
+ Comment: "Error: {{ .EvalErrorDetails }}",
+ },
+ },
+ validateReq: func(t *testing.T, req *github.PullRequestReviewRequest) {
+ t.Helper()
+ require.Len(t, req.Comments, 1)
+ require.Equal(t, fmt.Sprintf("Error: %s", evaluationFailureDetails), req.Comments[0].GetBody())
+ },
+ expectMeta: true,
+ },
+ {
+ name: "line comment body has invalid template syntax",
+ lineComments: []*pb.RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment{
+ {
+ Filepath: "home/file.go",
+ LineStart: 5,
+ LineEnd: 5,
+ Comment: "Error: {{ .MissingField",
+ },
+ },
+ expectedErr: fmt.Errorf("template"),
+ expectMeta: false,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ t.Parallel()
+
+ ctrl := gomock.NewController(t)
+ t.Cleanup(func() { ctrl.Finish() })
+
+ reviewAction := ""
+ prCommentCfg := pb.RuleType_Definition_Alert_AlertTypePRComment{
+ ReviewMessage: "Summary review message",
+ Action: &reviewAction,
+ LineComments: tt.lineComments,
+ }
+
+ mockClient := mock_provifv1.NewMockReviewPublisher(ctrl)
+ if tt.expectedErr == nil {
+ mockClient.EXPECT().
+ ListReviews(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
+ Return(nil, nil)
+ mockClient.EXPECT().
+ CreateReview(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
+ DoAndReturn(func(_ context.Context, _, _ string, _ int, req *github.PullRequestReviewRequest) (*github.PullRequestReview, error) {
+ if tt.validateReq != nil {
+ tt.validateReq(t, req)
+ }
+ return &github.PullRequestReview{ID: github.Int64(reviewID)}, nil
+ })
+ }
+
+ prCommentAlert, err := NewPullRequestCommentAlert(
+ TestActionTypeValid, &prCommentCfg, mockClient, models.ActionOptOn)
+ require.NoError(t, err)
+
+ evalParams := &engif.EvalStatusParams{
+ EvalStatusFromDb: &db.ListRuleEvaluationsByProfileIdRow{},
+ Profile: &models.ProfileAggregate{},
+ Rule: &models.RuleInstance{Name: "test-rule"},
+ }
+ evalParams.SetEvalErr(enginerr.NewErrEvaluationFailed(evaluationFailureDetails))
+ evalParams.SetEvalResult(&interfaces.EvaluationResult{
+ Output: exampleOutput{ViolationMsg: violationMsg},
+ })
+
+ retMeta, err := prCommentAlert.Do(
+ context.Background(),
+ engif.ActionCmdOn,
+ &pbinternal.PullRequest{CommitSha: "abc123"},
+ evalParams,
+ nil,
+ )
+ if tt.expectedErr != nil {
+ require.Error(t, err)
+ require.ErrorContains(t, err, tt.expectedErr.Error())
+ } else {
+ require.NoError(t, err)
+ }
+ if tt.expectMeta {
+ require.NotNil(t, retMeta)
+ } else {
+ require.Nil(t, retMeta)
+ }
+ })
+ }
+}
+
type exampleOutput struct {
ViolationMsg string
}
diff --git a/pkg/api/openapi/minder/v1/minder.swagger.json b/pkg/api/openapi/minder/v1/minder.swagger.json
index 82244171d1..36b5eed56e 100644
--- a/pkg/api/openapi/minder/v1/minder.swagger.json
+++ b/pkg/api/openapi/minder/v1/minder.swagger.json
@@ -3469,6 +3469,13 @@
"action": {
"type": "string",
"description": "action is the action to use for the PR review (comment or request_changes).\nDefault is comment."
+ },
+ "lineComments": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "$ref": "#/definitions/AlertTypePRCommentPullRequestLineComment"
+ }
}
},
"required": [
@@ -3483,6 +3490,35 @@
}
}
},
+ "AlertTypePRCommentPullRequestLineComment": {
+ "type": "object",
+ "properties": {
+ "filepath": {
+ "type": "string",
+ "description": "filepath is the path to the file to comment on."
+ },
+ "lineStart": {
+ "type": "integer",
+ "format": "int32",
+ "description": "line_start is the starting line number."
+ },
+ "lineEnd": {
+ "type": "integer",
+ "format": "int32",
+ "description": "line_end is the ending line number."
+ },
+ "comment": {
+ "type": "string",
+ "description": "comment is the comment to post on those lines."
+ }
+ },
+ "required": [
+ "filepath",
+ "lineStart",
+ "lineEnd",
+ "comment"
+ ]
+ },
"DefPath": {
"type": "object",
"properties": {
diff --git a/pkg/api/protobuf/go/minder/v1/minder.pb.go b/pkg/api/protobuf/go/minder/v1/minder.pb.go
index d6e76a62e0..79086ea5ff 100644
--- a/pkg/api/protobuf/go/minder/v1/minder.pb.go
+++ b/pkg/api/protobuf/go/minder/v1/minder.pb.go
@@ -14472,7 +14472,8 @@ type RuleType_Definition_Alert_AlertTypePRComment struct {
ReviewMessage string `protobuf:"bytes,1,opt,name=review_message,json=reviewMessage,proto3" json:"review_message,omitempty"`
// action is the action to use for the PR review (comment or request_changes).
// Default is comment.
- Action *string `protobuf:"bytes,2,opt,name=action,proto3,oneof" json:"action,omitempty"`
+ Action *string `protobuf:"bytes,2,opt,name=action,proto3,oneof" json:"action,omitempty"`
+ LineComments []*RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment `protobuf:"bytes,3,rep,name=line_comments,json=lineComments,proto3" json:"line_comments,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -14521,6 +14522,85 @@ func (x *RuleType_Definition_Alert_AlertTypePRComment) GetAction() string {
return ""
}
+func (x *RuleType_Definition_Alert_AlertTypePRComment) GetLineComments() []*RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment {
+ if x != nil {
+ return x.LineComments
+ }
+ return nil
+}
+
+type RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // filepath is the path to the file to comment on.
+ Filepath string `protobuf:"bytes,1,opt,name=filepath,proto3" json:"filepath,omitempty"`
+ // line_start is the starting line number.
+ LineStart int32 `protobuf:"varint,2,opt,name=line_start,json=lineStart,proto3" json:"line_start,omitempty"`
+ // line_end is the ending line number.
+ LineEnd int32 `protobuf:"varint,3,opt,name=line_end,json=lineEnd,proto3" json:"line_end,omitempty"`
+ // comment is the comment to post on those lines.
+ Comment string `protobuf:"bytes,4,opt,name=comment,proto3" json:"comment,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) Reset() {
+ *x = RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment{}
+ mi := &file_minder_v1_minder_proto_msgTypes[233]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) ProtoMessage() {}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) ProtoReflect() protoreflect.Message {
+ mi := &file_minder_v1_minder_proto_msgTypes[233]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment.ProtoReflect.Descriptor instead.
+func (*RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) Descriptor() ([]byte, []int) {
+ return file_minder_v1_minder_proto_rawDescGZIP(), []int{128, 0, 3, 1, 0}
+}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) GetFilepath() string {
+ if x != nil {
+ return x.Filepath
+ }
+ return ""
+}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) GetLineStart() int32 {
+ if x != nil {
+ return x.LineStart
+ }
+ return 0
+}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) GetLineEnd() int32 {
+ if x != nil {
+ return x.LineEnd
+ }
+ return 0
+}
+
+func (x *RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment) GetComment() string {
+ if x != nil {
+ return x.Comment
+ }
+ return ""
+}
+
// Rule defines the individual call of a certain rule type.
type Profile_Rule struct {
state protoimpl.MessageState `protogen:"open.v1"`
@@ -14540,7 +14620,7 @@ type Profile_Rule struct {
func (x *Profile_Rule) Reset() {
*x = Profile_Rule{}
- mi := &file_minder_v1_minder_proto_msgTypes[233]
+ mi := &file_minder_v1_minder_proto_msgTypes[234]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -14552,7 +14632,7 @@ func (x *Profile_Rule) String() string {
func (*Profile_Rule) ProtoMessage() {}
func (x *Profile_Rule) ProtoReflect() protoreflect.Message {
- mi := &file_minder_v1_minder_proto_msgTypes[233]
+ mi := &file_minder_v1_minder_proto_msgTypes[234]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -14612,7 +14692,7 @@ type Profile_Selector struct {
func (x *Profile_Selector) Reset() {
*x = Profile_Selector{}
- mi := &file_minder_v1_minder_proto_msgTypes[234]
+ mi := &file_minder_v1_minder_proto_msgTypes[235]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -14624,7 +14704,7 @@ func (x *Profile_Selector) String() string {
func (*Profile_Selector) ProtoMessage() {}
func (x *Profile_Selector) ProtoReflect() protoreflect.Message {
- mi := &file_minder_v1_minder_proto_msgTypes[234]
+ mi := &file_minder_v1_minder_proto_msgTypes[235]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -14678,7 +14758,7 @@ type StructDataSource_Def struct {
func (x *StructDataSource_Def) Reset() {
*x = StructDataSource_Def{}
- mi := &file_minder_v1_minder_proto_msgTypes[236]
+ mi := &file_minder_v1_minder_proto_msgTypes[237]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -14690,7 +14770,7 @@ func (x *StructDataSource_Def) String() string {
func (*StructDataSource_Def) ProtoMessage() {}
func (x *StructDataSource_Def) ProtoReflect() protoreflect.Message {
- mi := &file_minder_v1_minder_proto_msgTypes[236]
+ mi := &file_minder_v1_minder_proto_msgTypes[237]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -14723,7 +14803,7 @@ type StructDataSource_Def_Path struct {
func (x *StructDataSource_Def_Path) Reset() {
*x = StructDataSource_Def_Path{}
- mi := &file_minder_v1_minder_proto_msgTypes[238]
+ mi := &file_minder_v1_minder_proto_msgTypes[239]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -14735,7 +14815,7 @@ func (x *StructDataSource_Def_Path) String() string {
func (*StructDataSource_Def_Path) ProtoMessage() {}
func (x *StructDataSource_Def_Path) ProtoReflect() protoreflect.Message {
- mi := &file_minder_v1_minder_proto_msgTypes[238]
+ mi := &file_minder_v1_minder_proto_msgTypes[239]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -14803,7 +14883,7 @@ type RestDataSource_Def struct {
func (x *RestDataSource_Def) Reset() {
*x = RestDataSource_Def{}
- mi := &file_minder_v1_minder_proto_msgTypes[239]
+ mi := &file_minder_v1_minder_proto_msgTypes[240]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -14815,7 +14895,7 @@ func (x *RestDataSource_Def) String() string {
func (*RestDataSource_Def) ProtoMessage() {}
func (x *RestDataSource_Def) ProtoReflect() protoreflect.Message {
- mi := &file_minder_v1_minder_proto_msgTypes[239]
+ mi := &file_minder_v1_minder_proto_msgTypes[240]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -14952,7 +15032,7 @@ type RestDataSource_Def_Fallback struct {
func (x *RestDataSource_Def_Fallback) Reset() {
*x = RestDataSource_Def_Fallback{}
- mi := &file_minder_v1_minder_proto_msgTypes[242]
+ mi := &file_minder_v1_minder_proto_msgTypes[243]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -14964,7 +15044,7 @@ func (x *RestDataSource_Def_Fallback) String() string {
func (*RestDataSource_Def_Fallback) ProtoMessage() {}
func (x *RestDataSource_Def_Fallback) ProtoReflect() protoreflect.Message {
- mi := &file_minder_v1_minder_proto_msgTypes[242]
+ mi := &file_minder_v1_minder_proto_msgTypes[243]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -15563,7 +15643,7 @@ const file_minder_v1_minder_proto_rawDesc = "" +
"\xea\xdc\x14\x06medium\x12\x18\n" +
"\n" +
"VALUE_HIGH\x10\x05\x1a\b\xea\xdc\x14\x04high\x12 \n" +
- "\x0eVALUE_CRITICAL\x10\x06\x1a\f\xea\xdc\x14\bcritical\"\xed%\n" +
+ "\x0eVALUE_CRITICAL\x10\x06\x1a\f\xea\xdc\x14\bcritical\"\xa0(\n" +
"\bRuleType\x12&\n" +
"\aversion\x18\v \x01(\tB\f\xbaH\tr\a2\x05^v\\d$R\aversion\x12$\n" +
"\x04type\x18\f \x01(\tB\x10\xbaH\rr\v2\trule-typeR\x04type\x12 \n" +
@@ -15577,7 +15657,7 @@ const file_minder_v1_minder_proto_rawDesc = "" +
"\vdescription\x18\x05 \x01(\tB\r\xe0A\x02\xbaH\ar\x05\x10\x01\x18\xdc\vR\vdescription\x12)\n" +
"\bguidance\x18\x06 \x01(\tB\r\xe0A\x02\xbaH\ar\x05\x10\x01\x18\xe8\aR\bguidance\x12/\n" +
"\bseverity\x18\a \x01(\v2\x13.minder.v1.SeverityR\bseverity\x12D\n" +
- "\rrelease_phase\x18\t \x01(\x0e2\x1f.minder.v1.RuleTypeReleasePhaseR\freleasePhase\x1a\xe8 \n" +
+ "\rrelease_phase\x18\t \x01(\x0e2\x1f.minder.v1.RuleTypeReleasePhaseR\freleasePhase\x1a\x9b#\n" +
"\n" +
"Definition\x12;\n" +
"\tin_entity\x18\x01 \x01(\tB\x1e\xbaH\x1br\x19\x10\x01\x18\xc8\x012\x12^[a-z]+(_[a-z]+)*$R\binEntity\x128\n" +
@@ -15664,16 +15744,25 @@ const file_minder_v1_minder_proto_rawDesc = "" +
"\x05_restB\x17\n" +
"\x15_gh_branch_protectionB\x0f\n" +
"\r_pull_requestB\x17\n" +
- "\x15_pull_request_comment\x1a\xc7\x04\n" +
+ "\x15_pull_request_comment\x1a\xfa\x06\n" +
"\x05Alert\x12E\n" +
"\x04type\x18\x01 \x01(\tB1\xbaH.\xd8\x01\x01r)R\x11security_advisoryR\x14pull_request_commentR\x04type\x12b\n" +
"\x11security_advisory\x18\x02 \x01(\v20.minder.v1.RuleType.Definition.Alert.AlertTypeSAH\x00R\x10securityAdvisory\x88\x01\x01\x12n\n" +
"\x14pull_request_comment\x18\x03 \x01(\v27.minder.v1.RuleType.Definition.Alert.AlertTypePRCommentH\x01R\x12pullRequestComment\x88\x01\x01\x1a_\n" +
"\vAlertTypeSA\x12P\n" +
- "\bseverity\x18\x01 \x01(\tB4\xbaH1\xd8\x01\x01r,R\aunknownR\x04infoR\x03lowR\x06mediumR\x04highR\bcriticalR\bseverity\x1a\x92\x01\n" +
+ "\bseverity\x18\x01 \x01(\tB4\xbaH1\xd8\x01\x01r,R\aunknownR\x04infoR\x03lowR\x06mediumR\x04highR\bcriticalR\bseverity\x1a\xc5\x03\n" +
"\x12AlertTypePRComment\x123\n" +
"\x0ereview_message\x18\x01 \x01(\tB\f\xe0A\x02\xbaH\x06r\x04\x18\x80\x80\x04R\rreviewMessage\x12<\n" +
- "\x06action\x18\x02 \x01(\tB\x1f\xbaH\x1cr\x1aR\acommentR\x0frequest_changesH\x00R\x06action\x88\x01\x01B\t\n" +
+ "\x06action\x18\x02 \x01(\tB\x1f\xbaH\x1cr\x1aR\acommentR\x0frequest_changesH\x00R\x06action\x88\x01\x01\x12s\n" +
+ "\rline_comments\x18\x03 \x03(\v2N.minder.v1.RuleType.Definition.Alert.AlertTypePRComment.PullRequestLineCommentR\flineComments\x1a\xbb\x01\n" +
+ "\x16PullRequestLineComment\x12'\n" +
+ "\bfilepath\x18\x01 \x01(\tB\v\xe0A\x02\xbaH\x05r\x03\x18\x80\bR\bfilepath\x12)\n" +
+ "\n" +
+ "line_start\x18\x02 \x01(\x05B\n" +
+ "\xe0A\x02\xbaH\x04\x1a\x02 \x00R\tlineStart\x12%\n" +
+ "\bline_end\x18\x03 \x01(\x05B\n" +
+ "\xe0A\x02\xbaH\x04\x1a\x02 \x00R\alineEnd\x12&\n" +
+ "\acomment\x18\x04 \x01(\tB\f\xe0A\x02\xbaH\x06r\x04\x18\x80\x80\x04R\acommentB\t\n" +
"\a_actionB\x14\n" +
"\x12_security_advisoryB\x17\n" +
"\x15_pull_request_commentB\x0f\n" +
@@ -16288,7 +16377,7 @@ func file_minder_v1_minder_proto_rawDescGZIP() []byte {
}
var file_minder_v1_minder_proto_enumTypes = make([]protoimpl.EnumInfo, 10)
-var file_minder_v1_minder_proto_msgTypes = make([]protoimpl.MessageInfo, 243)
+var file_minder_v1_minder_proto_msgTypes = make([]protoimpl.MessageInfo, 244)
var file_minder_v1_minder_proto_goTypes = []any{
(ObjectOwner)(0), // 0: minder.v1.ObjectOwner
(Relation)(0), // 1: minder.v1.Relation
@@ -16533,22 +16622,23 @@ var file_minder_v1_minder_proto_goTypes = []any{
(*RuleType_Definition_Remediate_PullRequestRemediation_ActionsReplaceTagsWithSha)(nil), // 240: minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.ActionsReplaceTagsWithSha
(*RuleType_Definition_Alert_AlertTypeSA)(nil), // 241: minder.v1.RuleType.Definition.Alert.AlertTypeSA
(*RuleType_Definition_Alert_AlertTypePRComment)(nil), // 242: minder.v1.RuleType.Definition.Alert.AlertTypePRComment
- (*Profile_Rule)(nil), // 243: minder.v1.Profile.Rule
- (*Profile_Selector)(nil), // 244: minder.v1.Profile.Selector
- nil, // 245: minder.v1.RegisterEntityRequest.IdentifyingPropertiesEntry
- (*StructDataSource_Def)(nil), // 246: minder.v1.StructDataSource.Def
- nil, // 247: minder.v1.StructDataSource.DefEntry
- (*StructDataSource_Def_Path)(nil), // 248: minder.v1.StructDataSource.Def.Path
- (*RestDataSource_Def)(nil), // 249: minder.v1.RestDataSource.Def
- nil, // 250: minder.v1.RestDataSource.DefEntry
- nil, // 251: minder.v1.RestDataSource.Def.HeadersEntry
- (*RestDataSource_Def_Fallback)(nil), // 252: minder.v1.RestDataSource.Def.Fallback
- (*timestamppb.Timestamp)(nil), // 253: google.protobuf.Timestamp
- (*structpb.Struct)(nil), // 254: google.protobuf.Struct
- (*fieldmaskpb.FieldMask)(nil), // 255: google.protobuf.FieldMask
- (*structpb.Value)(nil), // 256: google.protobuf.Value
- (*descriptorpb.EnumValueOptions)(nil), // 257: google.protobuf.EnumValueOptions
- (*descriptorpb.MethodOptions)(nil), // 258: google.protobuf.MethodOptions
+ (*RuleType_Definition_Alert_AlertTypePRComment_PullRequestLineComment)(nil), // 243: minder.v1.RuleType.Definition.Alert.AlertTypePRComment.PullRequestLineComment
+ (*Profile_Rule)(nil), // 244: minder.v1.Profile.Rule
+ (*Profile_Selector)(nil), // 245: minder.v1.Profile.Selector
+ nil, // 246: minder.v1.RegisterEntityRequest.IdentifyingPropertiesEntry
+ (*StructDataSource_Def)(nil), // 247: minder.v1.StructDataSource.Def
+ nil, // 248: minder.v1.StructDataSource.DefEntry
+ (*StructDataSource_Def_Path)(nil), // 249: minder.v1.StructDataSource.Def.Path
+ (*RestDataSource_Def)(nil), // 250: minder.v1.RestDataSource.Def
+ nil, // 251: minder.v1.RestDataSource.DefEntry
+ nil, // 252: minder.v1.RestDataSource.Def.HeadersEntry
+ (*RestDataSource_Def_Fallback)(nil), // 253: minder.v1.RestDataSource.Def.Fallback
+ (*timestamppb.Timestamp)(nil), // 254: google.protobuf.Timestamp
+ (*structpb.Struct)(nil), // 255: google.protobuf.Struct
+ (*fieldmaskpb.FieldMask)(nil), // 256: google.protobuf.FieldMask
+ (*structpb.Value)(nil), // 257: google.protobuf.Value
+ (*descriptorpb.EnumValueOptions)(nil), // 258: google.protobuf.EnumValueOptions
+ (*descriptorpb.MethodOptions)(nil), // 259: google.protobuf.MethodOptions
}
var file_minder_v1_minder_proto_depIdxs = []int32{
2, // 0: minder.v1.RpcOptions.target_resource:type_name -> minder.v1.TargetResource
@@ -16558,30 +16648,30 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
115, // 4: minder.v1.ListArtifactsRequest.context:type_name -> minder.v1.Context
17, // 5: minder.v1.ListArtifactsResponse.results:type_name -> minder.v1.Artifact
18, // 6: minder.v1.Artifact.versions:type_name -> minder.v1.ArtifactVersion
- 253, // 7: minder.v1.Artifact.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 7: minder.v1.Artifact.created_at:type_name -> google.protobuf.Timestamp
115, // 8: minder.v1.Artifact.context:type_name -> minder.v1.Context
- 253, // 9: minder.v1.ArtifactVersion.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 9: minder.v1.ArtifactVersion.created_at:type_name -> google.protobuf.Timestamp
115, // 10: minder.v1.GetArtifactByIdRequest.context:type_name -> minder.v1.Context
17, // 11: minder.v1.GetArtifactByIdResponse.artifact:type_name -> minder.v1.Artifact
18, // 12: minder.v1.GetArtifactByIdResponse.versions:type_name -> minder.v1.ArtifactVersion
115, // 13: minder.v1.GetArtifactByNameRequest.context:type_name -> minder.v1.Context
17, // 14: minder.v1.GetArtifactByNameResponse.artifact:type_name -> minder.v1.Artifact
18, // 15: minder.v1.GetArtifactByNameResponse.versions:type_name -> minder.v1.ArtifactVersion
- 253, // 16: minder.v1.GetInviteDetailsResponse.expires_at:type_name -> google.protobuf.Timestamp
+ 254, // 16: minder.v1.GetInviteDetailsResponse.expires_at:type_name -> google.protobuf.Timestamp
115, // 17: minder.v1.GetAuthorizationURLRequest.context:type_name -> minder.v1.Context
- 254, // 18: minder.v1.GetAuthorizationURLRequest.config:type_name -> google.protobuf.Struct
+ 255, // 18: minder.v1.GetAuthorizationURLRequest.config:type_name -> google.protobuf.Struct
115, // 19: minder.v1.StoreProviderTokenRequest.context:type_name -> minder.v1.Context
- 253, // 20: minder.v1.Project.created_at:type_name -> google.protobuf.Timestamp
- 253, // 21: minder.v1.Project.updated_at:type_name -> google.protobuf.Timestamp
+ 254, // 20: minder.v1.Project.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 21: minder.v1.Project.updated_at:type_name -> google.protobuf.Timestamp
115, // 22: minder.v1.ListRemoteRepositoriesFromProviderRequest.context:type_name -> minder.v1.Context
39, // 23: minder.v1.ListRemoteRepositoriesFromProviderResponse.results:type_name -> minder.v1.UpstreamRepositoryRef
38, // 24: minder.v1.ListRemoteRepositoriesFromProviderResponse.entities:type_name -> minder.v1.RegistrableUpstreamEntityRef
212, // 25: minder.v1.RegistrableUpstreamEntityRef.entity:type_name -> minder.v1.UpstreamEntityRef
115, // 26: minder.v1.UpstreamRepositoryRef.context:type_name -> minder.v1.Context
115, // 27: minder.v1.Repository.context:type_name -> minder.v1.Context
- 253, // 28: minder.v1.Repository.created_at:type_name -> google.protobuf.Timestamp
- 253, // 29: minder.v1.Repository.updated_at:type_name -> google.protobuf.Timestamp
- 254, // 30: minder.v1.Repository.properties:type_name -> google.protobuf.Struct
+ 254, // 28: minder.v1.Repository.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 29: minder.v1.Repository.updated_at:type_name -> google.protobuf.Timestamp
+ 255, // 30: minder.v1.Repository.properties:type_name -> google.protobuf.Struct
39, // 31: minder.v1.RegisterRepositoryRequest.repository:type_name -> minder.v1.UpstreamRepositoryRef
115, // 32: minder.v1.RegisterRepositoryRequest.context:type_name -> minder.v1.Context
212, // 33: minder.v1.RegisterRepositoryRequest.entity:type_name -> minder.v1.UpstreamEntityRef
@@ -16597,13 +16687,13 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
115, // 43: minder.v1.ListRepositoriesRequest.context:type_name -> minder.v1.Context
40, // 44: minder.v1.ListRepositoriesResponse.results:type_name -> minder.v1.Repository
115, // 45: minder.v1.ReconcileEntityRegistrationRequest.context:type_name -> minder.v1.Context
- 253, // 46: minder.v1.VerifyProviderTokenFromRequest.timestamp:type_name -> google.protobuf.Timestamp
+ 254, // 46: minder.v1.VerifyProviderTokenFromRequest.timestamp:type_name -> google.protobuf.Timestamp
115, // 47: minder.v1.VerifyProviderTokenFromRequest.context:type_name -> minder.v1.Context
115, // 48: minder.v1.VerifyProviderCredentialRequest.context:type_name -> minder.v1.Context
- 253, // 49: minder.v1.CreateUserResponse.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 49: minder.v1.CreateUserResponse.created_at:type_name -> google.protobuf.Timestamp
115, // 50: minder.v1.CreateUserResponse.context:type_name -> minder.v1.Context
- 253, // 51: minder.v1.UserRecord.created_at:type_name -> google.protobuf.Timestamp
- 253, // 52: minder.v1.UserRecord.updated_at:type_name -> google.protobuf.Timestamp
+ 254, // 51: minder.v1.UserRecord.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 52: minder.v1.UserRecord.updated_at:type_name -> google.protobuf.Timestamp
165, // 53: minder.v1.ProjectRole.role:type_name -> minder.v1.Role
35, // 54: minder.v1.ProjectRole.project:type_name -> minder.v1.Project
64, // 55: minder.v1.GetUserResponse.user:type_name -> minder.v1.UserRecord
@@ -16627,7 +16717,7 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
139, // 73: minder.v1.UpdateProfileResponse.profile:type_name -> minder.v1.Profile
115, // 74: minder.v1.PatchProfileRequest.context:type_name -> minder.v1.Context
139, // 75: minder.v1.PatchProfileRequest.patch:type_name -> minder.v1.Profile
- 255, // 76: minder.v1.PatchProfileRequest.update_mask:type_name -> google.protobuf.FieldMask
+ 256, // 76: minder.v1.PatchProfileRequest.update_mask:type_name -> google.protobuf.FieldMask
139, // 77: minder.v1.PatchProfileResponse.profile:type_name -> minder.v1.Profile
115, // 78: minder.v1.DeleteProfileRequest.context:type_name -> minder.v1.Context
115, // 79: minder.v1.ListProfilesRequest.context:type_name -> minder.v1.Context
@@ -16636,15 +16726,15 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
139, // 82: minder.v1.GetProfileByIdResponse.profile:type_name -> minder.v1.Profile
115, // 83: minder.v1.GetProfileByNameRequest.context:type_name -> minder.v1.Context
139, // 84: minder.v1.GetProfileByNameResponse.profile:type_name -> minder.v1.Profile
- 253, // 85: minder.v1.ProfileStatus.last_updated:type_name -> google.protobuf.Timestamp
- 253, // 86: minder.v1.EvalResultAlert.last_updated:type_name -> google.protobuf.Timestamp
- 253, // 87: minder.v1.RuleEvaluationStatus.last_updated:type_name -> google.protobuf.Timestamp
+ 254, // 85: minder.v1.ProfileStatus.last_updated:type_name -> google.protobuf.Timestamp
+ 254, // 86: minder.v1.EvalResultAlert.last_updated:type_name -> google.protobuf.Timestamp
+ 254, // 87: minder.v1.RuleEvaluationStatus.last_updated:type_name -> google.protobuf.Timestamp
218, // 88: minder.v1.RuleEvaluationStatus.entity_info:type_name -> minder.v1.RuleEvaluationStatus.EntityInfoEntry
- 253, // 89: minder.v1.RuleEvaluationStatus.remediation_last_updated:type_name -> google.protobuf.Timestamp
+ 254, // 89: minder.v1.RuleEvaluationStatus.remediation_last_updated:type_name -> google.protobuf.Timestamp
97, // 90: minder.v1.RuleEvaluationStatus.alert:type_name -> minder.v1.EvalResultAlert
137, // 91: minder.v1.RuleEvaluationStatus.severity:type_name -> minder.v1.Severity
4, // 92: minder.v1.RuleEvaluationStatus.release_phase:type_name -> minder.v1.RuleTypeReleasePhase
- 256, // 93: minder.v1.RuleEvaluationStatus.output:type_name -> google.protobuf.Value
+ 257, // 93: minder.v1.RuleEvaluationStatus.output:type_name -> google.protobuf.Value
3, // 94: minder.v1.EntityTypedId.type:type_name -> minder.v1.Entity
115, // 95: minder.v1.GetProfileStatusByNameRequest.context:type_name -> minder.v1.Context
99, // 96: minder.v1.GetProfileStatusByNameRequest.entity:type_name -> minder.v1.EntityTypedId
@@ -16682,15 +16772,15 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
137, // 128: minder.v1.RuleType.severity:type_name -> minder.v1.Severity
4, // 129: minder.v1.RuleType.release_phase:type_name -> minder.v1.RuleTypeReleasePhase
115, // 130: minder.v1.Profile.context:type_name -> minder.v1.Context
- 243, // 131: minder.v1.Profile.repository:type_name -> minder.v1.Profile.Rule
- 243, // 132: minder.v1.Profile.build_environment:type_name -> minder.v1.Profile.Rule
- 243, // 133: minder.v1.Profile.artifact:type_name -> minder.v1.Profile.Rule
- 243, // 134: minder.v1.Profile.pull_request:type_name -> minder.v1.Profile.Rule
- 243, // 135: minder.v1.Profile.release:type_name -> minder.v1.Profile.Rule
- 243, // 136: minder.v1.Profile.pipeline_run:type_name -> minder.v1.Profile.Rule
- 243, // 137: minder.v1.Profile.task_run:type_name -> minder.v1.Profile.Rule
- 243, // 138: minder.v1.Profile.build:type_name -> minder.v1.Profile.Rule
- 244, // 139: minder.v1.Profile.selection:type_name -> minder.v1.Profile.Selector
+ 244, // 131: minder.v1.Profile.repository:type_name -> minder.v1.Profile.Rule
+ 244, // 132: minder.v1.Profile.build_environment:type_name -> minder.v1.Profile.Rule
+ 244, // 133: minder.v1.Profile.artifact:type_name -> minder.v1.Profile.Rule
+ 244, // 134: minder.v1.Profile.pull_request:type_name -> minder.v1.Profile.Rule
+ 244, // 135: minder.v1.Profile.release:type_name -> minder.v1.Profile.Rule
+ 244, // 136: minder.v1.Profile.pipeline_run:type_name -> minder.v1.Profile.Rule
+ 244, // 137: minder.v1.Profile.task_run:type_name -> minder.v1.Profile.Rule
+ 244, // 138: minder.v1.Profile.build:type_name -> minder.v1.Profile.Rule
+ 245, // 139: minder.v1.Profile.selection:type_name -> minder.v1.Profile.Selector
35, // 140: minder.v1.ListProjectsResponse.projects:type_name -> minder.v1.Project
115, // 141: minder.v1.CreateProjectRequest.context:type_name -> minder.v1.Context
35, // 142: minder.v1.CreateProjectResponse.project:type_name -> minder.v1.Project
@@ -16699,7 +16789,7 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
35, // 145: minder.v1.UpdateProjectResponse.project:type_name -> minder.v1.Project
115, // 146: minder.v1.PatchProjectRequest.context:type_name -> minder.v1.Context
148, // 147: minder.v1.PatchProjectRequest.patch:type_name -> minder.v1.ProjectPatch
- 255, // 148: minder.v1.PatchProjectRequest.update_mask:type_name -> google.protobuf.FieldMask
+ 256, // 148: minder.v1.PatchProjectRequest.update_mask:type_name -> google.protobuf.FieldMask
35, // 149: minder.v1.PatchProjectResponse.project:type_name -> minder.v1.Project
116, // 150: minder.v1.ListChildProjectsRequest.context:type_name -> minder.v1.ContextV2
35, // 151: minder.v1.ListChildProjectsResponse.projects:type_name -> minder.v1.Project
@@ -16722,8 +16812,8 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
166, // 168: minder.v1.RemoveRoleResponse.role_assignment:type_name -> minder.v1.RoleAssignment
171, // 169: minder.v1.RemoveRoleResponse.invitation:type_name -> minder.v1.Invitation
171, // 170: minder.v1.ListInvitationsResponse.invitations:type_name -> minder.v1.Invitation
- 253, // 171: minder.v1.Invitation.created_at:type_name -> google.protobuf.Timestamp
- 253, // 172: minder.v1.Invitation.expires_at:type_name -> google.protobuf.Timestamp
+ 254, // 171: minder.v1.Invitation.created_at:type_name -> google.protobuf.Timestamp
+ 254, // 172: minder.v1.Invitation.expires_at:type_name -> google.protobuf.Timestamp
115, // 173: minder.v1.GetProviderRequest.context:type_name -> minder.v1.Context
190, // 174: minder.v1.GetProviderResponse.provider:type_name -> minder.v1.Provider
115, // 175: minder.v1.ListProvidersRequest.context:type_name -> minder.v1.Context
@@ -16741,17 +16831,17 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
183, // 187: minder.v1.ListProviderClassesResponse.provider_class_infos:type_name -> minder.v1.ProviderClassInfo
115, // 188: minder.v1.PatchProviderRequest.context:type_name -> minder.v1.Context
190, // 189: minder.v1.PatchProviderRequest.patch:type_name -> minder.v1.Provider
- 255, // 190: minder.v1.PatchProviderRequest.update_mask:type_name -> google.protobuf.FieldMask
+ 256, // 190: minder.v1.PatchProviderRequest.update_mask:type_name -> google.protobuf.FieldMask
190, // 191: minder.v1.PatchProviderResponse.provider:type_name -> minder.v1.Provider
189, // 192: minder.v1.ProviderParameter.github_app:type_name -> minder.v1.GitHubAppParams
5, // 193: minder.v1.Provider.implements:type_name -> minder.v1.ProviderType
- 254, // 194: minder.v1.Provider.config:type_name -> google.protobuf.Struct
+ 255, // 194: minder.v1.Provider.config:type_name -> google.protobuf.Struct
7, // 195: minder.v1.Provider.auth_flows:type_name -> minder.v1.AuthorizationFlow
188, // 196: minder.v1.Provider.parameters:type_name -> minder.v1.ProviderParameter
115, // 197: minder.v1.GetEvaluationHistoryRequest.context:type_name -> minder.v1.Context
115, // 198: minder.v1.ListEvaluationHistoryRequest.context:type_name -> minder.v1.Context
- 253, // 199: minder.v1.ListEvaluationHistoryRequest.from:type_name -> google.protobuf.Timestamp
- 253, // 200: minder.v1.ListEvaluationHistoryRequest.to:type_name -> google.protobuf.Timestamp
+ 254, // 199: minder.v1.ListEvaluationHistoryRequest.from:type_name -> google.protobuf.Timestamp
+ 254, // 200: minder.v1.ListEvaluationHistoryRequest.to:type_name -> google.protobuf.Timestamp
11, // 201: minder.v1.ListEvaluationHistoryRequest.cursor:type_name -> minder.v1.Cursor
195, // 202: minder.v1.GetEvaluationHistoryResponse.evaluation:type_name -> minder.v1.EvaluationHistory
195, // 203: minder.v1.ListEvaluationHistoryResponse.data:type_name -> minder.v1.EvaluationHistory
@@ -16761,13 +16851,13 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
198, // 207: minder.v1.EvaluationHistory.status:type_name -> minder.v1.EvaluationHistoryStatus
200, // 208: minder.v1.EvaluationHistory.alert:type_name -> minder.v1.EvaluationHistoryAlert
199, // 209: minder.v1.EvaluationHistory.remediation:type_name -> minder.v1.EvaluationHistoryRemediation
- 253, // 210: minder.v1.EvaluationHistory.evaluated_at:type_name -> google.protobuf.Timestamp
+ 254, // 210: minder.v1.EvaluationHistory.evaluated_at:type_name -> google.protobuf.Timestamp
3, // 211: minder.v1.EvaluationHistoryEntity.type:type_name -> minder.v1.Entity
137, // 212: minder.v1.EvaluationHistoryRule.severity:type_name -> minder.v1.Severity
- 256, // 213: minder.v1.EvaluationHistoryStatus.output:type_name -> google.protobuf.Value
+ 257, // 213: minder.v1.EvaluationHistoryStatus.output:type_name -> google.protobuf.Value
116, // 214: minder.v1.EntityInstance.context:type_name -> minder.v1.ContextV2
3, // 215: minder.v1.EntityInstance.type:type_name -> minder.v1.Entity
- 254, // 216: minder.v1.EntityInstance.properties:type_name -> google.protobuf.Struct
+ 255, // 216: minder.v1.EntityInstance.properties:type_name -> google.protobuf.Struct
116, // 217: minder.v1.ListEntitiesRequest.context:type_name -> minder.v1.ContextV2
3, // 218: minder.v1.ListEntitiesRequest.entity_type:type_name -> minder.v1.Entity
11, // 219: minder.v1.ListEntitiesRequest.cursor:type_name -> minder.v1.Cursor
@@ -16781,23 +16871,23 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
116, // 227: minder.v1.DeleteEntityByIdRequest.context:type_name -> minder.v1.ContextV2
116, // 228: minder.v1.RegisterEntityRequest.context:type_name -> minder.v1.ContextV2
3, // 229: minder.v1.RegisterEntityRequest.entity_type:type_name -> minder.v1.Entity
- 245, // 230: minder.v1.RegisterEntityRequest.identifying_properties:type_name -> minder.v1.RegisterEntityRequest.IdentifyingPropertiesEntry
+ 246, // 230: minder.v1.RegisterEntityRequest.identifying_properties:type_name -> minder.v1.RegisterEntityRequest.IdentifyingPropertiesEntry
201, // 231: minder.v1.RegisterEntityResponse.entity:type_name -> minder.v1.EntityInstance
116, // 232: minder.v1.UpstreamEntityRef.context:type_name -> minder.v1.ContextV2
3, // 233: minder.v1.UpstreamEntityRef.type:type_name -> minder.v1.Entity
- 254, // 234: minder.v1.UpstreamEntityRef.properties:type_name -> google.protobuf.Struct
+ 255, // 234: minder.v1.UpstreamEntityRef.properties:type_name -> google.protobuf.Struct
116, // 235: minder.v1.DataSource.context:type_name -> minder.v1.ContextV2
214, // 236: minder.v1.DataSource.structured:type_name -> minder.v1.StructDataSource
215, // 237: minder.v1.DataSource.rest:type_name -> minder.v1.RestDataSource
- 247, // 238: minder.v1.StructDataSource.def:type_name -> minder.v1.StructDataSource.DefEntry
- 250, // 239: minder.v1.RestDataSource.def:type_name -> minder.v1.RestDataSource.DefEntry
+ 248, // 238: minder.v1.StructDataSource.def:type_name -> minder.v1.StructDataSource.DefEntry
+ 251, // 239: minder.v1.RestDataSource.def:type_name -> minder.v1.RestDataSource.DefEntry
106, // 240: minder.v1.AutoRegistration.EntitiesEntry.value:type_name -> minder.v1.EntityAutoRegistrationConfig
96, // 241: minder.v1.ListEvaluationResultsResponse.EntityProfileEvaluationResults.profile_status:type_name -> minder.v1.ProfileStatus
98, // 242: minder.v1.ListEvaluationResultsResponse.EntityProfileEvaluationResults.results:type_name -> minder.v1.RuleEvaluationStatus
99, // 243: minder.v1.ListEvaluationResultsResponse.EntityEvaluationResults.entity:type_name -> minder.v1.EntityTypedId
220, // 244: minder.v1.ListEvaluationResultsResponse.EntityEvaluationResults.profiles:type_name -> minder.v1.ListEvaluationResultsResponse.EntityProfileEvaluationResults
- 254, // 245: minder.v1.RuleType.Definition.rule_schema:type_name -> google.protobuf.Struct
- 254, // 246: minder.v1.RuleType.Definition.param_schema:type_name -> google.protobuf.Struct
+ 255, // 245: minder.v1.RuleType.Definition.rule_schema:type_name -> google.protobuf.Struct
+ 255, // 246: minder.v1.RuleType.Definition.param_schema:type_name -> google.protobuf.Struct
227, // 247: minder.v1.RuleType.Definition.ingest:type_name -> minder.v1.RuleType.Definition.Ingest
228, // 248: minder.v1.RuleType.Definition.eval:type_name -> minder.v1.RuleType.Definition.Eval
229, // 249: minder.v1.RuleType.Definition.remediate:type_name -> minder.v1.RuleType.Definition.Remediate
@@ -16822,174 +16912,175 @@ var file_minder_v1_minder_proto_depIdxs = []int32{
242, // 268: minder.v1.RuleType.Definition.Alert.pull_request_comment:type_name -> minder.v1.RuleType.Definition.Alert.AlertTypePRComment
236, // 269: minder.v1.RuleType.Definition.Eval.JQComparison.ingested:type_name -> minder.v1.RuleType.Definition.Eval.JQComparison.Operator
236, // 270: minder.v1.RuleType.Definition.Eval.JQComparison.profile:type_name -> minder.v1.RuleType.Definition.Eval.JQComparison.Operator
- 256, // 271: minder.v1.RuleType.Definition.Eval.JQComparison.constant:type_name -> google.protobuf.Value
+ 257, // 271: minder.v1.RuleType.Definition.Eval.JQComparison.constant:type_name -> google.protobuf.Value
239, // 272: minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.contents:type_name -> minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.Content
- 254, // 273: minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.params:type_name -> google.protobuf.Struct
+ 255, // 273: minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.params:type_name -> google.protobuf.Struct
240, // 274: minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.actions_replace_tags_with_sha:type_name -> minder.v1.RuleType.Definition.Remediate.PullRequestRemediation.ActionsReplaceTagsWithSha
- 254, // 275: minder.v1.Profile.Rule.params:type_name -> google.protobuf.Struct
- 254, // 276: minder.v1.Profile.Rule.def:type_name -> google.protobuf.Struct
- 256, // 277: minder.v1.RegisterEntityRequest.IdentifyingPropertiesEntry.value:type_name -> google.protobuf.Value
- 248, // 278: minder.v1.StructDataSource.Def.path:type_name -> minder.v1.StructDataSource.Def.Path
- 246, // 279: minder.v1.StructDataSource.DefEntry.value:type_name -> minder.v1.StructDataSource.Def
- 251, // 280: minder.v1.RestDataSource.Def.headers:type_name -> minder.v1.RestDataSource.Def.HeadersEntry
- 254, // 281: minder.v1.RestDataSource.Def.bodyobj:type_name -> google.protobuf.Struct
- 252, // 282: minder.v1.RestDataSource.Def.fallback:type_name -> minder.v1.RestDataSource.Def.Fallback
- 254, // 283: minder.v1.RestDataSource.Def.input_schema:type_name -> google.protobuf.Struct
- 249, // 284: minder.v1.RestDataSource.DefEntry.value:type_name -> minder.v1.RestDataSource.Def
- 257, // 285: minder.v1.name:extendee -> google.protobuf.EnumValueOptions
- 258, // 286: minder.v1.rpc_options:extendee -> google.protobuf.MethodOptions
- 10, // 287: minder.v1.rpc_options:type_name -> minder.v1.RpcOptions
- 29, // 288: minder.v1.HealthService.CheckHealth:input_type -> minder.v1.CheckHealthRequest
- 13, // 289: minder.v1.HealthService.GetVersion:input_type -> minder.v1.GetVersionRequest
- 15, // 290: minder.v1.ArtifactService.ListArtifacts:input_type -> minder.v1.ListArtifactsRequest
- 19, // 291: minder.v1.ArtifactService.GetArtifactById:input_type -> minder.v1.GetArtifactByIdRequest
- 21, // 292: minder.v1.ArtifactService.GetArtifactByName:input_type -> minder.v1.GetArtifactByNameRequest
- 31, // 293: minder.v1.OAuthService.GetAuthorizationURL:input_type -> minder.v1.GetAuthorizationURLRequest
- 33, // 294: minder.v1.OAuthService.StoreProviderToken:input_type -> minder.v1.StoreProviderTokenRequest
- 56, // 295: minder.v1.OAuthService.VerifyProviderTokenFrom:input_type -> minder.v1.VerifyProviderTokenFromRequest
- 58, // 296: minder.v1.OAuthService.VerifyProviderCredential:input_type -> minder.v1.VerifyProviderCredentialRequest
- 41, // 297: minder.v1.RepositoryService.RegisterRepository:input_type -> minder.v1.RegisterRepositoryRequest
- 36, // 298: minder.v1.RepositoryService.ListRemoteRepositoriesFromProvider:input_type -> minder.v1.ListRemoteRepositoriesFromProviderRequest
- 52, // 299: minder.v1.RepositoryService.ListRepositories:input_type -> minder.v1.ListRepositoriesRequest
- 44, // 300: minder.v1.RepositoryService.GetRepositoryById:input_type -> minder.v1.GetRepositoryByIdRequest
- 48, // 301: minder.v1.RepositoryService.GetRepositoryByName:input_type -> minder.v1.GetRepositoryByNameRequest
- 46, // 302: minder.v1.RepositoryService.DeleteRepositoryById:input_type -> minder.v1.DeleteRepositoryByIdRequest
- 50, // 303: minder.v1.RepositoryService.DeleteRepositoryByName:input_type -> minder.v1.DeleteRepositoryByNameRequest
- 60, // 304: minder.v1.UserService.CreateUser:input_type -> minder.v1.CreateUserRequest
- 62, // 305: minder.v1.UserService.DeleteUser:input_type -> minder.v1.DeleteUserRequest
- 66, // 306: minder.v1.UserService.GetUser:input_type -> minder.v1.GetUserRequest
- 167, // 307: minder.v1.UserService.ListInvitations:input_type -> minder.v1.ListInvitationsRequest
- 169, // 308: minder.v1.UserService.ResolveInvitation:input_type -> minder.v1.ResolveInvitationRequest
- 82, // 309: minder.v1.ProfileService.CreateProfile:input_type -> minder.v1.CreateProfileRequest
- 84, // 310: minder.v1.ProfileService.UpdateProfile:input_type -> minder.v1.UpdateProfileRequest
- 86, // 311: minder.v1.ProfileService.PatchProfile:input_type -> minder.v1.PatchProfileRequest
- 88, // 312: minder.v1.ProfileService.DeleteProfile:input_type -> minder.v1.DeleteProfileRequest
- 90, // 313: minder.v1.ProfileService.ListProfiles:input_type -> minder.v1.ListProfilesRequest
- 92, // 314: minder.v1.ProfileService.GetProfileById:input_type -> minder.v1.GetProfileByIdRequest
- 94, // 315: minder.v1.ProfileService.GetProfileByName:input_type -> minder.v1.GetProfileByNameRequest
- 100, // 316: minder.v1.ProfileService.GetProfileStatusByName:input_type -> minder.v1.GetProfileStatusByNameRequest
- 102, // 317: minder.v1.ProfileService.GetProfileStatusById:input_type -> minder.v1.GetProfileStatusByIdRequest
- 104, // 318: minder.v1.ProfileService.GetProfileStatusByProject:input_type -> minder.v1.GetProfileStatusByProjectRequest
- 68, // 319: minder.v1.DataSourceService.CreateDataSource:input_type -> minder.v1.CreateDataSourceRequest
- 70, // 320: minder.v1.DataSourceService.GetDataSourceById:input_type -> minder.v1.GetDataSourceByIdRequest
- 72, // 321: minder.v1.DataSourceService.GetDataSourceByName:input_type -> minder.v1.GetDataSourceByNameRequest
- 74, // 322: minder.v1.DataSourceService.ListDataSources:input_type -> minder.v1.ListDataSourcesRequest
- 76, // 323: minder.v1.DataSourceService.UpdateDataSource:input_type -> minder.v1.UpdateDataSourceRequest
- 78, // 324: minder.v1.DataSourceService.DeleteDataSourceById:input_type -> minder.v1.DeleteDataSourceByIdRequest
- 80, // 325: minder.v1.DataSourceService.DeleteDataSourceByName:input_type -> minder.v1.DeleteDataSourceByNameRequest
- 117, // 326: minder.v1.RuleTypeService.ListRuleTypes:input_type -> minder.v1.ListRuleTypesRequest
- 119, // 327: minder.v1.RuleTypeService.GetRuleTypeByName:input_type -> minder.v1.GetRuleTypeByNameRequest
- 121, // 328: minder.v1.RuleTypeService.GetRuleTypeById:input_type -> minder.v1.GetRuleTypeByIdRequest
- 123, // 329: minder.v1.RuleTypeService.CreateRuleType:input_type -> minder.v1.CreateRuleTypeRequest
- 125, // 330: minder.v1.RuleTypeService.UpdateRuleType:input_type -> minder.v1.UpdateRuleTypeRequest
- 127, // 331: minder.v1.RuleTypeService.DeleteRuleType:input_type -> minder.v1.DeleteRuleTypeRequest
- 129, // 332: minder.v1.EvalResultsService.ListEvaluationResults:input_type -> minder.v1.ListEvaluationResultsRequest
- 192, // 333: minder.v1.EvalResultsService.ListEvaluationHistory:input_type -> minder.v1.ListEvaluationHistoryRequest
- 191, // 334: minder.v1.EvalResultsService.GetEvaluationHistory:input_type -> minder.v1.GetEvaluationHistoryRequest
- 155, // 335: minder.v1.PermissionsService.ListRoles:input_type -> minder.v1.ListRolesRequest
- 157, // 336: minder.v1.PermissionsService.ListRoleAssignments:input_type -> minder.v1.ListRoleAssignmentsRequest
- 159, // 337: minder.v1.PermissionsService.AssignRole:input_type -> minder.v1.AssignRoleRequest
- 161, // 338: minder.v1.PermissionsService.UpdateRole:input_type -> minder.v1.UpdateRoleRequest
- 163, // 339: minder.v1.PermissionsService.RemoveRole:input_type -> minder.v1.RemoveRoleRequest
- 140, // 340: minder.v1.ProjectsService.ListProjects:input_type -> minder.v1.ListProjectsRequest
- 142, // 341: minder.v1.ProjectsService.CreateProject:input_type -> minder.v1.CreateProjectRequest
- 151, // 342: minder.v1.ProjectsService.ListChildProjects:input_type -> minder.v1.ListChildProjectsRequest
- 144, // 343: minder.v1.ProjectsService.DeleteProject:input_type -> minder.v1.DeleteProjectRequest
- 146, // 344: minder.v1.ProjectsService.UpdateProject:input_type -> minder.v1.UpdateProjectRequest
- 149, // 345: minder.v1.ProjectsService.PatchProject:input_type -> minder.v1.PatchProjectRequest
- 153, // 346: minder.v1.ProjectsService.CreateEntityReconciliationTask:input_type -> minder.v1.CreateEntityReconciliationTaskRequest
- 185, // 347: minder.v1.ProvidersService.PatchProvider:input_type -> minder.v1.PatchProviderRequest
- 172, // 348: minder.v1.ProvidersService.GetProvider:input_type -> minder.v1.GetProviderRequest
- 174, // 349: minder.v1.ProvidersService.ListProviders:input_type -> minder.v1.ListProvidersRequest
- 176, // 350: minder.v1.ProvidersService.CreateProvider:input_type -> minder.v1.CreateProviderRequest
- 178, // 351: minder.v1.ProvidersService.DeleteProvider:input_type -> minder.v1.DeleteProviderRequest
- 180, // 352: minder.v1.ProvidersService.DeleteProviderByID:input_type -> minder.v1.DeleteProviderByIDRequest
- 182, // 353: minder.v1.ProvidersService.ListProviderClasses:input_type -> minder.v1.ListProviderClassesRequest
- 54, // 354: minder.v1.ProvidersService.ReconcileEntityRegistration:input_type -> minder.v1.ReconcileEntityRegistrationRequest
- 27, // 355: minder.v1.InviteService.GetInviteDetails:input_type -> minder.v1.GetInviteDetailsRequest
- 202, // 356: minder.v1.EntityInstanceService.ListEntities:input_type -> minder.v1.ListEntitiesRequest
- 204, // 357: minder.v1.EntityInstanceService.GetEntityById:input_type -> minder.v1.GetEntityByIdRequest
- 206, // 358: minder.v1.EntityInstanceService.GetEntityByName:input_type -> minder.v1.GetEntityByNameRequest
- 208, // 359: minder.v1.EntityInstanceService.DeleteEntityById:input_type -> minder.v1.DeleteEntityByIdRequest
- 210, // 360: minder.v1.EntityInstanceService.RegisterEntity:input_type -> minder.v1.RegisterEntityRequest
- 30, // 361: minder.v1.HealthService.CheckHealth:output_type -> minder.v1.CheckHealthResponse
- 14, // 362: minder.v1.HealthService.GetVersion:output_type -> minder.v1.GetVersionResponse
- 16, // 363: minder.v1.ArtifactService.ListArtifacts:output_type -> minder.v1.ListArtifactsResponse
- 20, // 364: minder.v1.ArtifactService.GetArtifactById:output_type -> minder.v1.GetArtifactByIdResponse
- 22, // 365: minder.v1.ArtifactService.GetArtifactByName:output_type -> minder.v1.GetArtifactByNameResponse
- 32, // 366: minder.v1.OAuthService.GetAuthorizationURL:output_type -> minder.v1.GetAuthorizationURLResponse
- 34, // 367: minder.v1.OAuthService.StoreProviderToken:output_type -> minder.v1.StoreProviderTokenResponse
- 57, // 368: minder.v1.OAuthService.VerifyProviderTokenFrom:output_type -> minder.v1.VerifyProviderTokenFromResponse
- 59, // 369: minder.v1.OAuthService.VerifyProviderCredential:output_type -> minder.v1.VerifyProviderCredentialResponse
- 43, // 370: minder.v1.RepositoryService.RegisterRepository:output_type -> minder.v1.RegisterRepositoryResponse
- 37, // 371: minder.v1.RepositoryService.ListRemoteRepositoriesFromProvider:output_type -> minder.v1.ListRemoteRepositoriesFromProviderResponse
- 53, // 372: minder.v1.RepositoryService.ListRepositories:output_type -> minder.v1.ListRepositoriesResponse
- 45, // 373: minder.v1.RepositoryService.GetRepositoryById:output_type -> minder.v1.GetRepositoryByIdResponse
- 49, // 374: minder.v1.RepositoryService.GetRepositoryByName:output_type -> minder.v1.GetRepositoryByNameResponse
- 47, // 375: minder.v1.RepositoryService.DeleteRepositoryById:output_type -> minder.v1.DeleteRepositoryByIdResponse
- 51, // 376: minder.v1.RepositoryService.DeleteRepositoryByName:output_type -> minder.v1.DeleteRepositoryByNameResponse
- 61, // 377: minder.v1.UserService.CreateUser:output_type -> minder.v1.CreateUserResponse
- 63, // 378: minder.v1.UserService.DeleteUser:output_type -> minder.v1.DeleteUserResponse
- 67, // 379: minder.v1.UserService.GetUser:output_type -> minder.v1.GetUserResponse
- 168, // 380: minder.v1.UserService.ListInvitations:output_type -> minder.v1.ListInvitationsResponse
- 170, // 381: minder.v1.UserService.ResolveInvitation:output_type -> minder.v1.ResolveInvitationResponse
- 83, // 382: minder.v1.ProfileService.CreateProfile:output_type -> minder.v1.CreateProfileResponse
- 85, // 383: minder.v1.ProfileService.UpdateProfile:output_type -> minder.v1.UpdateProfileResponse
- 87, // 384: minder.v1.ProfileService.PatchProfile:output_type -> minder.v1.PatchProfileResponse
- 89, // 385: minder.v1.ProfileService.DeleteProfile:output_type -> minder.v1.DeleteProfileResponse
- 91, // 386: minder.v1.ProfileService.ListProfiles:output_type -> minder.v1.ListProfilesResponse
- 93, // 387: minder.v1.ProfileService.GetProfileById:output_type -> minder.v1.GetProfileByIdResponse
- 95, // 388: minder.v1.ProfileService.GetProfileByName:output_type -> minder.v1.GetProfileByNameResponse
- 101, // 389: minder.v1.ProfileService.GetProfileStatusByName:output_type -> minder.v1.GetProfileStatusByNameResponse
- 103, // 390: minder.v1.ProfileService.GetProfileStatusById:output_type -> minder.v1.GetProfileStatusByIdResponse
- 105, // 391: minder.v1.ProfileService.GetProfileStatusByProject:output_type -> minder.v1.GetProfileStatusByProjectResponse
- 69, // 392: minder.v1.DataSourceService.CreateDataSource:output_type -> minder.v1.CreateDataSourceResponse
- 71, // 393: minder.v1.DataSourceService.GetDataSourceById:output_type -> minder.v1.GetDataSourceByIdResponse
- 73, // 394: minder.v1.DataSourceService.GetDataSourceByName:output_type -> minder.v1.GetDataSourceByNameResponse
- 75, // 395: minder.v1.DataSourceService.ListDataSources:output_type -> minder.v1.ListDataSourcesResponse
- 77, // 396: minder.v1.DataSourceService.UpdateDataSource:output_type -> minder.v1.UpdateDataSourceResponse
- 79, // 397: minder.v1.DataSourceService.DeleteDataSourceById:output_type -> minder.v1.DeleteDataSourceByIdResponse
- 81, // 398: minder.v1.DataSourceService.DeleteDataSourceByName:output_type -> minder.v1.DeleteDataSourceByNameResponse
- 118, // 399: minder.v1.RuleTypeService.ListRuleTypes:output_type -> minder.v1.ListRuleTypesResponse
- 120, // 400: minder.v1.RuleTypeService.GetRuleTypeByName:output_type -> minder.v1.GetRuleTypeByNameResponse
- 122, // 401: minder.v1.RuleTypeService.GetRuleTypeById:output_type -> minder.v1.GetRuleTypeByIdResponse
- 124, // 402: minder.v1.RuleTypeService.CreateRuleType:output_type -> minder.v1.CreateRuleTypeResponse
- 126, // 403: minder.v1.RuleTypeService.UpdateRuleType:output_type -> minder.v1.UpdateRuleTypeResponse
- 128, // 404: minder.v1.RuleTypeService.DeleteRuleType:output_type -> minder.v1.DeleteRuleTypeResponse
- 130, // 405: minder.v1.EvalResultsService.ListEvaluationResults:output_type -> minder.v1.ListEvaluationResultsResponse
- 194, // 406: minder.v1.EvalResultsService.ListEvaluationHistory:output_type -> minder.v1.ListEvaluationHistoryResponse
- 193, // 407: minder.v1.EvalResultsService.GetEvaluationHistory:output_type -> minder.v1.GetEvaluationHistoryResponse
- 156, // 408: minder.v1.PermissionsService.ListRoles:output_type -> minder.v1.ListRolesResponse
- 158, // 409: minder.v1.PermissionsService.ListRoleAssignments:output_type -> minder.v1.ListRoleAssignmentsResponse
- 160, // 410: minder.v1.PermissionsService.AssignRole:output_type -> minder.v1.AssignRoleResponse
- 162, // 411: minder.v1.PermissionsService.UpdateRole:output_type -> minder.v1.UpdateRoleResponse
- 164, // 412: minder.v1.PermissionsService.RemoveRole:output_type -> minder.v1.RemoveRoleResponse
- 141, // 413: minder.v1.ProjectsService.ListProjects:output_type -> minder.v1.ListProjectsResponse
- 143, // 414: minder.v1.ProjectsService.CreateProject:output_type -> minder.v1.CreateProjectResponse
- 152, // 415: minder.v1.ProjectsService.ListChildProjects:output_type -> minder.v1.ListChildProjectsResponse
- 145, // 416: minder.v1.ProjectsService.DeleteProject:output_type -> minder.v1.DeleteProjectResponse
- 147, // 417: minder.v1.ProjectsService.UpdateProject:output_type -> minder.v1.UpdateProjectResponse
- 150, // 418: minder.v1.ProjectsService.PatchProject:output_type -> minder.v1.PatchProjectResponse
- 154, // 419: minder.v1.ProjectsService.CreateEntityReconciliationTask:output_type -> minder.v1.CreateEntityReconciliationTaskResponse
- 186, // 420: minder.v1.ProvidersService.PatchProvider:output_type -> minder.v1.PatchProviderResponse
- 173, // 421: minder.v1.ProvidersService.GetProvider:output_type -> minder.v1.GetProviderResponse
- 175, // 422: minder.v1.ProvidersService.ListProviders:output_type -> minder.v1.ListProvidersResponse
- 177, // 423: minder.v1.ProvidersService.CreateProvider:output_type -> minder.v1.CreateProviderResponse
- 179, // 424: minder.v1.ProvidersService.DeleteProvider:output_type -> minder.v1.DeleteProviderResponse
- 181, // 425: minder.v1.ProvidersService.DeleteProviderByID:output_type -> minder.v1.DeleteProviderByIDResponse
- 184, // 426: minder.v1.ProvidersService.ListProviderClasses:output_type -> minder.v1.ListProviderClassesResponse
- 55, // 427: minder.v1.ProvidersService.ReconcileEntityRegistration:output_type -> minder.v1.ReconcileEntityRegistrationResponse
- 28, // 428: minder.v1.InviteService.GetInviteDetails:output_type -> minder.v1.GetInviteDetailsResponse
- 203, // 429: minder.v1.EntityInstanceService.ListEntities:output_type -> minder.v1.ListEntitiesResponse
- 205, // 430: minder.v1.EntityInstanceService.GetEntityById:output_type -> minder.v1.GetEntityByIdResponse
- 207, // 431: minder.v1.EntityInstanceService.GetEntityByName:output_type -> minder.v1.GetEntityByNameResponse
- 209, // 432: minder.v1.EntityInstanceService.DeleteEntityById:output_type -> minder.v1.DeleteEntityByIdResponse
- 211, // 433: minder.v1.EntityInstanceService.RegisterEntity:output_type -> minder.v1.RegisterEntityResponse
- 361, // [361:434] is the sub-list for method output_type
- 288, // [288:361] is the sub-list for method input_type
- 287, // [287:288] is the sub-list for extension type_name
- 285, // [285:287] is the sub-list for extension extendee
- 0, // [0:285] is the sub-list for field type_name
+ 243, // 275: minder.v1.RuleType.Definition.Alert.AlertTypePRComment.line_comments:type_name -> minder.v1.RuleType.Definition.Alert.AlertTypePRComment.PullRequestLineComment
+ 255, // 276: minder.v1.Profile.Rule.params:type_name -> google.protobuf.Struct
+ 255, // 277: minder.v1.Profile.Rule.def:type_name -> google.protobuf.Struct
+ 257, // 278: minder.v1.RegisterEntityRequest.IdentifyingPropertiesEntry.value:type_name -> google.protobuf.Value
+ 249, // 279: minder.v1.StructDataSource.Def.path:type_name -> minder.v1.StructDataSource.Def.Path
+ 247, // 280: minder.v1.StructDataSource.DefEntry.value:type_name -> minder.v1.StructDataSource.Def
+ 252, // 281: minder.v1.RestDataSource.Def.headers:type_name -> minder.v1.RestDataSource.Def.HeadersEntry
+ 255, // 282: minder.v1.RestDataSource.Def.bodyobj:type_name -> google.protobuf.Struct
+ 253, // 283: minder.v1.RestDataSource.Def.fallback:type_name -> minder.v1.RestDataSource.Def.Fallback
+ 255, // 284: minder.v1.RestDataSource.Def.input_schema:type_name -> google.protobuf.Struct
+ 250, // 285: minder.v1.RestDataSource.DefEntry.value:type_name -> minder.v1.RestDataSource.Def
+ 258, // 286: minder.v1.name:extendee -> google.protobuf.EnumValueOptions
+ 259, // 287: minder.v1.rpc_options:extendee -> google.protobuf.MethodOptions
+ 10, // 288: minder.v1.rpc_options:type_name -> minder.v1.RpcOptions
+ 29, // 289: minder.v1.HealthService.CheckHealth:input_type -> minder.v1.CheckHealthRequest
+ 13, // 290: minder.v1.HealthService.GetVersion:input_type -> minder.v1.GetVersionRequest
+ 15, // 291: minder.v1.ArtifactService.ListArtifacts:input_type -> minder.v1.ListArtifactsRequest
+ 19, // 292: minder.v1.ArtifactService.GetArtifactById:input_type -> minder.v1.GetArtifactByIdRequest
+ 21, // 293: minder.v1.ArtifactService.GetArtifactByName:input_type -> minder.v1.GetArtifactByNameRequest
+ 31, // 294: minder.v1.OAuthService.GetAuthorizationURL:input_type -> minder.v1.GetAuthorizationURLRequest
+ 33, // 295: minder.v1.OAuthService.StoreProviderToken:input_type -> minder.v1.StoreProviderTokenRequest
+ 56, // 296: minder.v1.OAuthService.VerifyProviderTokenFrom:input_type -> minder.v1.VerifyProviderTokenFromRequest
+ 58, // 297: minder.v1.OAuthService.VerifyProviderCredential:input_type -> minder.v1.VerifyProviderCredentialRequest
+ 41, // 298: minder.v1.RepositoryService.RegisterRepository:input_type -> minder.v1.RegisterRepositoryRequest
+ 36, // 299: minder.v1.RepositoryService.ListRemoteRepositoriesFromProvider:input_type -> minder.v1.ListRemoteRepositoriesFromProviderRequest
+ 52, // 300: minder.v1.RepositoryService.ListRepositories:input_type -> minder.v1.ListRepositoriesRequest
+ 44, // 301: minder.v1.RepositoryService.GetRepositoryById:input_type -> minder.v1.GetRepositoryByIdRequest
+ 48, // 302: minder.v1.RepositoryService.GetRepositoryByName:input_type -> minder.v1.GetRepositoryByNameRequest
+ 46, // 303: minder.v1.RepositoryService.DeleteRepositoryById:input_type -> minder.v1.DeleteRepositoryByIdRequest
+ 50, // 304: minder.v1.RepositoryService.DeleteRepositoryByName:input_type -> minder.v1.DeleteRepositoryByNameRequest
+ 60, // 305: minder.v1.UserService.CreateUser:input_type -> minder.v1.CreateUserRequest
+ 62, // 306: minder.v1.UserService.DeleteUser:input_type -> minder.v1.DeleteUserRequest
+ 66, // 307: minder.v1.UserService.GetUser:input_type -> minder.v1.GetUserRequest
+ 167, // 308: minder.v1.UserService.ListInvitations:input_type -> minder.v1.ListInvitationsRequest
+ 169, // 309: minder.v1.UserService.ResolveInvitation:input_type -> minder.v1.ResolveInvitationRequest
+ 82, // 310: minder.v1.ProfileService.CreateProfile:input_type -> minder.v1.CreateProfileRequest
+ 84, // 311: minder.v1.ProfileService.UpdateProfile:input_type -> minder.v1.UpdateProfileRequest
+ 86, // 312: minder.v1.ProfileService.PatchProfile:input_type -> minder.v1.PatchProfileRequest
+ 88, // 313: minder.v1.ProfileService.DeleteProfile:input_type -> minder.v1.DeleteProfileRequest
+ 90, // 314: minder.v1.ProfileService.ListProfiles:input_type -> minder.v1.ListProfilesRequest
+ 92, // 315: minder.v1.ProfileService.GetProfileById:input_type -> minder.v1.GetProfileByIdRequest
+ 94, // 316: minder.v1.ProfileService.GetProfileByName:input_type -> minder.v1.GetProfileByNameRequest
+ 100, // 317: minder.v1.ProfileService.GetProfileStatusByName:input_type -> minder.v1.GetProfileStatusByNameRequest
+ 102, // 318: minder.v1.ProfileService.GetProfileStatusById:input_type -> minder.v1.GetProfileStatusByIdRequest
+ 104, // 319: minder.v1.ProfileService.GetProfileStatusByProject:input_type -> minder.v1.GetProfileStatusByProjectRequest
+ 68, // 320: minder.v1.DataSourceService.CreateDataSource:input_type -> minder.v1.CreateDataSourceRequest
+ 70, // 321: minder.v1.DataSourceService.GetDataSourceById:input_type -> minder.v1.GetDataSourceByIdRequest
+ 72, // 322: minder.v1.DataSourceService.GetDataSourceByName:input_type -> minder.v1.GetDataSourceByNameRequest
+ 74, // 323: minder.v1.DataSourceService.ListDataSources:input_type -> minder.v1.ListDataSourcesRequest
+ 76, // 324: minder.v1.DataSourceService.UpdateDataSource:input_type -> minder.v1.UpdateDataSourceRequest
+ 78, // 325: minder.v1.DataSourceService.DeleteDataSourceById:input_type -> minder.v1.DeleteDataSourceByIdRequest
+ 80, // 326: minder.v1.DataSourceService.DeleteDataSourceByName:input_type -> minder.v1.DeleteDataSourceByNameRequest
+ 117, // 327: minder.v1.RuleTypeService.ListRuleTypes:input_type -> minder.v1.ListRuleTypesRequest
+ 119, // 328: minder.v1.RuleTypeService.GetRuleTypeByName:input_type -> minder.v1.GetRuleTypeByNameRequest
+ 121, // 329: minder.v1.RuleTypeService.GetRuleTypeById:input_type -> minder.v1.GetRuleTypeByIdRequest
+ 123, // 330: minder.v1.RuleTypeService.CreateRuleType:input_type -> minder.v1.CreateRuleTypeRequest
+ 125, // 331: minder.v1.RuleTypeService.UpdateRuleType:input_type -> minder.v1.UpdateRuleTypeRequest
+ 127, // 332: minder.v1.RuleTypeService.DeleteRuleType:input_type -> minder.v1.DeleteRuleTypeRequest
+ 129, // 333: minder.v1.EvalResultsService.ListEvaluationResults:input_type -> minder.v1.ListEvaluationResultsRequest
+ 192, // 334: minder.v1.EvalResultsService.ListEvaluationHistory:input_type -> minder.v1.ListEvaluationHistoryRequest
+ 191, // 335: minder.v1.EvalResultsService.GetEvaluationHistory:input_type -> minder.v1.GetEvaluationHistoryRequest
+ 155, // 336: minder.v1.PermissionsService.ListRoles:input_type -> minder.v1.ListRolesRequest
+ 157, // 337: minder.v1.PermissionsService.ListRoleAssignments:input_type -> minder.v1.ListRoleAssignmentsRequest
+ 159, // 338: minder.v1.PermissionsService.AssignRole:input_type -> minder.v1.AssignRoleRequest
+ 161, // 339: minder.v1.PermissionsService.UpdateRole:input_type -> minder.v1.UpdateRoleRequest
+ 163, // 340: minder.v1.PermissionsService.RemoveRole:input_type -> minder.v1.RemoveRoleRequest
+ 140, // 341: minder.v1.ProjectsService.ListProjects:input_type -> minder.v1.ListProjectsRequest
+ 142, // 342: minder.v1.ProjectsService.CreateProject:input_type -> minder.v1.CreateProjectRequest
+ 151, // 343: minder.v1.ProjectsService.ListChildProjects:input_type -> minder.v1.ListChildProjectsRequest
+ 144, // 344: minder.v1.ProjectsService.DeleteProject:input_type -> minder.v1.DeleteProjectRequest
+ 146, // 345: minder.v1.ProjectsService.UpdateProject:input_type -> minder.v1.UpdateProjectRequest
+ 149, // 346: minder.v1.ProjectsService.PatchProject:input_type -> minder.v1.PatchProjectRequest
+ 153, // 347: minder.v1.ProjectsService.CreateEntityReconciliationTask:input_type -> minder.v1.CreateEntityReconciliationTaskRequest
+ 185, // 348: minder.v1.ProvidersService.PatchProvider:input_type -> minder.v1.PatchProviderRequest
+ 172, // 349: minder.v1.ProvidersService.GetProvider:input_type -> minder.v1.GetProviderRequest
+ 174, // 350: minder.v1.ProvidersService.ListProviders:input_type -> minder.v1.ListProvidersRequest
+ 176, // 351: minder.v1.ProvidersService.CreateProvider:input_type -> minder.v1.CreateProviderRequest
+ 178, // 352: minder.v1.ProvidersService.DeleteProvider:input_type -> minder.v1.DeleteProviderRequest
+ 180, // 353: minder.v1.ProvidersService.DeleteProviderByID:input_type -> minder.v1.DeleteProviderByIDRequest
+ 182, // 354: minder.v1.ProvidersService.ListProviderClasses:input_type -> minder.v1.ListProviderClassesRequest
+ 54, // 355: minder.v1.ProvidersService.ReconcileEntityRegistration:input_type -> minder.v1.ReconcileEntityRegistrationRequest
+ 27, // 356: minder.v1.InviteService.GetInviteDetails:input_type -> minder.v1.GetInviteDetailsRequest
+ 202, // 357: minder.v1.EntityInstanceService.ListEntities:input_type -> minder.v1.ListEntitiesRequest
+ 204, // 358: minder.v1.EntityInstanceService.GetEntityById:input_type -> minder.v1.GetEntityByIdRequest
+ 206, // 359: minder.v1.EntityInstanceService.GetEntityByName:input_type -> minder.v1.GetEntityByNameRequest
+ 208, // 360: minder.v1.EntityInstanceService.DeleteEntityById:input_type -> minder.v1.DeleteEntityByIdRequest
+ 210, // 361: minder.v1.EntityInstanceService.RegisterEntity:input_type -> minder.v1.RegisterEntityRequest
+ 30, // 362: minder.v1.HealthService.CheckHealth:output_type -> minder.v1.CheckHealthResponse
+ 14, // 363: minder.v1.HealthService.GetVersion:output_type -> minder.v1.GetVersionResponse
+ 16, // 364: minder.v1.ArtifactService.ListArtifacts:output_type -> minder.v1.ListArtifactsResponse
+ 20, // 365: minder.v1.ArtifactService.GetArtifactById:output_type -> minder.v1.GetArtifactByIdResponse
+ 22, // 366: minder.v1.ArtifactService.GetArtifactByName:output_type -> minder.v1.GetArtifactByNameResponse
+ 32, // 367: minder.v1.OAuthService.GetAuthorizationURL:output_type -> minder.v1.GetAuthorizationURLResponse
+ 34, // 368: minder.v1.OAuthService.StoreProviderToken:output_type -> minder.v1.StoreProviderTokenResponse
+ 57, // 369: minder.v1.OAuthService.VerifyProviderTokenFrom:output_type -> minder.v1.VerifyProviderTokenFromResponse
+ 59, // 370: minder.v1.OAuthService.VerifyProviderCredential:output_type -> minder.v1.VerifyProviderCredentialResponse
+ 43, // 371: minder.v1.RepositoryService.RegisterRepository:output_type -> minder.v1.RegisterRepositoryResponse
+ 37, // 372: minder.v1.RepositoryService.ListRemoteRepositoriesFromProvider:output_type -> minder.v1.ListRemoteRepositoriesFromProviderResponse
+ 53, // 373: minder.v1.RepositoryService.ListRepositories:output_type -> minder.v1.ListRepositoriesResponse
+ 45, // 374: minder.v1.RepositoryService.GetRepositoryById:output_type -> minder.v1.GetRepositoryByIdResponse
+ 49, // 375: minder.v1.RepositoryService.GetRepositoryByName:output_type -> minder.v1.GetRepositoryByNameResponse
+ 47, // 376: minder.v1.RepositoryService.DeleteRepositoryById:output_type -> minder.v1.DeleteRepositoryByIdResponse
+ 51, // 377: minder.v1.RepositoryService.DeleteRepositoryByName:output_type -> minder.v1.DeleteRepositoryByNameResponse
+ 61, // 378: minder.v1.UserService.CreateUser:output_type -> minder.v1.CreateUserResponse
+ 63, // 379: minder.v1.UserService.DeleteUser:output_type -> minder.v1.DeleteUserResponse
+ 67, // 380: minder.v1.UserService.GetUser:output_type -> minder.v1.GetUserResponse
+ 168, // 381: minder.v1.UserService.ListInvitations:output_type -> minder.v1.ListInvitationsResponse
+ 170, // 382: minder.v1.UserService.ResolveInvitation:output_type -> minder.v1.ResolveInvitationResponse
+ 83, // 383: minder.v1.ProfileService.CreateProfile:output_type -> minder.v1.CreateProfileResponse
+ 85, // 384: minder.v1.ProfileService.UpdateProfile:output_type -> minder.v1.UpdateProfileResponse
+ 87, // 385: minder.v1.ProfileService.PatchProfile:output_type -> minder.v1.PatchProfileResponse
+ 89, // 386: minder.v1.ProfileService.DeleteProfile:output_type -> minder.v1.DeleteProfileResponse
+ 91, // 387: minder.v1.ProfileService.ListProfiles:output_type -> minder.v1.ListProfilesResponse
+ 93, // 388: minder.v1.ProfileService.GetProfileById:output_type -> minder.v1.GetProfileByIdResponse
+ 95, // 389: minder.v1.ProfileService.GetProfileByName:output_type -> minder.v1.GetProfileByNameResponse
+ 101, // 390: minder.v1.ProfileService.GetProfileStatusByName:output_type -> minder.v1.GetProfileStatusByNameResponse
+ 103, // 391: minder.v1.ProfileService.GetProfileStatusById:output_type -> minder.v1.GetProfileStatusByIdResponse
+ 105, // 392: minder.v1.ProfileService.GetProfileStatusByProject:output_type -> minder.v1.GetProfileStatusByProjectResponse
+ 69, // 393: minder.v1.DataSourceService.CreateDataSource:output_type -> minder.v1.CreateDataSourceResponse
+ 71, // 394: minder.v1.DataSourceService.GetDataSourceById:output_type -> minder.v1.GetDataSourceByIdResponse
+ 73, // 395: minder.v1.DataSourceService.GetDataSourceByName:output_type -> minder.v1.GetDataSourceByNameResponse
+ 75, // 396: minder.v1.DataSourceService.ListDataSources:output_type -> minder.v1.ListDataSourcesResponse
+ 77, // 397: minder.v1.DataSourceService.UpdateDataSource:output_type -> minder.v1.UpdateDataSourceResponse
+ 79, // 398: minder.v1.DataSourceService.DeleteDataSourceById:output_type -> minder.v1.DeleteDataSourceByIdResponse
+ 81, // 399: minder.v1.DataSourceService.DeleteDataSourceByName:output_type -> minder.v1.DeleteDataSourceByNameResponse
+ 118, // 400: minder.v1.RuleTypeService.ListRuleTypes:output_type -> minder.v1.ListRuleTypesResponse
+ 120, // 401: minder.v1.RuleTypeService.GetRuleTypeByName:output_type -> minder.v1.GetRuleTypeByNameResponse
+ 122, // 402: minder.v1.RuleTypeService.GetRuleTypeById:output_type -> minder.v1.GetRuleTypeByIdResponse
+ 124, // 403: minder.v1.RuleTypeService.CreateRuleType:output_type -> minder.v1.CreateRuleTypeResponse
+ 126, // 404: minder.v1.RuleTypeService.UpdateRuleType:output_type -> minder.v1.UpdateRuleTypeResponse
+ 128, // 405: minder.v1.RuleTypeService.DeleteRuleType:output_type -> minder.v1.DeleteRuleTypeResponse
+ 130, // 406: minder.v1.EvalResultsService.ListEvaluationResults:output_type -> minder.v1.ListEvaluationResultsResponse
+ 194, // 407: minder.v1.EvalResultsService.ListEvaluationHistory:output_type -> minder.v1.ListEvaluationHistoryResponse
+ 193, // 408: minder.v1.EvalResultsService.GetEvaluationHistory:output_type -> minder.v1.GetEvaluationHistoryResponse
+ 156, // 409: minder.v1.PermissionsService.ListRoles:output_type -> minder.v1.ListRolesResponse
+ 158, // 410: minder.v1.PermissionsService.ListRoleAssignments:output_type -> minder.v1.ListRoleAssignmentsResponse
+ 160, // 411: minder.v1.PermissionsService.AssignRole:output_type -> minder.v1.AssignRoleResponse
+ 162, // 412: minder.v1.PermissionsService.UpdateRole:output_type -> minder.v1.UpdateRoleResponse
+ 164, // 413: minder.v1.PermissionsService.RemoveRole:output_type -> minder.v1.RemoveRoleResponse
+ 141, // 414: minder.v1.ProjectsService.ListProjects:output_type -> minder.v1.ListProjectsResponse
+ 143, // 415: minder.v1.ProjectsService.CreateProject:output_type -> minder.v1.CreateProjectResponse
+ 152, // 416: minder.v1.ProjectsService.ListChildProjects:output_type -> minder.v1.ListChildProjectsResponse
+ 145, // 417: minder.v1.ProjectsService.DeleteProject:output_type -> minder.v1.DeleteProjectResponse
+ 147, // 418: minder.v1.ProjectsService.UpdateProject:output_type -> minder.v1.UpdateProjectResponse
+ 150, // 419: minder.v1.ProjectsService.PatchProject:output_type -> minder.v1.PatchProjectResponse
+ 154, // 420: minder.v1.ProjectsService.CreateEntityReconciliationTask:output_type -> minder.v1.CreateEntityReconciliationTaskResponse
+ 186, // 421: minder.v1.ProvidersService.PatchProvider:output_type -> minder.v1.PatchProviderResponse
+ 173, // 422: minder.v1.ProvidersService.GetProvider:output_type -> minder.v1.GetProviderResponse
+ 175, // 423: minder.v1.ProvidersService.ListProviders:output_type -> minder.v1.ListProvidersResponse
+ 177, // 424: minder.v1.ProvidersService.CreateProvider:output_type -> minder.v1.CreateProviderResponse
+ 179, // 425: minder.v1.ProvidersService.DeleteProvider:output_type -> minder.v1.DeleteProviderResponse
+ 181, // 426: minder.v1.ProvidersService.DeleteProviderByID:output_type -> minder.v1.DeleteProviderByIDResponse
+ 184, // 427: minder.v1.ProvidersService.ListProviderClasses:output_type -> minder.v1.ListProviderClassesResponse
+ 55, // 428: minder.v1.ProvidersService.ReconcileEntityRegistration:output_type -> minder.v1.ReconcileEntityRegistrationResponse
+ 28, // 429: minder.v1.InviteService.GetInviteDetails:output_type -> minder.v1.GetInviteDetailsResponse
+ 203, // 430: minder.v1.EntityInstanceService.ListEntities:output_type -> minder.v1.ListEntitiesResponse
+ 205, // 431: minder.v1.EntityInstanceService.GetEntityById:output_type -> minder.v1.GetEntityByIdResponse
+ 207, // 432: minder.v1.EntityInstanceService.GetEntityByName:output_type -> minder.v1.GetEntityByNameResponse
+ 209, // 433: minder.v1.EntityInstanceService.DeleteEntityById:output_type -> minder.v1.DeleteEntityByIdResponse
+ 211, // 434: minder.v1.EntityInstanceService.RegisterEntity:output_type -> minder.v1.RegisterEntityResponse
+ 362, // [362:435] is the sub-list for method output_type
+ 289, // [289:362] is the sub-list for method input_type
+ 288, // [288:289] is the sub-list for extension type_name
+ 286, // [286:288] is the sub-list for extension extendee
+ 0, // [0:286] is the sub-list for field type_name
}
func init() { file_minder_v1_minder_proto_init() }
@@ -17040,7 +17131,7 @@ func file_minder_v1_minder_proto_init() {
file_minder_v1_minder_proto_msgTypes[228].OneofWrappers = []any{}
file_minder_v1_minder_proto_msgTypes[229].OneofWrappers = []any{}
file_minder_v1_minder_proto_msgTypes[232].OneofWrappers = []any{}
- file_minder_v1_minder_proto_msgTypes[239].OneofWrappers = []any{
+ file_minder_v1_minder_proto_msgTypes[240].OneofWrappers = []any{
(*RestDataSource_Def_Bodyobj)(nil),
(*RestDataSource_Def_Bodystr)(nil),
(*RestDataSource_Def_BodyFromField)(nil),
@@ -17051,7 +17142,7 @@ func file_minder_v1_minder_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_minder_v1_minder_proto_rawDesc), len(file_minder_v1_minder_proto_rawDesc)),
NumEnums: 10,
- NumMessages: 243,
+ NumMessages: 244,
NumExtensions: 2,
NumServices: 14,
},
diff --git a/pkg/api/protobuf/go/minder/v1/validators.go b/pkg/api/protobuf/go/minder/v1/validators.go
index 53432d202a..39eb123c0a 100644
--- a/pkg/api/protobuf/go/minder/v1/validators.go
+++ b/pkg/api/protobuf/go/minder/v1/validators.go
@@ -398,6 +398,29 @@ func (comment *RuleType_Definition_Alert_AlertTypePRComment) Validate() error {
return fmt.Errorf("%w: pull request comment message is not parsable: %w", ErrInvalidRuleTypeDefinition, err)
}
+ for i, lc := range comment.GetLineComments() {
+ if lc.GetFilepath() == "" {
+ return fmt.Errorf("%w: line_comment %d: filepath cannot be empty", ErrInvalidRuleTypeDefinition, i)
+ }
+ if lc.GetLineStart() <= 0 {
+ return fmt.Errorf("%w: line_comment %d: line_start must be greater than 0", ErrInvalidRuleTypeDefinition, i)
+ }
+ if lc.GetLineEnd() <= 0 {
+ return fmt.Errorf("%w: line_comment %d: line_end must be greater than 0", ErrInvalidRuleTypeDefinition, i)
+ }
+ if lc.GetLineStart() > lc.GetLineEnd() {
+ return fmt.Errorf("%w: line_comment %d: line_start (%d) must be <= line_end (%d)",
+ ErrInvalidRuleTypeDefinition, i, lc.GetLineStart(), lc.GetLineEnd())
+ }
+ if lc.GetComment() == "" {
+ return fmt.Errorf("%w: line_comment %d: comment cannot be empty", ErrInvalidRuleTypeDefinition, i)
+ }
+ _, err := util.NewSafeHTMLTemplate(&lc.Comment, fmt.Sprintf("line_comment_%d", i))
+ if err != nil {
+ return fmt.Errorf("%w: line_comment %d: comment is not a valid template: %w", ErrInvalidRuleTypeDefinition, i, err)
+ }
+ }
+
return nil
}
diff --git a/proto/minder/v1/minder.proto b/proto/minder/v1/minder.proto
index 183ee4b01b..3b602fb6bd 100644
--- a/proto/minder/v1/minder.proto
+++ b/proto/minder/v1/minder.proto
@@ -2972,6 +2972,38 @@ message RuleType {
in: ["comment", "request_changes"],
}
];
+
+ message PullRequestLineComment {
+ // filepath is the path to the file to comment on.
+ string filepath = 1 [
+ (buf.validate.field).string = {
+ max_len: 1024,
+ },
+ (google.api.field_behavior) = REQUIRED
+ ];
+ // line_start is the starting line number.
+ int32 line_start = 2 [
+ (buf.validate.field).int32 = {
+ gt: 0,
+ },
+ (google.api.field_behavior) = REQUIRED
+ ];
+ // line_end is the ending line number.
+ int32 line_end = 3 [
+ (buf.validate.field).int32 = {
+ gt: 0,
+ },
+ (google.api.field_behavior) = REQUIRED
+ ];
+ // comment is the comment to post on those lines.
+ string comment = 4 [
+ (buf.validate.field).string = {
+ max_len: 65536,
+ },
+ (google.api.field_behavior) = REQUIRED
+ ];
+ }
+ repeated PullRequestLineComment line_comments = 3;
}
optional AlertTypePRComment pull_request_comment = 3;
}