detached d79051b

Merge f9976e7ef950a413ab4cb985f1b850caf1c8c8cf into b97dc8626c51d183d4f3373be9b3fd8f6b155755

commit
d79051b77f8199a3fe8a5db9389e19b8783e1a6d
author
ermite · · 2026-10-21 04:07 UTC
merge of
b97dc86 + f9976e7 · diff against the first parent
signature
unsigned
11 files · +1061 -307
M docs/services.md +1 -1
@@ -5,7 +5,7 @@
55 | `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |
66 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |
77 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |
8-| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`. Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
8+| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
99 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Features `issues`, `issues.links`. Issues share numbers with merge requests |
1010 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
1111 | `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |
@@ -5,7 +5,7 @@
5 | `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |5 | `RepoService` | `ListRepos`, `GetRepo`, `CreateRepo`, `UpdateRepo` (field mask, merge settings), `DeleteRepo` |
6 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |6 | `GitService` | `ListRefs`, `GetTree`, `ListPaths`, `GetBlob` (streamed), `ListCommits`, `GetCommit` (structured diff), `ResolveRevision` |
7 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |7 | `TokenService` | `CreateToken` (secret shown once), `ListTokens`, `RevokeToken` |
8-| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`. Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |8+| `MergeRequestService` | `CreateMergeRequest`, `ListMergeRequests`, `GetMergeRequest` (commits, diff, comments), `AddComment`, `EditComment`, `DeleteComment`, `ResolveComment`, `CloseMergeRequest`, `MergeMergeRequest` (modes fast-forward, squash, merge commit), `MarkRead`, `EnableAutoMerge`, `CancelAutoMerge` (merge by itself once a check passed on the head and all its runs are complete; setting `allow_auto_merge`, `MergeRequest.auto_merge`, events `MergeRequestAutoMergeEnabled` and `MergeRequestAutoMergeCancelled`, `MergeRequestMerged.auto`; feature `merge_requests.auto_merge`). Open merge requests carry `mergeability` (up to date, behind, conflict, or checking) and `Watch` publishes `MergeRequestMergeability` each time a result is settled for new branch tips (feature `merge_requests.mergeability`) |
9 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Features `issues`, `issues.links`. Issues share numbers with merge requests |9 | `IssueService` | `CreateIssue`, `ListIssues`, `GetIssue` (comments, merge requests naming the issue, `closed_by_merge_request`), `AddIssueComment`, `CloseIssue`, `ReopenIssue`; owner only: `ListPendingIssues`, `ApproveIssue`, `RejectIssue`. Features `issues`, `issues.links`. Issues share numbers with merge requests |
10 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |10 | `SessionService` | `CreateLoginLink`, `SignOutEverywhere` (owner only) |
11 | `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |11 | `EventService` | `Watch` (streamed, resumable). Topics `home`, `repo:<name>` and `owner` (owner rights only). Events 17–21: `issue_opened`, `issue_closed`, `issue_reopened`, `issue_commented`, and `issue_submitted` (only on `owner`, no content). Event 22: `merge_request_mergeability` |
M gen/ermite/ermiteconnect/merge_request.connect.go +100 -0
@@ -62,6 +62,12 @@ const (
6262 // MergeRequestServiceMergeMergeRequestProcedure is the fully-qualified name of the
6363 // MergeRequestService's MergeMergeRequest RPC.
6464 MergeRequestServiceMergeMergeRequestProcedure = "/ermite.MergeRequestService/MergeMergeRequest"
65+ // MergeRequestServiceEnableAutoMergeProcedure is the fully-qualified name of the
66+ // MergeRequestService's EnableAutoMerge RPC.
67+ MergeRequestServiceEnableAutoMergeProcedure = "/ermite.MergeRequestService/EnableAutoMerge"
68+ // MergeRequestServiceCancelAutoMergeProcedure is the fully-qualified name of the
69+ // MergeRequestService's CancelAutoMerge RPC.
70+ MergeRequestServiceCancelAutoMergeProcedure = "/ermite.MergeRequestService/CancelAutoMerge"
6571 // MergeRequestServiceMarkReadProcedure is the fully-qualified name of the MergeRequestService's
6672 // MarkRead RPC.
6773 MergeRequestServiceMarkReadProcedure = "/ermite.MergeRequestService/MarkRead"
@@ -137,6 +143,29 @@ type MergeRequestServiceClient interface {
137143 // failed_precondition (not open). On success the server publishes
138144 // MergeRequestMerged then Pushed for the target branch.
139145 MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)
146+ // EnableAutoMerge asks the server to merge an open merge request by itself
147+ // once at least one check passed on its head, every run created on that head
148+ // is complete, and the merge would be accepted whatever
149+ // RepoSettings.failing_checks_block says. Needs the mr:merge scope and, for a
150+ // token limited to branches, write access to the target branch
151+ // (permission_denied otherwise). The server records the caller, the mode and
152+ // the head the caller saw; it merges as the caller, after resolving the caller
153+ // again, and cancels the auto-merge if the caller can no longer merge, if the
154+ // mode is no longer allowed, if the source branch moves or if the setting is
155+ // turned off. Fails with invalid_argument if the mode is not a merge mode or
156+ // if head_id is empty or not a commit id, and with failed_precondition if the
157+ // merge request is not open, if the source branch no longer points to head_id
158+ // ("branch moved, read again"), is a draft,
159+ // RepoSettings.allow_auto_merge is off, the mode is not allowed by
160+ // RepoSettings, or the server has no CI. Enabling again replaces the mode.
161+ // Publishes MergeRequestAutoMergeEnabled. Needs the
162+ // "merge_requests.auto_merge" feature.
163+ EnableAutoMerge(context.Context, *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error)
164+ // CancelAutoMerge cancels the pending auto-merge of an open merge request.
165+ // Needs the mr:merge scope and, for a token limited to branches, write access
166+ // to the target branch. Fails with failed_precondition if auto-merge is not
167+ // enabled. Publishes MergeRequestAutoMergeCancelled.
168+ CancelAutoMerge(context.Context, *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error)
140169 // MarkRead records the head the caller has reviewed, for the since_last_read
141170 // option of GetMergeRequest. There is one read position per merge request,
142171 // the reviewer's. Needs the mr:write scope. Marking a commit that does not
@@ -209,6 +238,18 @@ func NewMergeRequestServiceClient(httpClient connect.HTTPClient, baseURL string,
209238 connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),
210239 connect.WithClientOptions(opts...),
211240 ),
241+ enableAutoMerge: connect.NewClient[ermite.EnableAutoMergeRequest, ermite.EnableAutoMergeResponse](
242+ httpClient,
243+ baseURL+MergeRequestServiceEnableAutoMergeProcedure,
244+ connect.WithSchema(mergeRequestServiceMethods.ByName("EnableAutoMerge")),
245+ connect.WithClientOptions(opts...),
246+ ),
247+ cancelAutoMerge: connect.NewClient[ermite.CancelAutoMergeRequest, ermite.CancelAutoMergeResponse](
248+ httpClient,
249+ baseURL+MergeRequestServiceCancelAutoMergeProcedure,
250+ connect.WithSchema(mergeRequestServiceMethods.ByName("CancelAutoMerge")),
251+ connect.WithClientOptions(opts...),
252+ ),
212253 markRead: connect.NewClient[ermite.MarkReadRequest, ermite.MarkReadResponse](
213254 httpClient,
214255 baseURL+MergeRequestServiceMarkReadProcedure,
@@ -229,6 +270,8 @@ type mergeRequestServiceClient struct {
229270 resolveComment *connect.Client[ermite.ResolveCommentRequest, ermite.ResolveCommentResponse]
230271 closeMergeRequest *connect.Client[ermite.CloseMergeRequestRequest, ermite.CloseMergeRequestResponse]
231272 mergeMergeRequest *connect.Client[ermite.MergeMergeRequestRequest, ermite.MergeMergeRequestResponse]
273+ enableAutoMerge *connect.Client[ermite.EnableAutoMergeRequest, ermite.EnableAutoMergeResponse]
274+ cancelAutoMerge *connect.Client[ermite.CancelAutoMergeRequest, ermite.CancelAutoMergeResponse]
232275 markRead *connect.Client[ermite.MarkReadRequest, ermite.MarkReadResponse]
233276 }
234277
@@ -277,6 +320,16 @@ func (c *mergeRequestServiceClient) MergeMergeRequest(ctx context.Context, req *
277320 return c.mergeMergeRequest.CallUnary(ctx, req)
278321 }
279322
323+// EnableAutoMerge calls ermite.MergeRequestService.EnableAutoMerge.
324+func (c *mergeRequestServiceClient) EnableAutoMerge(ctx context.Context, req *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error) {
325+ return c.enableAutoMerge.CallUnary(ctx, req)
326+}
327+
328+// CancelAutoMerge calls ermite.MergeRequestService.CancelAutoMerge.
329+func (c *mergeRequestServiceClient) CancelAutoMerge(ctx context.Context, req *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error) {
330+ return c.cancelAutoMerge.CallUnary(ctx, req)
331+}
332+
280333 // MarkRead calls ermite.MergeRequestService.MarkRead.
281334 func (c *mergeRequestServiceClient) MarkRead(ctx context.Context, req *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {
282335 return c.markRead.CallUnary(ctx, req)
@@ -352,6 +405,29 @@ type MergeRequestServiceHandler interface {
352405 // failed_precondition (not open). On success the server publishes
353406 // MergeRequestMerged then Pushed for the target branch.
354407 MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)
408+ // EnableAutoMerge asks the server to merge an open merge request by itself
409+ // once at least one check passed on its head, every run created on that head
410+ // is complete, and the merge would be accepted whatever
411+ // RepoSettings.failing_checks_block says. Needs the mr:merge scope and, for a
412+ // token limited to branches, write access to the target branch
413+ // (permission_denied otherwise). The server records the caller, the mode and
414+ // the head the caller saw; it merges as the caller, after resolving the caller
415+ // again, and cancels the auto-merge if the caller can no longer merge, if the
416+ // mode is no longer allowed, if the source branch moves or if the setting is
417+ // turned off. Fails with invalid_argument if the mode is not a merge mode or
418+ // if head_id is empty or not a commit id, and with failed_precondition if the
419+ // merge request is not open, if the source branch no longer points to head_id
420+ // ("branch moved, read again"), is a draft,
421+ // RepoSettings.allow_auto_merge is off, the mode is not allowed by
422+ // RepoSettings, or the server has no CI. Enabling again replaces the mode.
423+ // Publishes MergeRequestAutoMergeEnabled. Needs the
424+ // "merge_requests.auto_merge" feature.
425+ EnableAutoMerge(context.Context, *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error)
426+ // CancelAutoMerge cancels the pending auto-merge of an open merge request.
427+ // Needs the mr:merge scope and, for a token limited to branches, write access
428+ // to the target branch. Fails with failed_precondition if auto-merge is not
429+ // enabled. Publishes MergeRequestAutoMergeCancelled.
430+ CancelAutoMerge(context.Context, *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error)
355431 // MarkRead records the head the caller has reviewed, for the since_last_read
356432 // option of GetMergeRequest. There is one read position per merge request,
357433 // the reviewer's. Needs the mr:write scope. Marking a commit that does not
@@ -420,6 +496,18 @@ func NewMergeRequestServiceHandler(svc MergeRequestServiceHandler, opts ...conne
420496 connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),
421497 connect.WithHandlerOptions(opts...),
422498 )
499+ mergeRequestServiceEnableAutoMergeHandler := connect.NewUnaryHandler(
500+ MergeRequestServiceEnableAutoMergeProcedure,
501+ svc.EnableAutoMerge,
502+ connect.WithSchema(mergeRequestServiceMethods.ByName("EnableAutoMerge")),
503+ connect.WithHandlerOptions(opts...),
504+ )
505+ mergeRequestServiceCancelAutoMergeHandler := connect.NewUnaryHandler(
506+ MergeRequestServiceCancelAutoMergeProcedure,
507+ svc.CancelAutoMerge,
508+ connect.WithSchema(mergeRequestServiceMethods.ByName("CancelAutoMerge")),
509+ connect.WithHandlerOptions(opts...),
510+ )
423511 mergeRequestServiceMarkReadHandler := connect.NewUnaryHandler(
424512 MergeRequestServiceMarkReadProcedure,
425513 svc.MarkRead,
@@ -446,6 +534,10 @@ func NewMergeRequestServiceHandler(svc MergeRequestServiceHandler, opts ...conne
446534 mergeRequestServiceCloseMergeRequestHandler.ServeHTTP(w, r)
447535 case MergeRequestServiceMergeMergeRequestProcedure:
448536 mergeRequestServiceMergeMergeRequestHandler.ServeHTTP(w, r)
537+ case MergeRequestServiceEnableAutoMergeProcedure:
538+ mergeRequestServiceEnableAutoMergeHandler.ServeHTTP(w, r)
539+ case MergeRequestServiceCancelAutoMergeProcedure:
540+ mergeRequestServiceCancelAutoMergeHandler.ServeHTTP(w, r)
449541 case MergeRequestServiceMarkReadProcedure:
450542 mergeRequestServiceMarkReadHandler.ServeHTTP(w, r)
451543 default:
@@ -493,6 +585,14 @@ func (UnimplementedMergeRequestServiceHandler) MergeMergeRequest(context.Context
493585 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MergeMergeRequest is not implemented"))
494586 }
495587
588+func (UnimplementedMergeRequestServiceHandler) EnableAutoMerge(context.Context, *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error) {
589+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.EnableAutoMerge is not implemented"))
590+}
591+
592+func (UnimplementedMergeRequestServiceHandler) CancelAutoMerge(context.Context, *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error) {
593+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.CancelAutoMerge is not implemented"))
594+}
595+
496596 func (UnimplementedMergeRequestServiceHandler) MarkRead(context.Context, *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {
497597 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MarkRead is not implemented"))
498598 }
@@ -62,6 +62,12 @@ const (
62 // MergeRequestServiceMergeMergeRequestProcedure is the fully-qualified name of the62 // MergeRequestServiceMergeMergeRequestProcedure is the fully-qualified name of the
63 // MergeRequestService's MergeMergeRequest RPC.63 // MergeRequestService's MergeMergeRequest RPC.
64 MergeRequestServiceMergeMergeRequestProcedure = "/ermite.MergeRequestService/MergeMergeRequest"64 MergeRequestServiceMergeMergeRequestProcedure = "/ermite.MergeRequestService/MergeMergeRequest"
65+ // MergeRequestServiceEnableAutoMergeProcedure is the fully-qualified name of the
66+ // MergeRequestService's EnableAutoMerge RPC.
67+ MergeRequestServiceEnableAutoMergeProcedure = "/ermite.MergeRequestService/EnableAutoMerge"
68+ // MergeRequestServiceCancelAutoMergeProcedure is the fully-qualified name of the
69+ // MergeRequestService's CancelAutoMerge RPC.
70+ MergeRequestServiceCancelAutoMergeProcedure = "/ermite.MergeRequestService/CancelAutoMerge"
65 // MergeRequestServiceMarkReadProcedure is the fully-qualified name of the MergeRequestService's71 // MergeRequestServiceMarkReadProcedure is the fully-qualified name of the MergeRequestService's
66 // MarkRead RPC.72 // MarkRead RPC.
67 MergeRequestServiceMarkReadProcedure = "/ermite.MergeRequestService/MarkRead"73 MergeRequestServiceMarkReadProcedure = "/ermite.MergeRequestService/MarkRead"
@@ -137,6 +143,29 @@ type MergeRequestServiceClient interface {
137 // failed_precondition (not open). On success the server publishes143 // failed_precondition (not open). On success the server publishes
138 // MergeRequestMerged then Pushed for the target branch.144 // MergeRequestMerged then Pushed for the target branch.
139 MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)145 MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)
146+ // EnableAutoMerge asks the server to merge an open merge request by itself
147+ // once at least one check passed on its head, every run created on that head
148+ // is complete, and the merge would be accepted whatever
149+ // RepoSettings.failing_checks_block says. Needs the mr:merge scope and, for a
150+ // token limited to branches, write access to the target branch
151+ // (permission_denied otherwise). The server records the caller, the mode and
152+ // the head the caller saw; it merges as the caller, after resolving the caller
153+ // again, and cancels the auto-merge if the caller can no longer merge, if the
154+ // mode is no longer allowed, if the source branch moves or if the setting is
155+ // turned off. Fails with invalid_argument if the mode is not a merge mode or
156+ // if head_id is empty or not a commit id, and with failed_precondition if the
157+ // merge request is not open, if the source branch no longer points to head_id
158+ // ("branch moved, read again"), is a draft,
159+ // RepoSettings.allow_auto_merge is off, the mode is not allowed by
160+ // RepoSettings, or the server has no CI. Enabling again replaces the mode.
161+ // Publishes MergeRequestAutoMergeEnabled. Needs the
162+ // "merge_requests.auto_merge" feature.
163+ EnableAutoMerge(context.Context, *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error)
164+ // CancelAutoMerge cancels the pending auto-merge of an open merge request.
165+ // Needs the mr:merge scope and, for a token limited to branches, write access
166+ // to the target branch. Fails with failed_precondition if auto-merge is not
167+ // enabled. Publishes MergeRequestAutoMergeCancelled.
168+ CancelAutoMerge(context.Context, *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error)
140 // MarkRead records the head the caller has reviewed, for the since_last_read169 // MarkRead records the head the caller has reviewed, for the since_last_read
141 // option of GetMergeRequest. There is one read position per merge request,170 // option of GetMergeRequest. There is one read position per merge request,
142 // the reviewer's. Needs the mr:write scope. Marking a commit that does not171 // the reviewer's. Needs the mr:write scope. Marking a commit that does not
@@ -209,6 +238,18 @@ func NewMergeRequestServiceClient(httpClient connect.HTTPClient, baseURL string,
209 connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),238 connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),
210 connect.WithClientOptions(opts...),239 connect.WithClientOptions(opts...),
211 ),240 ),
241+ enableAutoMerge: connect.NewClient[ermite.EnableAutoMergeRequest, ermite.EnableAutoMergeResponse](
242+ httpClient,
243+ baseURL+MergeRequestServiceEnableAutoMergeProcedure,
244+ connect.WithSchema(mergeRequestServiceMethods.ByName("EnableAutoMerge")),
245+ connect.WithClientOptions(opts...),
246+ ),
247+ cancelAutoMerge: connect.NewClient[ermite.CancelAutoMergeRequest, ermite.CancelAutoMergeResponse](
248+ httpClient,
249+ baseURL+MergeRequestServiceCancelAutoMergeProcedure,
250+ connect.WithSchema(mergeRequestServiceMethods.ByName("CancelAutoMerge")),
251+ connect.WithClientOptions(opts...),
252+ ),
212 markRead: connect.NewClient[ermite.MarkReadRequest, ermite.MarkReadResponse](253 markRead: connect.NewClient[ermite.MarkReadRequest, ermite.MarkReadResponse](
213 httpClient,254 httpClient,
214 baseURL+MergeRequestServiceMarkReadProcedure,255 baseURL+MergeRequestServiceMarkReadProcedure,
@@ -229,6 +270,8 @@ type mergeRequestServiceClient struct {
229 resolveComment *connect.Client[ermite.ResolveCommentRequest, ermite.ResolveCommentResponse]270 resolveComment *connect.Client[ermite.ResolveCommentRequest, ermite.ResolveCommentResponse]
230 closeMergeRequest *connect.Client[ermite.CloseMergeRequestRequest, ermite.CloseMergeRequestResponse]271 closeMergeRequest *connect.Client[ermite.CloseMergeRequestRequest, ermite.CloseMergeRequestResponse]
231 mergeMergeRequest *connect.Client[ermite.MergeMergeRequestRequest, ermite.MergeMergeRequestResponse]272 mergeMergeRequest *connect.Client[ermite.MergeMergeRequestRequest, ermite.MergeMergeRequestResponse]
273+ enableAutoMerge *connect.Client[ermite.EnableAutoMergeRequest, ermite.EnableAutoMergeResponse]
274+ cancelAutoMerge *connect.Client[ermite.CancelAutoMergeRequest, ermite.CancelAutoMergeResponse]
232 markRead *connect.Client[ermite.MarkReadRequest, ermite.MarkReadResponse]275 markRead *connect.Client[ermite.MarkReadRequest, ermite.MarkReadResponse]
233 }276 }
234 277
@@ -277,6 +320,16 @@ func (c *mergeRequestServiceClient) MergeMergeRequest(ctx context.Context, req *
277 return c.mergeMergeRequest.CallUnary(ctx, req)320 return c.mergeMergeRequest.CallUnary(ctx, req)
278 }321 }
279 322
323+// EnableAutoMerge calls ermite.MergeRequestService.EnableAutoMerge.
324+func (c *mergeRequestServiceClient) EnableAutoMerge(ctx context.Context, req *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error) {
325+ return c.enableAutoMerge.CallUnary(ctx, req)
326+}
327+
328+// CancelAutoMerge calls ermite.MergeRequestService.CancelAutoMerge.
329+func (c *mergeRequestServiceClient) CancelAutoMerge(ctx context.Context, req *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error) {
330+ return c.cancelAutoMerge.CallUnary(ctx, req)
331+}
332+
280 // MarkRead calls ermite.MergeRequestService.MarkRead.333 // MarkRead calls ermite.MergeRequestService.MarkRead.
281 func (c *mergeRequestServiceClient) MarkRead(ctx context.Context, req *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {334 func (c *mergeRequestServiceClient) MarkRead(ctx context.Context, req *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {
282 return c.markRead.CallUnary(ctx, req)335 return c.markRead.CallUnary(ctx, req)
@@ -352,6 +405,29 @@ type MergeRequestServiceHandler interface {
352 // failed_precondition (not open). On success the server publishes405 // failed_precondition (not open). On success the server publishes
353 // MergeRequestMerged then Pushed for the target branch.406 // MergeRequestMerged then Pushed for the target branch.
354 MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)407 MergeMergeRequest(context.Context, *connect.Request[ermite.MergeMergeRequestRequest]) (*connect.Response[ermite.MergeMergeRequestResponse], error)
408+ // EnableAutoMerge asks the server to merge an open merge request by itself
409+ // once at least one check passed on its head, every run created on that head
410+ // is complete, and the merge would be accepted whatever
411+ // RepoSettings.failing_checks_block says. Needs the mr:merge scope and, for a
412+ // token limited to branches, write access to the target branch
413+ // (permission_denied otherwise). The server records the caller, the mode and
414+ // the head the caller saw; it merges as the caller, after resolving the caller
415+ // again, and cancels the auto-merge if the caller can no longer merge, if the
416+ // mode is no longer allowed, if the source branch moves or if the setting is
417+ // turned off. Fails with invalid_argument if the mode is not a merge mode or
418+ // if head_id is empty or not a commit id, and with failed_precondition if the
419+ // merge request is not open, if the source branch no longer points to head_id
420+ // ("branch moved, read again"), is a draft,
421+ // RepoSettings.allow_auto_merge is off, the mode is not allowed by
422+ // RepoSettings, or the server has no CI. Enabling again replaces the mode.
423+ // Publishes MergeRequestAutoMergeEnabled. Needs the
424+ // "merge_requests.auto_merge" feature.
425+ EnableAutoMerge(context.Context, *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error)
426+ // CancelAutoMerge cancels the pending auto-merge of an open merge request.
427+ // Needs the mr:merge scope and, for a token limited to branches, write access
428+ // to the target branch. Fails with failed_precondition if auto-merge is not
429+ // enabled. Publishes MergeRequestAutoMergeCancelled.
430+ CancelAutoMerge(context.Context, *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error)
355 // MarkRead records the head the caller has reviewed, for the since_last_read431 // MarkRead records the head the caller has reviewed, for the since_last_read
356 // option of GetMergeRequest. There is one read position per merge request,432 // option of GetMergeRequest. There is one read position per merge request,
357 // the reviewer's. Needs the mr:write scope. Marking a commit that does not433 // the reviewer's. Needs the mr:write scope. Marking a commit that does not
@@ -420,6 +496,18 @@ func NewMergeRequestServiceHandler(svc MergeRequestServiceHandler, opts ...conne
420 connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),496 connect.WithSchema(mergeRequestServiceMethods.ByName("MergeMergeRequest")),
421 connect.WithHandlerOptions(opts...),497 connect.WithHandlerOptions(opts...),
422 )498 )
499+ mergeRequestServiceEnableAutoMergeHandler := connect.NewUnaryHandler(
500+ MergeRequestServiceEnableAutoMergeProcedure,
501+ svc.EnableAutoMerge,
502+ connect.WithSchema(mergeRequestServiceMethods.ByName("EnableAutoMerge")),
503+ connect.WithHandlerOptions(opts...),
504+ )
505+ mergeRequestServiceCancelAutoMergeHandler := connect.NewUnaryHandler(
506+ MergeRequestServiceCancelAutoMergeProcedure,
507+ svc.CancelAutoMerge,
508+ connect.WithSchema(mergeRequestServiceMethods.ByName("CancelAutoMerge")),
509+ connect.WithHandlerOptions(opts...),
510+ )
423 mergeRequestServiceMarkReadHandler := connect.NewUnaryHandler(511 mergeRequestServiceMarkReadHandler := connect.NewUnaryHandler(
424 MergeRequestServiceMarkReadProcedure,512 MergeRequestServiceMarkReadProcedure,
425 svc.MarkRead,513 svc.MarkRead,
@@ -446,6 +534,10 @@ func NewMergeRequestServiceHandler(svc MergeRequestServiceHandler, opts ...conne
446 mergeRequestServiceCloseMergeRequestHandler.ServeHTTP(w, r)534 mergeRequestServiceCloseMergeRequestHandler.ServeHTTP(w, r)
447 case MergeRequestServiceMergeMergeRequestProcedure:535 case MergeRequestServiceMergeMergeRequestProcedure:
448 mergeRequestServiceMergeMergeRequestHandler.ServeHTTP(w, r)536 mergeRequestServiceMergeMergeRequestHandler.ServeHTTP(w, r)
537+ case MergeRequestServiceEnableAutoMergeProcedure:
538+ mergeRequestServiceEnableAutoMergeHandler.ServeHTTP(w, r)
539+ case MergeRequestServiceCancelAutoMergeProcedure:
540+ mergeRequestServiceCancelAutoMergeHandler.ServeHTTP(w, r)
449 case MergeRequestServiceMarkReadProcedure:541 case MergeRequestServiceMarkReadProcedure:
450 mergeRequestServiceMarkReadHandler.ServeHTTP(w, r)542 mergeRequestServiceMarkReadHandler.ServeHTTP(w, r)
451 default:543 default:
@@ -493,6 +585,14 @@ func (UnimplementedMergeRequestServiceHandler) MergeMergeRequest(context.Context
493 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MergeMergeRequest is not implemented"))585 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MergeMergeRequest is not implemented"))
494 }586 }
495 587
588+func (UnimplementedMergeRequestServiceHandler) EnableAutoMerge(context.Context, *connect.Request[ermite.EnableAutoMergeRequest]) (*connect.Response[ermite.EnableAutoMergeResponse], error) {
589+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.EnableAutoMerge is not implemented"))
590+}
591+
592+func (UnimplementedMergeRequestServiceHandler) CancelAutoMerge(context.Context, *connect.Request[ermite.CancelAutoMergeRequest]) (*connect.Response[ermite.CancelAutoMergeResponse], error) {
593+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.CancelAutoMerge is not implemented"))
594+}
595+
496 func (UnimplementedMergeRequestServiceHandler) MarkRead(context.Context, *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {596 func (UnimplementedMergeRequestServiceHandler) MarkRead(context.Context, *connect.Request[ermite.MarkReadRequest]) (*connect.Response[ermite.MarkReadResponse], error) {
497 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MarkRead is not implemented"))597 return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.MergeRequestService.MarkRead is not implemented"))
498 }598 }
M gen/ermite/event.pb.go +296 -133
@@ -173,6 +173,8 @@ type Event struct {
173173 // *Event_MergeRequestMergeability
174174 // *Event_MirrorFailed
175175 // *Event_MirrorRecovered
176+ // *Event_MergeRequestAutoMergeEnabled
177+ // *Event_MergeRequestAutoMergeCancelled
176178 Kind isEvent_Kind `protobuf_oneof:"kind"`
177179 unknownFields protoimpl.UnknownFields
178180 sizeCache protoimpl.SizeCache
@@ -427,6 +429,24 @@ func (x *Event) GetMirrorRecovered() *MirrorRecovered {
427429 return nil
428430 }
429431
432+func (x *Event) GetMergeRequestAutoMergeEnabled() *MergeRequestAutoMergeEnabled {
433+ if x != nil {
434+ if x, ok := x.Kind.(*Event_MergeRequestAutoMergeEnabled); ok {
435+ return x.MergeRequestAutoMergeEnabled
436+ }
437+ }
438+ return nil
439+}
440+
441+func (x *Event) GetMergeRequestAutoMergeCancelled() *MergeRequestAutoMergeCancelled {
442+ if x != nil {
443+ if x, ok := x.Kind.(*Event_MergeRequestAutoMergeCancelled); ok {
444+ return x.MergeRequestAutoMergeCancelled
445+ }
446+ }
447+ return nil
448+}
449+
430450 type isEvent_Kind interface {
431451 isEvent_Kind()
432452 }
@@ -543,6 +563,17 @@ type Event_MirrorRecovered struct {
543563 MirrorRecovered *MirrorRecovered `protobuf:"bytes,24,opt,name=mirror_recovered,json=mirrorRecovered,proto3,oneof"`
544564 }
545565
566+type Event_MergeRequestAutoMergeEnabled struct {
567+ // MergeRequestAutoMergeEnabled: auto-merge was enabled on a merge request.
568+ MergeRequestAutoMergeEnabled *MergeRequestAutoMergeEnabled `protobuf:"bytes,25,opt,name=merge_request_auto_merge_enabled,json=mergeRequestAutoMergeEnabled,proto3,oneof"`
569+}
570+
571+type Event_MergeRequestAutoMergeCancelled struct {
572+ // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was
573+ // cancelled.
574+ MergeRequestAutoMergeCancelled *MergeRequestAutoMergeCancelled `protobuf:"bytes,26,opt,name=merge_request_auto_merge_cancelled,json=mergeRequestAutoMergeCancelled,proto3,oneof"`
575+}
576+
546577 func (*Event_RepoCreated) isEvent_Kind() {}
547578
548579 func (*Event_RepoUpdated) isEvent_Kind() {}
@@ -587,6 +618,10 @@ func (*Event_MirrorFailed) isEvent_Kind() {}
587618
588619 func (*Event_MirrorRecovered) isEvent_Kind() {}
589620
621+func (*Event_MergeRequestAutoMergeEnabled) isEvent_Kind() {}
622+
623+func (*Event_MergeRequestAutoMergeCancelled) isEvent_Kind() {}
624+
590625 // RepoCreated reports a new repository.
591626 type RepoCreated struct {
592627 state protoimpl.MessageState `protogen:"open.v1"`
@@ -895,7 +930,9 @@ func (x *MergeRequestOpened) GetMergeRequest() *MergeRequest {
895930 type MergeRequestMerged struct {
896931 state protoimpl.MessageState `protogen:"open.v1"`
897932 // MergeRequest is the merge request after the merge.
898- MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
933+ MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
934+ // Auto is true when the server merged it by auto-merge.
935+ Auto bool `protobuf:"varint,2,opt,name=auto,proto3" json:"auto,omitempty"`
899936 unknownFields protoimpl.UnknownFields
900937 sizeCache protoimpl.SizeCache
901938 }
@@ -937,6 +974,116 @@ func (x *MergeRequestMerged) GetMergeRequest() *MergeRequest {
937974 return nil
938975 }
939976
977+func (x *MergeRequestMerged) GetAuto() bool {
978+ if x != nil {
979+ return x.Auto
980+ }
981+ return false
982+}
983+
984+// MergeRequestAutoMergeEnabled reports auto-merge enabled on an open merge
985+// request. It is published again when auto-merge is enabled again.
986+type MergeRequestAutoMergeEnabled struct {
987+ state protoimpl.MessageState `protogen:"open.v1"`
988+ // MergeRequest is the merge request, with auto_merge set.
989+ MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
990+ unknownFields protoimpl.UnknownFields
991+ sizeCache protoimpl.SizeCache
992+}
993+
994+func (x *MergeRequestAutoMergeEnabled) Reset() {
995+ *x = MergeRequestAutoMergeEnabled{}
996+ mi := &file_ermite_event_proto_msgTypes[10]
997+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
998+ ms.StoreMessageInfo(mi)
999+}
1000+
1001+func (x *MergeRequestAutoMergeEnabled) String() string {
1002+ return protoimpl.X.MessageStringOf(x)
1003+}
1004+
1005+func (*MergeRequestAutoMergeEnabled) ProtoMessage() {}
1006+
1007+func (x *MergeRequestAutoMergeEnabled) ProtoReflect() protoreflect.Message {
1008+ mi := &file_ermite_event_proto_msgTypes[10]
1009+ if x != nil {
1010+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1011+ if ms.LoadMessageInfo() == nil {
1012+ ms.StoreMessageInfo(mi)
1013+ }
1014+ return ms
1015+ }
1016+ return mi.MessageOf(x)
1017+}
1018+
1019+// Deprecated: Use MergeRequestAutoMergeEnabled.ProtoReflect.Descriptor instead.
1020+func (*MergeRequestAutoMergeEnabled) Descriptor() ([]byte, []int) {
1021+ return file_ermite_event_proto_rawDescGZIP(), []int{10}
1022+}
1023+
1024+func (x *MergeRequestAutoMergeEnabled) GetMergeRequest() *MergeRequest {
1025+ if x != nil {
1026+ return x.MergeRequest
1027+ }
1028+ return nil
1029+}
1030+
1031+// MergeRequestAutoMergeCancelled reports the auto-merge of a merge request
1032+// cancelled, by a caller or by the server.
1033+type MergeRequestAutoMergeCancelled struct {
1034+ state protoimpl.MessageState `protogen:"open.v1"`
1035+ // MergeRequest is the merge request, with auto_merge unset.
1036+ MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
1037+ // Reason says in one line why it was cancelled. For display only.
1038+ Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"`
1039+ unknownFields protoimpl.UnknownFields
1040+ sizeCache protoimpl.SizeCache
1041+}
1042+
1043+func (x *MergeRequestAutoMergeCancelled) Reset() {
1044+ *x = MergeRequestAutoMergeCancelled{}
1045+ mi := &file_ermite_event_proto_msgTypes[11]
1046+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1047+ ms.StoreMessageInfo(mi)
1048+}
1049+
1050+func (x *MergeRequestAutoMergeCancelled) String() string {
1051+ return protoimpl.X.MessageStringOf(x)
1052+}
1053+
1054+func (*MergeRequestAutoMergeCancelled) ProtoMessage() {}
1055+
1056+func (x *MergeRequestAutoMergeCancelled) ProtoReflect() protoreflect.Message {
1057+ mi := &file_ermite_event_proto_msgTypes[11]
1058+ if x != nil {
1059+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1060+ if ms.LoadMessageInfo() == nil {
1061+ ms.StoreMessageInfo(mi)
1062+ }
1063+ return ms
1064+ }
1065+ return mi.MessageOf(x)
1066+}
1067+
1068+// Deprecated: Use MergeRequestAutoMergeCancelled.ProtoReflect.Descriptor instead.
1069+func (*MergeRequestAutoMergeCancelled) Descriptor() ([]byte, []int) {
1070+ return file_ermite_event_proto_rawDescGZIP(), []int{11}
1071+}
1072+
1073+func (x *MergeRequestAutoMergeCancelled) GetMergeRequest() *MergeRequest {
1074+ if x != nil {
1075+ return x.MergeRequest
1076+ }
1077+ return nil
1078+}
1079+
1080+func (x *MergeRequestAutoMergeCancelled) GetReason() string {
1081+ if x != nil {
1082+ return x.Reason
1083+ }
1084+ return ""
1085+}
1086+
9401087 // MergeRequestMergeability reports the mergeability of an open merge request.
9411088 // It is published each time the server settles a result for new tips of the
9421089 // source or target branch, so the state may be the same as the previous
@@ -955,7 +1102,7 @@ type MergeRequestMergeability struct {
9551102
9561103 func (x *MergeRequestMergeability) Reset() {
9571104 *x = MergeRequestMergeability{}
958- mi := &file_ermite_event_proto_msgTypes[10]
1105+ mi := &file_ermite_event_proto_msgTypes[12]
9591106 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
9601107 ms.StoreMessageInfo(mi)
9611108 }
@@ -967,7 +1114,7 @@ func (x *MergeRequestMergeability) String() string {
9671114 func (*MergeRequestMergeability) ProtoMessage() {}
9681115
9691116 func (x *MergeRequestMergeability) ProtoReflect() protoreflect.Message {
970- mi := &file_ermite_event_proto_msgTypes[10]
1117+ mi := &file_ermite_event_proto_msgTypes[12]
9711118 if x != nil {
9721119 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
9731120 if ms.LoadMessageInfo() == nil {
@@ -980,7 +1127,7 @@ func (x *MergeRequestMergeability) ProtoReflect() protoreflect.Message {
9801127
9811128 // Deprecated: Use MergeRequestMergeability.ProtoReflect.Descriptor instead.
9821129 func (*MergeRequestMergeability) Descriptor() ([]byte, []int) {
983- return file_ermite_event_proto_rawDescGZIP(), []int{10}
1130+ return file_ermite_event_proto_rawDescGZIP(), []int{12}
9841131 }
9851132
9861133 func (x *MergeRequestMergeability) GetRepo() string {
@@ -1015,7 +1162,7 @@ type MergeRequestClosed struct {
10151162
10161163 func (x *MergeRequestClosed) Reset() {
10171164 *x = MergeRequestClosed{}
1018- mi := &file_ermite_event_proto_msgTypes[11]
1165+ mi := &file_ermite_event_proto_msgTypes[13]
10191166 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
10201167 ms.StoreMessageInfo(mi)
10211168 }
@@ -1027,7 +1174,7 @@ func (x *MergeRequestClosed) String() string {
10271174 func (*MergeRequestClosed) ProtoMessage() {}
10281175
10291176 func (x *MergeRequestClosed) ProtoReflect() protoreflect.Message {
1030- mi := &file_ermite_event_proto_msgTypes[11]
1177+ mi := &file_ermite_event_proto_msgTypes[13]
10311178 if x != nil {
10321179 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
10331180 if ms.LoadMessageInfo() == nil {
@@ -1040,7 +1187,7 @@ func (x *MergeRequestClosed) ProtoReflect() protoreflect.Message {
10401187
10411188 // Deprecated: Use MergeRequestClosed.ProtoReflect.Descriptor instead.
10421189 func (*MergeRequestClosed) Descriptor() ([]byte, []int) {
1043- return file_ermite_event_proto_rawDescGZIP(), []int{11}
1190+ return file_ermite_event_proto_rawDescGZIP(), []int{13}
10441191 }
10451192
10461193 func (x *MergeRequestClosed) GetMergeRequest() *MergeRequest {
@@ -1065,7 +1212,7 @@ type CommentAdded struct {
10651212
10661213 func (x *CommentAdded) Reset() {
10671214 *x = CommentAdded{}
1068- mi := &file_ermite_event_proto_msgTypes[12]
1215+ mi := &file_ermite_event_proto_msgTypes[14]
10691216 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
10701217 ms.StoreMessageInfo(mi)
10711218 }
@@ -1077,7 +1224,7 @@ func (x *CommentAdded) String() string {
10771224 func (*CommentAdded) ProtoMessage() {}
10781225
10791226 func (x *CommentAdded) ProtoReflect() protoreflect.Message {
1080- mi := &file_ermite_event_proto_msgTypes[12]
1227+ mi := &file_ermite_event_proto_msgTypes[14]
10811228 if x != nil {
10821229 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
10831230 if ms.LoadMessageInfo() == nil {
@@ -1090,7 +1237,7 @@ func (x *CommentAdded) ProtoReflect() protoreflect.Message {
10901237
10911238 // Deprecated: Use CommentAdded.ProtoReflect.Descriptor instead.
10921239 func (*CommentAdded) Descriptor() ([]byte, []int) {
1093- return file_ermite_event_proto_rawDescGZIP(), []int{12}
1240+ return file_ermite_event_proto_rawDescGZIP(), []int{14}
10941241 }
10951242
10961243 func (x *CommentAdded) GetRepo() string {
@@ -1129,7 +1276,7 @@ type CommentEdited struct {
11291276
11301277 func (x *CommentEdited) Reset() {
11311278 *x = CommentEdited{}
1132- mi := &file_ermite_event_proto_msgTypes[13]
1279+ mi := &file_ermite_event_proto_msgTypes[15]
11331280 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
11341281 ms.StoreMessageInfo(mi)
11351282 }
@@ -1141,7 +1288,7 @@ func (x *CommentEdited) String() string {
11411288 func (*CommentEdited) ProtoMessage() {}
11421289
11431290 func (x *CommentEdited) ProtoReflect() protoreflect.Message {
1144- mi := &file_ermite_event_proto_msgTypes[13]
1291+ mi := &file_ermite_event_proto_msgTypes[15]
11451292 if x != nil {
11461293 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
11471294 if ms.LoadMessageInfo() == nil {
@@ -1154,7 +1301,7 @@ func (x *CommentEdited) ProtoReflect() protoreflect.Message {
11541301
11551302 // Deprecated: Use CommentEdited.ProtoReflect.Descriptor instead.
11561303 func (*CommentEdited) Descriptor() ([]byte, []int) {
1157- return file_ermite_event_proto_rawDescGZIP(), []int{13}
1304+ return file_ermite_event_proto_rawDescGZIP(), []int{15}
11581305 }
11591306
11601307 func (x *CommentEdited) GetRepo() string {
@@ -1194,7 +1341,7 @@ type CommentDeleted struct {
11941341
11951342 func (x *CommentDeleted) Reset() {
11961343 *x = CommentDeleted{}
1197- mi := &file_ermite_event_proto_msgTypes[14]
1344+ mi := &file_ermite_event_proto_msgTypes[16]
11981345 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
11991346 ms.StoreMessageInfo(mi)
12001347 }
@@ -1206,7 +1353,7 @@ func (x *CommentDeleted) String() string {
12061353 func (*CommentDeleted) ProtoMessage() {}
12071354
12081355 func (x *CommentDeleted) ProtoReflect() protoreflect.Message {
1209- mi := &file_ermite_event_proto_msgTypes[14]
1356+ mi := &file_ermite_event_proto_msgTypes[16]
12101357 if x != nil {
12111358 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12121359 if ms.LoadMessageInfo() == nil {
@@ -1219,7 +1366,7 @@ func (x *CommentDeleted) ProtoReflect() protoreflect.Message {
12191366
12201367 // Deprecated: Use CommentDeleted.ProtoReflect.Descriptor instead.
12211368 func (*CommentDeleted) Descriptor() ([]byte, []int) {
1222- return file_ermite_event_proto_rawDescGZIP(), []int{14}
1369+ return file_ermite_event_proto_rawDescGZIP(), []int{16}
12231370 }
12241371
12251372 func (x *CommentDeleted) GetRepo() string {
@@ -1259,7 +1406,7 @@ type CommentResolved struct {
12591406
12601407 func (x *CommentResolved) Reset() {
12611408 *x = CommentResolved{}
1262- mi := &file_ermite_event_proto_msgTypes[15]
1409+ mi := &file_ermite_event_proto_msgTypes[17]
12631410 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12641411 ms.StoreMessageInfo(mi)
12651412 }
@@ -1271,7 +1418,7 @@ func (x *CommentResolved) String() string {
12711418 func (*CommentResolved) ProtoMessage() {}
12721419
12731420 func (x *CommentResolved) ProtoReflect() protoreflect.Message {
1274- mi := &file_ermite_event_proto_msgTypes[15]
1421+ mi := &file_ermite_event_proto_msgTypes[17]
12751422 if x != nil {
12761423 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
12771424 if ms.LoadMessageInfo() == nil {
@@ -1284,7 +1431,7 @@ func (x *CommentResolved) ProtoReflect() protoreflect.Message {
12841431
12851432 // Deprecated: Use CommentResolved.ProtoReflect.Descriptor instead.
12861433 func (*CommentResolved) Descriptor() ([]byte, []int) {
1287- return file_ermite_event_proto_rawDescGZIP(), []int{15}
1434+ return file_ermite_event_proto_rawDescGZIP(), []int{17}
12881435 }
12891436
12901437 func (x *CommentResolved) GetRepo() string {
@@ -1319,7 +1466,7 @@ type IssueOpened struct {
13191466
13201467 func (x *IssueOpened) Reset() {
13211468 *x = IssueOpened{}
1322- mi := &file_ermite_event_proto_msgTypes[16]
1469+ mi := &file_ermite_event_proto_msgTypes[18]
13231470 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13241471 ms.StoreMessageInfo(mi)
13251472 }
@@ -1331,7 +1478,7 @@ func (x *IssueOpened) String() string {
13311478 func (*IssueOpened) ProtoMessage() {}
13321479
13331480 func (x *IssueOpened) ProtoReflect() protoreflect.Message {
1334- mi := &file_ermite_event_proto_msgTypes[16]
1481+ mi := &file_ermite_event_proto_msgTypes[18]
13351482 if x != nil {
13361483 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13371484 if ms.LoadMessageInfo() == nil {
@@ -1344,7 +1491,7 @@ func (x *IssueOpened) ProtoReflect() protoreflect.Message {
13441491
13451492 // Deprecated: Use IssueOpened.ProtoReflect.Descriptor instead.
13461493 func (*IssueOpened) Descriptor() ([]byte, []int) {
1347- return file_ermite_event_proto_rawDescGZIP(), []int{16}
1494+ return file_ermite_event_proto_rawDescGZIP(), []int{18}
13481495 }
13491496
13501497 func (x *IssueOpened) GetIssue() *Issue {
@@ -1365,7 +1512,7 @@ type IssueClosed struct {
13651512
13661513 func (x *IssueClosed) Reset() {
13671514 *x = IssueClosed{}
1368- mi := &file_ermite_event_proto_msgTypes[17]
1515+ mi := &file_ermite_event_proto_msgTypes[19]
13691516 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13701517 ms.StoreMessageInfo(mi)
13711518 }
@@ -1377,7 +1524,7 @@ func (x *IssueClosed) String() string {
13771524 func (*IssueClosed) ProtoMessage() {}
13781525
13791526 func (x *IssueClosed) ProtoReflect() protoreflect.Message {
1380- mi := &file_ermite_event_proto_msgTypes[17]
1527+ mi := &file_ermite_event_proto_msgTypes[19]
13811528 if x != nil {
13821529 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
13831530 if ms.LoadMessageInfo() == nil {
@@ -1390,7 +1537,7 @@ func (x *IssueClosed) ProtoReflect() protoreflect.Message {
13901537
13911538 // Deprecated: Use IssueClosed.ProtoReflect.Descriptor instead.
13921539 func (*IssueClosed) Descriptor() ([]byte, []int) {
1393- return file_ermite_event_proto_rawDescGZIP(), []int{17}
1540+ return file_ermite_event_proto_rawDescGZIP(), []int{19}
13941541 }
13951542
13961543 func (x *IssueClosed) GetIssue() *Issue {
@@ -1411,7 +1558,7 @@ type IssueReopened struct {
14111558
14121559 func (x *IssueReopened) Reset() {
14131560 *x = IssueReopened{}
1414- mi := &file_ermite_event_proto_msgTypes[18]
1561+ mi := &file_ermite_event_proto_msgTypes[20]
14151562 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14161563 ms.StoreMessageInfo(mi)
14171564 }
@@ -1423,7 +1570,7 @@ func (x *IssueReopened) String() string {
14231570 func (*IssueReopened) ProtoMessage() {}
14241571
14251572 func (x *IssueReopened) ProtoReflect() protoreflect.Message {
1426- mi := &file_ermite_event_proto_msgTypes[18]
1573+ mi := &file_ermite_event_proto_msgTypes[20]
14271574 if x != nil {
14281575 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14291576 if ms.LoadMessageInfo() == nil {
@@ -1436,7 +1583,7 @@ func (x *IssueReopened) ProtoReflect() protoreflect.Message {
14361583
14371584 // Deprecated: Use IssueReopened.ProtoReflect.Descriptor instead.
14381585 func (*IssueReopened) Descriptor() ([]byte, []int) {
1439- return file_ermite_event_proto_rawDescGZIP(), []int{18}
1586+ return file_ermite_event_proto_rawDescGZIP(), []int{20}
14401587 }
14411588
14421589 func (x *IssueReopened) GetIssue() *Issue {
@@ -1461,7 +1608,7 @@ type IssueCommented struct {
14611608
14621609 func (x *IssueCommented) Reset() {
14631610 *x = IssueCommented{}
1464- mi := &file_ermite_event_proto_msgTypes[19]
1611+ mi := &file_ermite_event_proto_msgTypes[21]
14651612 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14661613 ms.StoreMessageInfo(mi)
14671614 }
@@ -1473,7 +1620,7 @@ func (x *IssueCommented) String() string {
14731620 func (*IssueCommented) ProtoMessage() {}
14741621
14751622 func (x *IssueCommented) ProtoReflect() protoreflect.Message {
1476- mi := &file_ermite_event_proto_msgTypes[19]
1623+ mi := &file_ermite_event_proto_msgTypes[21]
14771624 if x != nil {
14781625 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
14791626 if ms.LoadMessageInfo() == nil {
@@ -1486,7 +1633,7 @@ func (x *IssueCommented) ProtoReflect() protoreflect.Message {
14861633
14871634 // Deprecated: Use IssueCommented.ProtoReflect.Descriptor instead.
14881635 func (*IssueCommented) Descriptor() ([]byte, []int) {
1489- return file_ermite_event_proto_rawDescGZIP(), []int{19}
1636+ return file_ermite_event_proto_rawDescGZIP(), []int{21}
14901637 }
14911638
14921639 func (x *IssueCommented) GetRepo() string {
@@ -1525,7 +1672,7 @@ type IssueSubmitted struct {
15251672
15261673 func (x *IssueSubmitted) Reset() {
15271674 *x = IssueSubmitted{}
1528- mi := &file_ermite_event_proto_msgTypes[20]
1675+ mi := &file_ermite_event_proto_msgTypes[22]
15291676 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15301677 ms.StoreMessageInfo(mi)
15311678 }
@@ -1537,7 +1684,7 @@ func (x *IssueSubmitted) String() string {
15371684 func (*IssueSubmitted) ProtoMessage() {}
15381685
15391686 func (x *IssueSubmitted) ProtoReflect() protoreflect.Message {
1540- mi := &file_ermite_event_proto_msgTypes[20]
1687+ mi := &file_ermite_event_proto_msgTypes[22]
15411688 if x != nil {
15421689 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15431690 if ms.LoadMessageInfo() == nil {
@@ -1550,7 +1697,7 @@ func (x *IssueSubmitted) ProtoReflect() protoreflect.Message {
15501697
15511698 // Deprecated: Use IssueSubmitted.ProtoReflect.Descriptor instead.
15521699 func (*IssueSubmitted) Descriptor() ([]byte, []int) {
1553- return file_ermite_event_proto_rawDescGZIP(), []int{20}
1700+ return file_ermite_event_proto_rawDescGZIP(), []int{22}
15541701 }
15551702
15561703 func (x *IssueSubmitted) GetRepo() string {
@@ -1580,7 +1727,7 @@ type Gap struct {
15801727
15811728 func (x *Gap) Reset() {
15821729 *x = Gap{}
1583- mi := &file_ermite_event_proto_msgTypes[21]
1730+ mi := &file_ermite_event_proto_msgTypes[23]
15841731 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15851732 ms.StoreMessageInfo(mi)
15861733 }
@@ -1592,7 +1739,7 @@ func (x *Gap) String() string {
15921739 func (*Gap) ProtoMessage() {}
15931740
15941741 func (x *Gap) ProtoReflect() protoreflect.Message {
1595- mi := &file_ermite_event_proto_msgTypes[21]
1742+ mi := &file_ermite_event_proto_msgTypes[23]
15961743 if x != nil {
15971744 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
15981745 if ms.LoadMessageInfo() == nil {
@@ -1605,7 +1752,7 @@ func (x *Gap) ProtoReflect() protoreflect.Message {
16051752
16061753 // Deprecated: Use Gap.ProtoReflect.Descriptor instead.
16071754 func (*Gap) Descriptor() ([]byte, []int) {
1608- return file_ermite_event_proto_rawDescGZIP(), []int{21}
1755+ return file_ermite_event_proto_rawDescGZIP(), []int{23}
16091756 }
16101757
16111758 // RunUpdated reports a CI run that was created or whose status, conclusion or
@@ -1620,7 +1767,7 @@ type RunUpdated struct {
16201767
16211768 func (x *RunUpdated) Reset() {
16221769 *x = RunUpdated{}
1623- mi := &file_ermite_event_proto_msgTypes[22]
1770+ mi := &file_ermite_event_proto_msgTypes[24]
16241771 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16251772 ms.StoreMessageInfo(mi)
16261773 }
@@ -1632,7 +1779,7 @@ func (x *RunUpdated) String() string {
16321779 func (*RunUpdated) ProtoMessage() {}
16331780
16341781 func (x *RunUpdated) ProtoReflect() protoreflect.Message {
1635- mi := &file_ermite_event_proto_msgTypes[22]
1782+ mi := &file_ermite_event_proto_msgTypes[24]
16361783 if x != nil {
16371784 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16381785 if ms.LoadMessageInfo() == nil {
@@ -1645,7 +1792,7 @@ func (x *RunUpdated) ProtoReflect() protoreflect.Message {
16451792
16461793 // Deprecated: Use RunUpdated.ProtoReflect.Descriptor instead.
16471794 func (*RunUpdated) Descriptor() ([]byte, []int) {
1648- return file_ermite_event_proto_rawDescGZIP(), []int{22}
1795+ return file_ermite_event_proto_rawDescGZIP(), []int{24}
16491796 }
16501797
16511798 func (x *RunUpdated) GetRun() *Run {
@@ -1667,7 +1814,7 @@ type JobUpdated struct {
16671814
16681815 func (x *JobUpdated) Reset() {
16691816 *x = JobUpdated{}
1670- mi := &file_ermite_event_proto_msgTypes[23]
1817+ mi := &file_ermite_event_proto_msgTypes[25]
16711818 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16721819 ms.StoreMessageInfo(mi)
16731820 }
@@ -1679,7 +1826,7 @@ func (x *JobUpdated) String() string {
16791826 func (*JobUpdated) ProtoMessage() {}
16801827
16811828 func (x *JobUpdated) ProtoReflect() protoreflect.Message {
1682- mi := &file_ermite_event_proto_msgTypes[23]
1829+ mi := &file_ermite_event_proto_msgTypes[25]
16831830 if x != nil {
16841831 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
16851832 if ms.LoadMessageInfo() == nil {
@@ -1692,7 +1839,7 @@ func (x *JobUpdated) ProtoReflect() protoreflect.Message {
16921839
16931840 // Deprecated: Use JobUpdated.ProtoReflect.Descriptor instead.
16941841 func (*JobUpdated) Descriptor() ([]byte, []int) {
1695- return file_ermite_event_proto_rawDescGZIP(), []int{23}
1842+ return file_ermite_event_proto_rawDescGZIP(), []int{25}
16961843 }
16971844
16981845 func (x *JobUpdated) GetJob() *RunJob {
@@ -1721,7 +1868,7 @@ type MirrorFailed struct {
17211868
17221869 func (x *MirrorFailed) Reset() {
17231870 *x = MirrorFailed{}
1724- mi := &file_ermite_event_proto_msgTypes[24]
1871+ mi := &file_ermite_event_proto_msgTypes[26]
17251872 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17261873 ms.StoreMessageInfo(mi)
17271874 }
@@ -1733,7 +1880,7 @@ func (x *MirrorFailed) String() string {
17331880 func (*MirrorFailed) ProtoMessage() {}
17341881
17351882 func (x *MirrorFailed) ProtoReflect() protoreflect.Message {
1736- mi := &file_ermite_event_proto_msgTypes[24]
1883+ mi := &file_ermite_event_proto_msgTypes[26]
17371884 if x != nil {
17381885 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17391886 if ms.LoadMessageInfo() == nil {
@@ -1746,7 +1893,7 @@ func (x *MirrorFailed) ProtoReflect() protoreflect.Message {
17461893
17471894 // Deprecated: Use MirrorFailed.ProtoReflect.Descriptor instead.
17481895 func (*MirrorFailed) Descriptor() ([]byte, []int) {
1749- return file_ermite_event_proto_rawDescGZIP(), []int{24}
1896+ return file_ermite_event_proto_rawDescGZIP(), []int{26}
17501897 }
17511898
17521899 func (x *MirrorFailed) GetRepo() string {
@@ -1782,7 +1929,7 @@ type MirrorRecovered struct {
17821929
17831930 func (x *MirrorRecovered) Reset() {
17841931 *x = MirrorRecovered{}
1785- mi := &file_ermite_event_proto_msgTypes[25]
1932+ mi := &file_ermite_event_proto_msgTypes[27]
17861933 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
17871934 ms.StoreMessageInfo(mi)
17881935 }
@@ -1794,7 +1941,7 @@ func (x *MirrorRecovered) String() string {
17941941 func (*MirrorRecovered) ProtoMessage() {}
17951942
17961943 func (x *MirrorRecovered) ProtoReflect() protoreflect.Message {
1797- mi := &file_ermite_event_proto_msgTypes[25]
1944+ mi := &file_ermite_event_proto_msgTypes[27]
17981945 if x != nil {
17991946 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
18001947 if ms.LoadMessageInfo() == nil {
@@ -1807,7 +1954,7 @@ func (x *MirrorRecovered) ProtoReflect() protoreflect.Message {
18071954
18081955 // Deprecated: Use MirrorRecovered.ProtoReflect.Descriptor instead.
18091956 func (*MirrorRecovered) Descriptor() ([]byte, []int) {
1810- return file_ermite_event_proto_rawDescGZIP(), []int{25}
1957+ return file_ermite_event_proto_rawDescGZIP(), []int{27}
18111958 }
18121959
18131960 func (x *MirrorRecovered) GetRepo() string {
@@ -1826,7 +1973,7 @@ const file_ermite_event_proto_rawDesc = "" +
18261973 "\x06topics\x18\x01 \x03(\tR\x06topics\x12!\n" +
18271974 "\fresume_after\x18\x02 \x01(\tR\vresumeAfter\"4\n" +
18281975 "\rWatchResponse\x12#\n" +
1829- "\x05event\x18\x01 \x01(\v2\r.ermite.EventR\x05event\"\xcb\v\n" +
1976+ "\x05event\x18\x01 \x01(\v2\r.ermite.EventR\x05event\"\xb1\r\n" +
18301977 "\x05Event\x12\x0e\n" +
18311978 "\x02id\x18\x01 \x01(\tR\x02id\x12.\n" +
18321979 "\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x128\n" +
@@ -1854,7 +2001,9 @@ const file_ermite_event_proto_rawDesc = "" +
18542001 "\x0fissue_submitted\x18\x15 \x01(\v2\x16.ermite.IssueSubmittedH\x00R\x0eissueSubmitted\x12`\n" +
18552002 "\x1amerge_request_mergeability\x18\x16 \x01(\v2 .ermite.MergeRequestMergeabilityH\x00R\x18mergeRequestMergeability\x12;\n" +
18562003 "\rmirror_failed\x18\x17 \x01(\v2\x14.ermite.MirrorFailedH\x00R\fmirrorFailed\x12D\n" +
1857- "\x10mirror_recovered\x18\x18 \x01(\v2\x17.ermite.MirrorRecoveredH\x00R\x0fmirrorRecoveredB\x06\n" +
2004+ "\x10mirror_recovered\x18\x18 \x01(\v2\x17.ermite.MirrorRecoveredH\x00R\x0fmirrorRecovered\x12n\n" +
2005+ " merge_request_auto_merge_enabled\x18\x19 \x01(\v2$.ermite.MergeRequestAutoMergeEnabledH\x00R\x1cmergeRequestAutoMergeEnabled\x12t\n" +
2006+ "\"merge_request_auto_merge_cancelled\x18\x1a \x01(\v2&.ermite.MergeRequestAutoMergeCancelledH\x00R\x1emergeRequestAutoMergeCancelledB\x06\n" +
18582007 "\x04kind\"/\n" +
18592008 "\vRepoCreated\x12 \n" +
18602009 "\x04repo\x18\x01 \x01(\v2\f.ermite.RepoR\x04repo\"/\n" +
@@ -1871,9 +2020,15 @@ const file_ermite_event_proto_rawDesc = "" +
18712020 "\x06old_id\x18\x02 \x01(\tR\x05oldId\x12\x15\n" +
18722021 "\x06new_id\x18\x03 \x01(\tR\x05newId\"O\n" +
18732022 "\x12MergeRequestOpened\x129\n" +
1874- "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"O\n" +
2023+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"c\n" +
18752024 "\x12MergeRequestMerged\x129\n" +
1876- "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"\x80\x01\n" +
2025+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12\x12\n" +
2026+ "\x04auto\x18\x02 \x01(\bR\x04auto\"Y\n" +
2027+ "\x1cMergeRequestAutoMergeEnabled\x129\n" +
2028+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"s\n" +
2029+ "\x1eMergeRequestAutoMergeCancelled\x129\n" +
2030+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12\x16\n" +
2031+ "\x06reason\x18\x02 \x01(\tR\x06reason\"\x80\x01\n" +
18772032 "\x18MergeRequestMergeability\x12\x12\n" +
18782033 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
18792034 "\x06number\x18\x02 \x01(\x03R\x06number\x128\n" +
@@ -1940,95 +2095,101 @@ func file_ermite_event_proto_rawDescGZIP() []byte {
19402095 return file_ermite_event_proto_rawDescData
19412096 }
19422097
1943-var file_ermite_event_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
2098+var file_ermite_event_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
19442099 var file_ermite_event_proto_goTypes = []any{
1945- (*WatchRequest)(nil), // 0: ermite.WatchRequest
1946- (*WatchResponse)(nil), // 1: ermite.WatchResponse
1947- (*Event)(nil), // 2: ermite.Event
1948- (*RepoCreated)(nil), // 3: ermite.RepoCreated
1949- (*RepoUpdated)(nil), // 4: ermite.RepoUpdated
1950- (*RepoDeleted)(nil), // 5: ermite.RepoDeleted
1951- (*Pushed)(nil), // 6: ermite.Pushed
1952- (*RefUpdate)(nil), // 7: ermite.RefUpdate
1953- (*MergeRequestOpened)(nil), // 8: ermite.MergeRequestOpened
1954- (*MergeRequestMerged)(nil), // 9: ermite.MergeRequestMerged
1955- (*MergeRequestMergeability)(nil), // 10: ermite.MergeRequestMergeability
1956- (*MergeRequestClosed)(nil), // 11: ermite.MergeRequestClosed
1957- (*CommentAdded)(nil), // 12: ermite.CommentAdded
1958- (*CommentEdited)(nil), // 13: ermite.CommentEdited
1959- (*CommentDeleted)(nil), // 14: ermite.CommentDeleted
1960- (*CommentResolved)(nil), // 15: ermite.CommentResolved
1961- (*IssueOpened)(nil), // 16: ermite.IssueOpened
1962- (*IssueClosed)(nil), // 17: ermite.IssueClosed
1963- (*IssueReopened)(nil), // 18: ermite.IssueReopened
1964- (*IssueCommented)(nil), // 19: ermite.IssueCommented
1965- (*IssueSubmitted)(nil), // 20: ermite.IssueSubmitted
1966- (*Gap)(nil), // 21: ermite.Gap
1967- (*RunUpdated)(nil), // 22: ermite.RunUpdated
1968- (*JobUpdated)(nil), // 23: ermite.JobUpdated
1969- (*MirrorFailed)(nil), // 24: ermite.MirrorFailed
1970- (*MirrorRecovered)(nil), // 25: ermite.MirrorRecovered
1971- (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp
1972- (*Repo)(nil), // 27: ermite.Repo
1973- (*MergeRequest)(nil), // 28: ermite.MergeRequest
1974- (*Mergeability)(nil), // 29: ermite.Mergeability
1975- (*Comment)(nil), // 30: ermite.Comment
1976- (*Issue)(nil), // 31: ermite.Issue
1977- (*IssueComment)(nil), // 32: ermite.IssueComment
1978- (*Run)(nil), // 33: ermite.Run
1979- (*RunJob)(nil), // 34: ermite.RunJob
1980- (MirrorState)(0), // 35: ermite.MirrorState
2100+ (*WatchRequest)(nil), // 0: ermite.WatchRequest
2101+ (*WatchResponse)(nil), // 1: ermite.WatchResponse
2102+ (*Event)(nil), // 2: ermite.Event
2103+ (*RepoCreated)(nil), // 3: ermite.RepoCreated
2104+ (*RepoUpdated)(nil), // 4: ermite.RepoUpdated
2105+ (*RepoDeleted)(nil), // 5: ermite.RepoDeleted
2106+ (*Pushed)(nil), // 6: ermite.Pushed
2107+ (*RefUpdate)(nil), // 7: ermite.RefUpdate
2108+ (*MergeRequestOpened)(nil), // 8: ermite.MergeRequestOpened
2109+ (*MergeRequestMerged)(nil), // 9: ermite.MergeRequestMerged
2110+ (*MergeRequestAutoMergeEnabled)(nil), // 10: ermite.MergeRequestAutoMergeEnabled
2111+ (*MergeRequestAutoMergeCancelled)(nil), // 11: ermite.MergeRequestAutoMergeCancelled
2112+ (*MergeRequestMergeability)(nil), // 12: ermite.MergeRequestMergeability
2113+ (*MergeRequestClosed)(nil), // 13: ermite.MergeRequestClosed
2114+ (*CommentAdded)(nil), // 14: ermite.CommentAdded
2115+ (*CommentEdited)(nil), // 15: ermite.CommentEdited
2116+ (*CommentDeleted)(nil), // 16: ermite.CommentDeleted
2117+ (*CommentResolved)(nil), // 17: ermite.CommentResolved
2118+ (*IssueOpened)(nil), // 18: ermite.IssueOpened
2119+ (*IssueClosed)(nil), // 19: ermite.IssueClosed
2120+ (*IssueReopened)(nil), // 20: ermite.IssueReopened
2121+ (*IssueCommented)(nil), // 21: ermite.IssueCommented
2122+ (*IssueSubmitted)(nil), // 22: ermite.IssueSubmitted
2123+ (*Gap)(nil), // 23: ermite.Gap
2124+ (*RunUpdated)(nil), // 24: ermite.RunUpdated
2125+ (*JobUpdated)(nil), // 25: ermite.JobUpdated
2126+ (*MirrorFailed)(nil), // 26: ermite.MirrorFailed
2127+ (*MirrorRecovered)(nil), // 27: ermite.MirrorRecovered
2128+ (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp
2129+ (*Repo)(nil), // 29: ermite.Repo
2130+ (*MergeRequest)(nil), // 30: ermite.MergeRequest
2131+ (*Mergeability)(nil), // 31: ermite.Mergeability
2132+ (*Comment)(nil), // 32: ermite.Comment
2133+ (*Issue)(nil), // 33: ermite.Issue
2134+ (*IssueComment)(nil), // 34: ermite.IssueComment
2135+ (*Run)(nil), // 35: ermite.Run
2136+ (*RunJob)(nil), // 36: ermite.RunJob
2137+ (MirrorState)(0), // 37: ermite.MirrorState
19812138 }
19822139 var file_ermite_event_proto_depIdxs = []int32{
19832140 2, // 0: ermite.WatchResponse.event:type_name -> ermite.Event
1984- 26, // 1: ermite.Event.time:type_name -> google.protobuf.Timestamp
2141+ 28, // 1: ermite.Event.time:type_name -> google.protobuf.Timestamp
19852142 3, // 2: ermite.Event.repo_created:type_name -> ermite.RepoCreated
19862143 4, // 3: ermite.Event.repo_updated:type_name -> ermite.RepoUpdated
19872144 5, // 4: ermite.Event.repo_deleted:type_name -> ermite.RepoDeleted
19882145 6, // 5: ermite.Event.pushed:type_name -> ermite.Pushed
1989- 21, // 6: ermite.Event.gap:type_name -> ermite.Gap
2146+ 23, // 6: ermite.Event.gap:type_name -> ermite.Gap
19902147 8, // 7: ermite.Event.merge_request_opened:type_name -> ermite.MergeRequestOpened
19912148 9, // 8: ermite.Event.merge_request_merged:type_name -> ermite.MergeRequestMerged
1992- 11, // 9: ermite.Event.merge_request_closed:type_name -> ermite.MergeRequestClosed
1993- 12, // 10: ermite.Event.comment_added:type_name -> ermite.CommentAdded
1994- 22, // 11: ermite.Event.run_updated:type_name -> ermite.RunUpdated
1995- 23, // 12: ermite.Event.job_updated:type_name -> ermite.JobUpdated
1996- 13, // 13: ermite.Event.comment_edited:type_name -> ermite.CommentEdited
1997- 14, // 14: ermite.Event.comment_deleted:type_name -> ermite.CommentDeleted
1998- 15, // 15: ermite.Event.comment_resolved:type_name -> ermite.CommentResolved
1999- 16, // 16: ermite.Event.issue_opened:type_name -> ermite.IssueOpened
2000- 17, // 17: ermite.Event.issue_closed:type_name -> ermite.IssueClosed
2001- 18, // 18: ermite.Event.issue_reopened:type_name -> ermite.IssueReopened
2002- 19, // 19: ermite.Event.issue_commented:type_name -> ermite.IssueCommented
2003- 20, // 20: ermite.Event.issue_submitted:type_name -> ermite.IssueSubmitted
2004- 10, // 21: ermite.Event.merge_request_mergeability:type_name -> ermite.MergeRequestMergeability
2005- 24, // 22: ermite.Event.mirror_failed:type_name -> ermite.MirrorFailed
2006- 25, // 23: ermite.Event.mirror_recovered:type_name -> ermite.MirrorRecovered
2007- 27, // 24: ermite.RepoCreated.repo:type_name -> ermite.Repo
2008- 27, // 25: ermite.RepoUpdated.repo:type_name -> ermite.Repo
2009- 7, // 26: ermite.Pushed.ref_updates:type_name -> ermite.RefUpdate
2010- 28, // 27: ermite.MergeRequestOpened.merge_request:type_name -> ermite.MergeRequest
2011- 28, // 28: ermite.MergeRequestMerged.merge_request:type_name -> ermite.MergeRequest
2012- 29, // 29: ermite.MergeRequestMergeability.mergeability:type_name -> ermite.Mergeability
2013- 28, // 30: ermite.MergeRequestClosed.merge_request:type_name -> ermite.MergeRequest
2014- 30, // 31: ermite.CommentAdded.comment:type_name -> ermite.Comment
2015- 30, // 32: ermite.CommentEdited.comment:type_name -> ermite.Comment
2016- 30, // 33: ermite.CommentDeleted.comment:type_name -> ermite.Comment
2017- 30, // 34: ermite.CommentResolved.comment:type_name -> ermite.Comment
2018- 31, // 35: ermite.IssueOpened.issue:type_name -> ermite.Issue
2019- 31, // 36: ermite.IssueClosed.issue:type_name -> ermite.Issue
2020- 31, // 37: ermite.IssueReopened.issue:type_name -> ermite.Issue
2021- 32, // 38: ermite.IssueCommented.comment:type_name -> ermite.IssueComment
2022- 33, // 39: ermite.RunUpdated.run:type_name -> ermite.Run
2023- 34, // 40: ermite.JobUpdated.job:type_name -> ermite.RunJob
2024- 35, // 41: ermite.MirrorFailed.state:type_name -> ermite.MirrorState
2025- 0, // 42: ermite.EventService.Watch:input_type -> ermite.WatchRequest
2026- 1, // 43: ermite.EventService.Watch:output_type -> ermite.WatchResponse
2027- 43, // [43:44] is the sub-list for method output_type
2028- 42, // [42:43] is the sub-list for method input_type
2029- 42, // [42:42] is the sub-list for extension type_name
2030- 42, // [42:42] is the sub-list for extension extendee
2031- 0, // [0:42] is the sub-list for field type_name
2149+ 13, // 9: ermite.Event.merge_request_closed:type_name -> ermite.MergeRequestClosed
2150+ 14, // 10: ermite.Event.comment_added:type_name -> ermite.CommentAdded
2151+ 24, // 11: ermite.Event.run_updated:type_name -> ermite.RunUpdated
2152+ 25, // 12: ermite.Event.job_updated:type_name -> ermite.JobUpdated
2153+ 15, // 13: ermite.Event.comment_edited:type_name -> ermite.CommentEdited
2154+ 16, // 14: ermite.Event.comment_deleted:type_name -> ermite.CommentDeleted
2155+ 17, // 15: ermite.Event.comment_resolved:type_name -> ermite.CommentResolved
2156+ 18, // 16: ermite.Event.issue_opened:type_name -> ermite.IssueOpened
2157+ 19, // 17: ermite.Event.issue_closed:type_name -> ermite.IssueClosed
2158+ 20, // 18: ermite.Event.issue_reopened:type_name -> ermite.IssueReopened
2159+ 21, // 19: ermite.Event.issue_commented:type_name -> ermite.IssueCommented
2160+ 22, // 20: ermite.Event.issue_submitted:type_name -> ermite.IssueSubmitted
2161+ 12, // 21: ermite.Event.merge_request_mergeability:type_name -> ermite.MergeRequestMergeability
2162+ 26, // 22: ermite.Event.mirror_failed:type_name -> ermite.MirrorFailed
2163+ 27, // 23: ermite.Event.mirror_recovered:type_name -> ermite.MirrorRecovered
2164+ 10, // 24: ermite.Event.merge_request_auto_merge_enabled:type_name -> ermite.MergeRequestAutoMergeEnabled
2165+ 11, // 25: ermite.Event.merge_request_auto_merge_cancelled:type_name -> ermite.MergeRequestAutoMergeCancelled
2166+ 29, // 26: ermite.RepoCreated.repo:type_name -> ermite.Repo
2167+ 29, // 27: ermite.RepoUpdated.repo:type_name -> ermite.Repo
2168+ 7, // 28: ermite.Pushed.ref_updates:type_name -> ermite.RefUpdate
2169+ 30, // 29: ermite.MergeRequestOpened.merge_request:type_name -> ermite.MergeRequest
2170+ 30, // 30: ermite.MergeRequestMerged.merge_request:type_name -> ermite.MergeRequest
2171+ 30, // 31: ermite.MergeRequestAutoMergeEnabled.merge_request:type_name -> ermite.MergeRequest
2172+ 30, // 32: ermite.MergeRequestAutoMergeCancelled.merge_request:type_name -> ermite.MergeRequest
2173+ 31, // 33: ermite.MergeRequestMergeability.mergeability:type_name -> ermite.Mergeability
2174+ 30, // 34: ermite.MergeRequestClosed.merge_request:type_name -> ermite.MergeRequest
2175+ 32, // 35: ermite.CommentAdded.comment:type_name -> ermite.Comment
2176+ 32, // 36: ermite.CommentEdited.comment:type_name -> ermite.Comment
2177+ 32, // 37: ermite.CommentDeleted.comment:type_name -> ermite.Comment
2178+ 32, // 38: ermite.CommentResolved.comment:type_name -> ermite.Comment
2179+ 33, // 39: ermite.IssueOpened.issue:type_name -> ermite.Issue
2180+ 33, // 40: ermite.IssueClosed.issue:type_name -> ermite.Issue
2181+ 33, // 41: ermite.IssueReopened.issue:type_name -> ermite.Issue
2182+ 34, // 42: ermite.IssueCommented.comment:type_name -> ermite.IssueComment
2183+ 35, // 43: ermite.RunUpdated.run:type_name -> ermite.Run
2184+ 36, // 44: ermite.JobUpdated.job:type_name -> ermite.RunJob
2185+ 37, // 45: ermite.MirrorFailed.state:type_name -> ermite.MirrorState
2186+ 0, // 46: ermite.EventService.Watch:input_type -> ermite.WatchRequest
2187+ 1, // 47: ermite.EventService.Watch:output_type -> ermite.WatchResponse
2188+ 47, // [47:48] is the sub-list for method output_type
2189+ 46, // [46:47] is the sub-list for method input_type
2190+ 46, // [46:46] is the sub-list for extension type_name
2191+ 46, // [46:46] is the sub-list for extension extendee
2192+ 0, // [0:46] is the sub-list for field type_name
20322193 }
20332194
20342195 func init() { file_ermite_event_proto_init() }
@@ -2064,6 +2225,8 @@ func file_ermite_event_proto_init() {
20642225 (*Event_MergeRequestMergeability)(nil),
20652226 (*Event_MirrorFailed)(nil),
20662227 (*Event_MirrorRecovered)(nil),
2228+ (*Event_MergeRequestAutoMergeEnabled)(nil),
2229+ (*Event_MergeRequestAutoMergeCancelled)(nil),
20672230 }
20682231 type x struct{}
20692232 out := protoimpl.TypeBuilder{
@@ -2071,7 +2234,7 @@ func file_ermite_event_proto_init() {
20712234 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
20722235 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_event_proto_rawDesc), len(file_ermite_event_proto_rawDesc)),
20732236 NumEnums: 0,
2074- NumMessages: 26,
2237+ NumMessages: 28,
20752238 NumExtensions: 0,
20762239 NumServices: 1,
20772240 },
@@ -173,6 +173,8 @@ type Event struct {
173 // *Event_MergeRequestMergeability173 // *Event_MergeRequestMergeability
174 // *Event_MirrorFailed174 // *Event_MirrorFailed
175 // *Event_MirrorRecovered175 // *Event_MirrorRecovered
176+ // *Event_MergeRequestAutoMergeEnabled
177+ // *Event_MergeRequestAutoMergeCancelled
176 Kind isEvent_Kind `protobuf_oneof:"kind"`178 Kind isEvent_Kind `protobuf_oneof:"kind"`
177 unknownFields protoimpl.UnknownFields179 unknownFields protoimpl.UnknownFields
178 sizeCache protoimpl.SizeCache180 sizeCache protoimpl.SizeCache
@@ -427,6 +429,24 @@ func (x *Event) GetMirrorRecovered() *MirrorRecovered {
427 return nil429 return nil
428 }430 }
429 431
432+func (x *Event) GetMergeRequestAutoMergeEnabled() *MergeRequestAutoMergeEnabled {
433+ if x != nil {
434+ if x, ok := x.Kind.(*Event_MergeRequestAutoMergeEnabled); ok {
435+ return x.MergeRequestAutoMergeEnabled
436+ }
437+ }
438+ return nil
439+}
440+
441+func (x *Event) GetMergeRequestAutoMergeCancelled() *MergeRequestAutoMergeCancelled {
442+ if x != nil {
443+ if x, ok := x.Kind.(*Event_MergeRequestAutoMergeCancelled); ok {
444+ return x.MergeRequestAutoMergeCancelled
445+ }
446+ }
447+ return nil
448+}
449+
430 type isEvent_Kind interface {450 type isEvent_Kind interface {
431 isEvent_Kind()451 isEvent_Kind()
432 }452 }
@@ -543,6 +563,17 @@ type Event_MirrorRecovered struct {
543 MirrorRecovered *MirrorRecovered `protobuf:"bytes,24,opt,name=mirror_recovered,json=mirrorRecovered,proto3,oneof"`563 MirrorRecovered *MirrorRecovered `protobuf:"bytes,24,opt,name=mirror_recovered,json=mirrorRecovered,proto3,oneof"`
544 }564 }
545 565
566+type Event_MergeRequestAutoMergeEnabled struct {
567+ // MergeRequestAutoMergeEnabled: auto-merge was enabled on a merge request.
568+ MergeRequestAutoMergeEnabled *MergeRequestAutoMergeEnabled `protobuf:"bytes,25,opt,name=merge_request_auto_merge_enabled,json=mergeRequestAutoMergeEnabled,proto3,oneof"`
569+}
570+
571+type Event_MergeRequestAutoMergeCancelled struct {
572+ // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was
573+ // cancelled.
574+ MergeRequestAutoMergeCancelled *MergeRequestAutoMergeCancelled `protobuf:"bytes,26,opt,name=merge_request_auto_merge_cancelled,json=mergeRequestAutoMergeCancelled,proto3,oneof"`
575+}
576+
546 func (*Event_RepoCreated) isEvent_Kind() {}577 func (*Event_RepoCreated) isEvent_Kind() {}
547 578
548 func (*Event_RepoUpdated) isEvent_Kind() {}579 func (*Event_RepoUpdated) isEvent_Kind() {}
@@ -587,6 +618,10 @@ func (*Event_MirrorFailed) isEvent_Kind() {}
587 618
588 func (*Event_MirrorRecovered) isEvent_Kind() {}619 func (*Event_MirrorRecovered) isEvent_Kind() {}
589 620
621+func (*Event_MergeRequestAutoMergeEnabled) isEvent_Kind() {}
622+
623+func (*Event_MergeRequestAutoMergeCancelled) isEvent_Kind() {}
624+
590 // RepoCreated reports a new repository.625 // RepoCreated reports a new repository.
591 type RepoCreated struct {626 type RepoCreated struct {
592 state protoimpl.MessageState `protogen:"open.v1"`627 state protoimpl.MessageState `protogen:"open.v1"`
@@ -895,7 +930,9 @@ func (x *MergeRequestOpened) GetMergeRequest() *MergeRequest {
895 type MergeRequestMerged struct {930 type MergeRequestMerged struct {
896 state protoimpl.MessageState `protogen:"open.v1"`931 state protoimpl.MessageState `protogen:"open.v1"`
897 // MergeRequest is the merge request after the merge.932 // MergeRequest is the merge request after the merge.
898- MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`933+ MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
934+ // Auto is true when the server merged it by auto-merge.
935+ Auto bool `protobuf:"varint,2,opt,name=auto,proto3" json:"auto,omitempty"`
899 unknownFields protoimpl.UnknownFields936 unknownFields protoimpl.UnknownFields
900 sizeCache protoimpl.SizeCache937 sizeCache protoimpl.SizeCache
901 }938 }
@@ -937,6 +974,116 @@ func (x *MergeRequestMerged) GetMergeRequest() *MergeRequest {
937 return nil974 return nil
938 }975 }
939 976
977+func (x *MergeRequestMerged) GetAuto() bool {
978+ if x != nil {
979+ return x.Auto
980+ }
981+ return false
982+}
983+
984+// MergeRequestAutoMergeEnabled reports auto-merge enabled on an open merge
985+// request. It is published again when auto-merge is enabled again.
986+type MergeRequestAutoMergeEnabled struct {
987+ state protoimpl.MessageState `protogen:"open.v1"`
988+ // MergeRequest is the merge request, with auto_merge set.
989+ MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
990+ unknownFields protoimpl.UnknownFields
991+ sizeCache protoimpl.SizeCache
992+}
993+
994+func (x *MergeRequestAutoMergeEnabled) Reset() {
995+ *x = MergeRequestAutoMergeEnabled{}
996+ mi := &file_ermite_event_proto_msgTypes[10]
997+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
998+ ms.StoreMessageInfo(mi)
999+}
1000+
1001+func (x *MergeRequestAutoMergeEnabled) String() string {
1002+ return protoimpl.X.MessageStringOf(x)
1003+}
1004+
1005+func (*MergeRequestAutoMergeEnabled) ProtoMessage() {}
1006+
1007+func (x *MergeRequestAutoMergeEnabled) ProtoReflect() protoreflect.Message {
1008+ mi := &file_ermite_event_proto_msgTypes[10]
1009+ if x != nil {
1010+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1011+ if ms.LoadMessageInfo() == nil {
1012+ ms.StoreMessageInfo(mi)
1013+ }
1014+ return ms
1015+ }
1016+ return mi.MessageOf(x)
1017+}
1018+
1019+// Deprecated: Use MergeRequestAutoMergeEnabled.ProtoReflect.Descriptor instead.
1020+func (*MergeRequestAutoMergeEnabled) Descriptor() ([]byte, []int) {
1021+ return file_ermite_event_proto_rawDescGZIP(), []int{10}
1022+}
1023+
1024+func (x *MergeRequestAutoMergeEnabled) GetMergeRequest() *MergeRequest {
1025+ if x != nil {
1026+ return x.MergeRequest
1027+ }
1028+ return nil
1029+}
1030+
1031+// MergeRequestAutoMergeCancelled reports the auto-merge of a merge request
1032+// cancelled, by a caller or by the server.
1033+type MergeRequestAutoMergeCancelled struct {
1034+ state protoimpl.MessageState `protogen:"open.v1"`
1035+ // MergeRequest is the merge request, with auto_merge unset.
1036+ MergeRequest *MergeRequest `protobuf:"bytes,1,opt,name=merge_request,json=mergeRequest,proto3" json:"merge_request,omitempty"`
1037+ // Reason says in one line why it was cancelled. For display only.
1038+ Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"`
1039+ unknownFields protoimpl.UnknownFields
1040+ sizeCache protoimpl.SizeCache
1041+}
1042+
1043+func (x *MergeRequestAutoMergeCancelled) Reset() {
1044+ *x = MergeRequestAutoMergeCancelled{}
1045+ mi := &file_ermite_event_proto_msgTypes[11]
1046+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1047+ ms.StoreMessageInfo(mi)
1048+}
1049+
1050+func (x *MergeRequestAutoMergeCancelled) String() string {
1051+ return protoimpl.X.MessageStringOf(x)
1052+}
1053+
1054+func (*MergeRequestAutoMergeCancelled) ProtoMessage() {}
1055+
1056+func (x *MergeRequestAutoMergeCancelled) ProtoReflect() protoreflect.Message {
1057+ mi := &file_ermite_event_proto_msgTypes[11]
1058+ if x != nil {
1059+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1060+ if ms.LoadMessageInfo() == nil {
1061+ ms.StoreMessageInfo(mi)
1062+ }
1063+ return ms
1064+ }
1065+ return mi.MessageOf(x)
1066+}
1067+
1068+// Deprecated: Use MergeRequestAutoMergeCancelled.ProtoReflect.Descriptor instead.
1069+func (*MergeRequestAutoMergeCancelled) Descriptor() ([]byte, []int) {
1070+ return file_ermite_event_proto_rawDescGZIP(), []int{11}
1071+}
1072+
1073+func (x *MergeRequestAutoMergeCancelled) GetMergeRequest() *MergeRequest {
1074+ if x != nil {
1075+ return x.MergeRequest
1076+ }
1077+ return nil
1078+}
1079+
1080+func (x *MergeRequestAutoMergeCancelled) GetReason() string {
1081+ if x != nil {
1082+ return x.Reason
1083+ }
1084+ return ""
1085+}
1086+
940 // MergeRequestMergeability reports the mergeability of an open merge request.1087 // MergeRequestMergeability reports the mergeability of an open merge request.
941 // It is published each time the server settles a result for new tips of the1088 // It is published each time the server settles a result for new tips of the
942 // source or target branch, so the state may be the same as the previous1089 // source or target branch, so the state may be the same as the previous
@@ -955,7 +1102,7 @@ type MergeRequestMergeability struct {
955 1102
956 func (x *MergeRequestMergeability) Reset() {1103 func (x *MergeRequestMergeability) Reset() {
957 *x = MergeRequestMergeability{}1104 *x = MergeRequestMergeability{}
958- mi := &file_ermite_event_proto_msgTypes[10]1105+ mi := &file_ermite_event_proto_msgTypes[12]
959 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1106 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
960 ms.StoreMessageInfo(mi)1107 ms.StoreMessageInfo(mi)
961 }1108 }
@@ -967,7 +1114,7 @@ func (x *MergeRequestMergeability) String() string {
967 func (*MergeRequestMergeability) ProtoMessage() {}1114 func (*MergeRequestMergeability) ProtoMessage() {}
968 1115
969 func (x *MergeRequestMergeability) ProtoReflect() protoreflect.Message {1116 func (x *MergeRequestMergeability) ProtoReflect() protoreflect.Message {
970- mi := &file_ermite_event_proto_msgTypes[10]1117+ mi := &file_ermite_event_proto_msgTypes[12]
971 if x != nil {1118 if x != nil {
972 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1119 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
973 if ms.LoadMessageInfo() == nil {1120 if ms.LoadMessageInfo() == nil {
@@ -980,7 +1127,7 @@ func (x *MergeRequestMergeability) ProtoReflect() protoreflect.Message {
980 1127
981 // Deprecated: Use MergeRequestMergeability.ProtoReflect.Descriptor instead.1128 // Deprecated: Use MergeRequestMergeability.ProtoReflect.Descriptor instead.
982 func (*MergeRequestMergeability) Descriptor() ([]byte, []int) {1129 func (*MergeRequestMergeability) Descriptor() ([]byte, []int) {
983- return file_ermite_event_proto_rawDescGZIP(), []int{10}1130+ return file_ermite_event_proto_rawDescGZIP(), []int{12}
984 }1131 }
985 1132
986 func (x *MergeRequestMergeability) GetRepo() string {1133 func (x *MergeRequestMergeability) GetRepo() string {
@@ -1015,7 +1162,7 @@ type MergeRequestClosed struct {
1015 1162
1016 func (x *MergeRequestClosed) Reset() {1163 func (x *MergeRequestClosed) Reset() {
1017 *x = MergeRequestClosed{}1164 *x = MergeRequestClosed{}
1018- mi := &file_ermite_event_proto_msgTypes[11]1165+ mi := &file_ermite_event_proto_msgTypes[13]
1019 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1166 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1020 ms.StoreMessageInfo(mi)1167 ms.StoreMessageInfo(mi)
1021 }1168 }
@@ -1027,7 +1174,7 @@ func (x *MergeRequestClosed) String() string {
1027 func (*MergeRequestClosed) ProtoMessage() {}1174 func (*MergeRequestClosed) ProtoMessage() {}
1028 1175
1029 func (x *MergeRequestClosed) ProtoReflect() protoreflect.Message {1176 func (x *MergeRequestClosed) ProtoReflect() protoreflect.Message {
1030- mi := &file_ermite_event_proto_msgTypes[11]1177+ mi := &file_ermite_event_proto_msgTypes[13]
1031 if x != nil {1178 if x != nil {
1032 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1179 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1033 if ms.LoadMessageInfo() == nil {1180 if ms.LoadMessageInfo() == nil {
@@ -1040,7 +1187,7 @@ func (x *MergeRequestClosed) ProtoReflect() protoreflect.Message {
1040 1187
1041 // Deprecated: Use MergeRequestClosed.ProtoReflect.Descriptor instead.1188 // Deprecated: Use MergeRequestClosed.ProtoReflect.Descriptor instead.
1042 func (*MergeRequestClosed) Descriptor() ([]byte, []int) {1189 func (*MergeRequestClosed) Descriptor() ([]byte, []int) {
1043- return file_ermite_event_proto_rawDescGZIP(), []int{11}1190+ return file_ermite_event_proto_rawDescGZIP(), []int{13}
1044 }1191 }
1045 1192
1046 func (x *MergeRequestClosed) GetMergeRequest() *MergeRequest {1193 func (x *MergeRequestClosed) GetMergeRequest() *MergeRequest {
@@ -1065,7 +1212,7 @@ type CommentAdded struct {
1065 1212
1066 func (x *CommentAdded) Reset() {1213 func (x *CommentAdded) Reset() {
1067 *x = CommentAdded{}1214 *x = CommentAdded{}
1068- mi := &file_ermite_event_proto_msgTypes[12]1215+ mi := &file_ermite_event_proto_msgTypes[14]
1069 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1216 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1070 ms.StoreMessageInfo(mi)1217 ms.StoreMessageInfo(mi)
1071 }1218 }
@@ -1077,7 +1224,7 @@ func (x *CommentAdded) String() string {
1077 func (*CommentAdded) ProtoMessage() {}1224 func (*CommentAdded) ProtoMessage() {}
1078 1225
1079 func (x *CommentAdded) ProtoReflect() protoreflect.Message {1226 func (x *CommentAdded) ProtoReflect() protoreflect.Message {
1080- mi := &file_ermite_event_proto_msgTypes[12]1227+ mi := &file_ermite_event_proto_msgTypes[14]
1081 if x != nil {1228 if x != nil {
1082 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1229 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1083 if ms.LoadMessageInfo() == nil {1230 if ms.LoadMessageInfo() == nil {
@@ -1090,7 +1237,7 @@ func (x *CommentAdded) ProtoReflect() protoreflect.Message {
1090 1237
1091 // Deprecated: Use CommentAdded.ProtoReflect.Descriptor instead.1238 // Deprecated: Use CommentAdded.ProtoReflect.Descriptor instead.
1092 func (*CommentAdded) Descriptor() ([]byte, []int) {1239 func (*CommentAdded) Descriptor() ([]byte, []int) {
1093- return file_ermite_event_proto_rawDescGZIP(), []int{12}1240+ return file_ermite_event_proto_rawDescGZIP(), []int{14}
1094 }1241 }
1095 1242
1096 func (x *CommentAdded) GetRepo() string {1243 func (x *CommentAdded) GetRepo() string {
@@ -1129,7 +1276,7 @@ type CommentEdited struct {
1129 1276
1130 func (x *CommentEdited) Reset() {1277 func (x *CommentEdited) Reset() {
1131 *x = CommentEdited{}1278 *x = CommentEdited{}
1132- mi := &file_ermite_event_proto_msgTypes[13]1279+ mi := &file_ermite_event_proto_msgTypes[15]
1133 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1280 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1134 ms.StoreMessageInfo(mi)1281 ms.StoreMessageInfo(mi)
1135 }1282 }
@@ -1141,7 +1288,7 @@ func (x *CommentEdited) String() string {
1141 func (*CommentEdited) ProtoMessage() {}1288 func (*CommentEdited) ProtoMessage() {}
1142 1289
1143 func (x *CommentEdited) ProtoReflect() protoreflect.Message {1290 func (x *CommentEdited) ProtoReflect() protoreflect.Message {
1144- mi := &file_ermite_event_proto_msgTypes[13]1291+ mi := &file_ermite_event_proto_msgTypes[15]
1145 if x != nil {1292 if x != nil {
1146 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1293 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1147 if ms.LoadMessageInfo() == nil {1294 if ms.LoadMessageInfo() == nil {
@@ -1154,7 +1301,7 @@ func (x *CommentEdited) ProtoReflect() protoreflect.Message {
1154 1301
1155 // Deprecated: Use CommentEdited.ProtoReflect.Descriptor instead.1302 // Deprecated: Use CommentEdited.ProtoReflect.Descriptor instead.
1156 func (*CommentEdited) Descriptor() ([]byte, []int) {1303 func (*CommentEdited) Descriptor() ([]byte, []int) {
1157- return file_ermite_event_proto_rawDescGZIP(), []int{13}1304+ return file_ermite_event_proto_rawDescGZIP(), []int{15}
1158 }1305 }
1159 1306
1160 func (x *CommentEdited) GetRepo() string {1307 func (x *CommentEdited) GetRepo() string {
@@ -1194,7 +1341,7 @@ type CommentDeleted struct {
1194 1341
1195 func (x *CommentDeleted) Reset() {1342 func (x *CommentDeleted) Reset() {
1196 *x = CommentDeleted{}1343 *x = CommentDeleted{}
1197- mi := &file_ermite_event_proto_msgTypes[14]1344+ mi := &file_ermite_event_proto_msgTypes[16]
1198 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1345 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1199 ms.StoreMessageInfo(mi)1346 ms.StoreMessageInfo(mi)
1200 }1347 }
@@ -1206,7 +1353,7 @@ func (x *CommentDeleted) String() string {
1206 func (*CommentDeleted) ProtoMessage() {}1353 func (*CommentDeleted) ProtoMessage() {}
1207 1354
1208 func (x *CommentDeleted) ProtoReflect() protoreflect.Message {1355 func (x *CommentDeleted) ProtoReflect() protoreflect.Message {
1209- mi := &file_ermite_event_proto_msgTypes[14]1356+ mi := &file_ermite_event_proto_msgTypes[16]
1210 if x != nil {1357 if x != nil {
1211 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1358 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1212 if ms.LoadMessageInfo() == nil {1359 if ms.LoadMessageInfo() == nil {
@@ -1219,7 +1366,7 @@ func (x *CommentDeleted) ProtoReflect() protoreflect.Message {
1219 1366
1220 // Deprecated: Use CommentDeleted.ProtoReflect.Descriptor instead.1367 // Deprecated: Use CommentDeleted.ProtoReflect.Descriptor instead.
1221 func (*CommentDeleted) Descriptor() ([]byte, []int) {1368 func (*CommentDeleted) Descriptor() ([]byte, []int) {
1222- return file_ermite_event_proto_rawDescGZIP(), []int{14}1369+ return file_ermite_event_proto_rawDescGZIP(), []int{16}
1223 }1370 }
1224 1371
1225 func (x *CommentDeleted) GetRepo() string {1372 func (x *CommentDeleted) GetRepo() string {
@@ -1259,7 +1406,7 @@ type CommentResolved struct {
1259 1406
1260 func (x *CommentResolved) Reset() {1407 func (x *CommentResolved) Reset() {
1261 *x = CommentResolved{}1408 *x = CommentResolved{}
1262- mi := &file_ermite_event_proto_msgTypes[15]1409+ mi := &file_ermite_event_proto_msgTypes[17]
1263 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1410 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1264 ms.StoreMessageInfo(mi)1411 ms.StoreMessageInfo(mi)
1265 }1412 }
@@ -1271,7 +1418,7 @@ func (x *CommentResolved) String() string {
1271 func (*CommentResolved) ProtoMessage() {}1418 func (*CommentResolved) ProtoMessage() {}
1272 1419
1273 func (x *CommentResolved) ProtoReflect() protoreflect.Message {1420 func (x *CommentResolved) ProtoReflect() protoreflect.Message {
1274- mi := &file_ermite_event_proto_msgTypes[15]1421+ mi := &file_ermite_event_proto_msgTypes[17]
1275 if x != nil {1422 if x != nil {
1276 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1423 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1277 if ms.LoadMessageInfo() == nil {1424 if ms.LoadMessageInfo() == nil {
@@ -1284,7 +1431,7 @@ func (x *CommentResolved) ProtoReflect() protoreflect.Message {
1284 1431
1285 // Deprecated: Use CommentResolved.ProtoReflect.Descriptor instead.1432 // Deprecated: Use CommentResolved.ProtoReflect.Descriptor instead.
1286 func (*CommentResolved) Descriptor() ([]byte, []int) {1433 func (*CommentResolved) Descriptor() ([]byte, []int) {
1287- return file_ermite_event_proto_rawDescGZIP(), []int{15}1434+ return file_ermite_event_proto_rawDescGZIP(), []int{17}
1288 }1435 }
1289 1436
1290 func (x *CommentResolved) GetRepo() string {1437 func (x *CommentResolved) GetRepo() string {
@@ -1319,7 +1466,7 @@ type IssueOpened struct {
1319 1466
1320 func (x *IssueOpened) Reset() {1467 func (x *IssueOpened) Reset() {
1321 *x = IssueOpened{}1468 *x = IssueOpened{}
1322- mi := &file_ermite_event_proto_msgTypes[16]1469+ mi := &file_ermite_event_proto_msgTypes[18]
1323 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1470 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1324 ms.StoreMessageInfo(mi)1471 ms.StoreMessageInfo(mi)
1325 }1472 }
@@ -1331,7 +1478,7 @@ func (x *IssueOpened) String() string {
1331 func (*IssueOpened) ProtoMessage() {}1478 func (*IssueOpened) ProtoMessage() {}
1332 1479
1333 func (x *IssueOpened) ProtoReflect() protoreflect.Message {1480 func (x *IssueOpened) ProtoReflect() protoreflect.Message {
1334- mi := &file_ermite_event_proto_msgTypes[16]1481+ mi := &file_ermite_event_proto_msgTypes[18]
1335 if x != nil {1482 if x != nil {
1336 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1483 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1337 if ms.LoadMessageInfo() == nil {1484 if ms.LoadMessageInfo() == nil {
@@ -1344,7 +1491,7 @@ func (x *IssueOpened) ProtoReflect() protoreflect.Message {
1344 1491
1345 // Deprecated: Use IssueOpened.ProtoReflect.Descriptor instead.1492 // Deprecated: Use IssueOpened.ProtoReflect.Descriptor instead.
1346 func (*IssueOpened) Descriptor() ([]byte, []int) {1493 func (*IssueOpened) Descriptor() ([]byte, []int) {
1347- return file_ermite_event_proto_rawDescGZIP(), []int{16}1494+ return file_ermite_event_proto_rawDescGZIP(), []int{18}
1348 }1495 }
1349 1496
1350 func (x *IssueOpened) GetIssue() *Issue {1497 func (x *IssueOpened) GetIssue() *Issue {
@@ -1365,7 +1512,7 @@ type IssueClosed struct {
1365 1512
1366 func (x *IssueClosed) Reset() {1513 func (x *IssueClosed) Reset() {
1367 *x = IssueClosed{}1514 *x = IssueClosed{}
1368- mi := &file_ermite_event_proto_msgTypes[17]1515+ mi := &file_ermite_event_proto_msgTypes[19]
1369 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1516 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1370 ms.StoreMessageInfo(mi)1517 ms.StoreMessageInfo(mi)
1371 }1518 }
@@ -1377,7 +1524,7 @@ func (x *IssueClosed) String() string {
1377 func (*IssueClosed) ProtoMessage() {}1524 func (*IssueClosed) ProtoMessage() {}
1378 1525
1379 func (x *IssueClosed) ProtoReflect() protoreflect.Message {1526 func (x *IssueClosed) ProtoReflect() protoreflect.Message {
1380- mi := &file_ermite_event_proto_msgTypes[17]1527+ mi := &file_ermite_event_proto_msgTypes[19]
1381 if x != nil {1528 if x != nil {
1382 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1529 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1383 if ms.LoadMessageInfo() == nil {1530 if ms.LoadMessageInfo() == nil {
@@ -1390,7 +1537,7 @@ func (x *IssueClosed) ProtoReflect() protoreflect.Message {
1390 1537
1391 // Deprecated: Use IssueClosed.ProtoReflect.Descriptor instead.1538 // Deprecated: Use IssueClosed.ProtoReflect.Descriptor instead.
1392 func (*IssueClosed) Descriptor() ([]byte, []int) {1539 func (*IssueClosed) Descriptor() ([]byte, []int) {
1393- return file_ermite_event_proto_rawDescGZIP(), []int{17}1540+ return file_ermite_event_proto_rawDescGZIP(), []int{19}
1394 }1541 }
1395 1542
1396 func (x *IssueClosed) GetIssue() *Issue {1543 func (x *IssueClosed) GetIssue() *Issue {
@@ -1411,7 +1558,7 @@ type IssueReopened struct {
1411 1558
1412 func (x *IssueReopened) Reset() {1559 func (x *IssueReopened) Reset() {
1413 *x = IssueReopened{}1560 *x = IssueReopened{}
1414- mi := &file_ermite_event_proto_msgTypes[18]1561+ mi := &file_ermite_event_proto_msgTypes[20]
1415 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1562 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1416 ms.StoreMessageInfo(mi)1563 ms.StoreMessageInfo(mi)
1417 }1564 }
@@ -1423,7 +1570,7 @@ func (x *IssueReopened) String() string {
1423 func (*IssueReopened) ProtoMessage() {}1570 func (*IssueReopened) ProtoMessage() {}
1424 1571
1425 func (x *IssueReopened) ProtoReflect() protoreflect.Message {1572 func (x *IssueReopened) ProtoReflect() protoreflect.Message {
1426- mi := &file_ermite_event_proto_msgTypes[18]1573+ mi := &file_ermite_event_proto_msgTypes[20]
1427 if x != nil {1574 if x != nil {
1428 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1575 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1429 if ms.LoadMessageInfo() == nil {1576 if ms.LoadMessageInfo() == nil {
@@ -1436,7 +1583,7 @@ func (x *IssueReopened) ProtoReflect() protoreflect.Message {
1436 1583
1437 // Deprecated: Use IssueReopened.ProtoReflect.Descriptor instead.1584 // Deprecated: Use IssueReopened.ProtoReflect.Descriptor instead.
1438 func (*IssueReopened) Descriptor() ([]byte, []int) {1585 func (*IssueReopened) Descriptor() ([]byte, []int) {
1439- return file_ermite_event_proto_rawDescGZIP(), []int{18}1586+ return file_ermite_event_proto_rawDescGZIP(), []int{20}
1440 }1587 }
1441 1588
1442 func (x *IssueReopened) GetIssue() *Issue {1589 func (x *IssueReopened) GetIssue() *Issue {
@@ -1461,7 +1608,7 @@ type IssueCommented struct {
1461 1608
1462 func (x *IssueCommented) Reset() {1609 func (x *IssueCommented) Reset() {
1463 *x = IssueCommented{}1610 *x = IssueCommented{}
1464- mi := &file_ermite_event_proto_msgTypes[19]1611+ mi := &file_ermite_event_proto_msgTypes[21]
1465 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1612 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1466 ms.StoreMessageInfo(mi)1613 ms.StoreMessageInfo(mi)
1467 }1614 }
@@ -1473,7 +1620,7 @@ func (x *IssueCommented) String() string {
1473 func (*IssueCommented) ProtoMessage() {}1620 func (*IssueCommented) ProtoMessage() {}
1474 1621
1475 func (x *IssueCommented) ProtoReflect() protoreflect.Message {1622 func (x *IssueCommented) ProtoReflect() protoreflect.Message {
1476- mi := &file_ermite_event_proto_msgTypes[19]1623+ mi := &file_ermite_event_proto_msgTypes[21]
1477 if x != nil {1624 if x != nil {
1478 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1625 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1479 if ms.LoadMessageInfo() == nil {1626 if ms.LoadMessageInfo() == nil {
@@ -1486,7 +1633,7 @@ func (x *IssueCommented) ProtoReflect() protoreflect.Message {
1486 1633
1487 // Deprecated: Use IssueCommented.ProtoReflect.Descriptor instead.1634 // Deprecated: Use IssueCommented.ProtoReflect.Descriptor instead.
1488 func (*IssueCommented) Descriptor() ([]byte, []int) {1635 func (*IssueCommented) Descriptor() ([]byte, []int) {
1489- return file_ermite_event_proto_rawDescGZIP(), []int{19}1636+ return file_ermite_event_proto_rawDescGZIP(), []int{21}
1490 }1637 }
1491 1638
1492 func (x *IssueCommented) GetRepo() string {1639 func (x *IssueCommented) GetRepo() string {
@@ -1525,7 +1672,7 @@ type IssueSubmitted struct {
1525 1672
1526 func (x *IssueSubmitted) Reset() {1673 func (x *IssueSubmitted) Reset() {
1527 *x = IssueSubmitted{}1674 *x = IssueSubmitted{}
1528- mi := &file_ermite_event_proto_msgTypes[20]1675+ mi := &file_ermite_event_proto_msgTypes[22]
1529 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1676 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1530 ms.StoreMessageInfo(mi)1677 ms.StoreMessageInfo(mi)
1531 }1678 }
@@ -1537,7 +1684,7 @@ func (x *IssueSubmitted) String() string {
1537 func (*IssueSubmitted) ProtoMessage() {}1684 func (*IssueSubmitted) ProtoMessage() {}
1538 1685
1539 func (x *IssueSubmitted) ProtoReflect() protoreflect.Message {1686 func (x *IssueSubmitted) ProtoReflect() protoreflect.Message {
1540- mi := &file_ermite_event_proto_msgTypes[20]1687+ mi := &file_ermite_event_proto_msgTypes[22]
1541 if x != nil {1688 if x != nil {
1542 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1689 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1543 if ms.LoadMessageInfo() == nil {1690 if ms.LoadMessageInfo() == nil {
@@ -1550,7 +1697,7 @@ func (x *IssueSubmitted) ProtoReflect() protoreflect.Message {
1550 1697
1551 // Deprecated: Use IssueSubmitted.ProtoReflect.Descriptor instead.1698 // Deprecated: Use IssueSubmitted.ProtoReflect.Descriptor instead.
1552 func (*IssueSubmitted) Descriptor() ([]byte, []int) {1699 func (*IssueSubmitted) Descriptor() ([]byte, []int) {
1553- return file_ermite_event_proto_rawDescGZIP(), []int{20}1700+ return file_ermite_event_proto_rawDescGZIP(), []int{22}
1554 }1701 }
1555 1702
1556 func (x *IssueSubmitted) GetRepo() string {1703 func (x *IssueSubmitted) GetRepo() string {
@@ -1580,7 +1727,7 @@ type Gap struct {
1580 1727
1581 func (x *Gap) Reset() {1728 func (x *Gap) Reset() {
1582 *x = Gap{}1729 *x = Gap{}
1583- mi := &file_ermite_event_proto_msgTypes[21]1730+ mi := &file_ermite_event_proto_msgTypes[23]
1584 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1731 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1585 ms.StoreMessageInfo(mi)1732 ms.StoreMessageInfo(mi)
1586 }1733 }
@@ -1592,7 +1739,7 @@ func (x *Gap) String() string {
1592 func (*Gap) ProtoMessage() {}1739 func (*Gap) ProtoMessage() {}
1593 1740
1594 func (x *Gap) ProtoReflect() protoreflect.Message {1741 func (x *Gap) ProtoReflect() protoreflect.Message {
1595- mi := &file_ermite_event_proto_msgTypes[21]1742+ mi := &file_ermite_event_proto_msgTypes[23]
1596 if x != nil {1743 if x != nil {
1597 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1744 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1598 if ms.LoadMessageInfo() == nil {1745 if ms.LoadMessageInfo() == nil {
@@ -1605,7 +1752,7 @@ func (x *Gap) ProtoReflect() protoreflect.Message {
1605 1752
1606 // Deprecated: Use Gap.ProtoReflect.Descriptor instead.1753 // Deprecated: Use Gap.ProtoReflect.Descriptor instead.
1607 func (*Gap) Descriptor() ([]byte, []int) {1754 func (*Gap) Descriptor() ([]byte, []int) {
1608- return file_ermite_event_proto_rawDescGZIP(), []int{21}1755+ return file_ermite_event_proto_rawDescGZIP(), []int{23}
1609 }1756 }
1610 1757
1611 // RunUpdated reports a CI run that was created or whose status, conclusion or1758 // RunUpdated reports a CI run that was created or whose status, conclusion or
@@ -1620,7 +1767,7 @@ type RunUpdated struct {
1620 1767
1621 func (x *RunUpdated) Reset() {1768 func (x *RunUpdated) Reset() {
1622 *x = RunUpdated{}1769 *x = RunUpdated{}
1623- mi := &file_ermite_event_proto_msgTypes[22]1770+ mi := &file_ermite_event_proto_msgTypes[24]
1624 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1771 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1625 ms.StoreMessageInfo(mi)1772 ms.StoreMessageInfo(mi)
1626 }1773 }
@@ -1632,7 +1779,7 @@ func (x *RunUpdated) String() string {
1632 func (*RunUpdated) ProtoMessage() {}1779 func (*RunUpdated) ProtoMessage() {}
1633 1780
1634 func (x *RunUpdated) ProtoReflect() protoreflect.Message {1781 func (x *RunUpdated) ProtoReflect() protoreflect.Message {
1635- mi := &file_ermite_event_proto_msgTypes[22]1782+ mi := &file_ermite_event_proto_msgTypes[24]
1636 if x != nil {1783 if x != nil {
1637 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1784 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1638 if ms.LoadMessageInfo() == nil {1785 if ms.LoadMessageInfo() == nil {
@@ -1645,7 +1792,7 @@ func (x *RunUpdated) ProtoReflect() protoreflect.Message {
1645 1792
1646 // Deprecated: Use RunUpdated.ProtoReflect.Descriptor instead.1793 // Deprecated: Use RunUpdated.ProtoReflect.Descriptor instead.
1647 func (*RunUpdated) Descriptor() ([]byte, []int) {1794 func (*RunUpdated) Descriptor() ([]byte, []int) {
1648- return file_ermite_event_proto_rawDescGZIP(), []int{22}1795+ return file_ermite_event_proto_rawDescGZIP(), []int{24}
1649 }1796 }
1650 1797
1651 func (x *RunUpdated) GetRun() *Run {1798 func (x *RunUpdated) GetRun() *Run {
@@ -1667,7 +1814,7 @@ type JobUpdated struct {
1667 1814
1668 func (x *JobUpdated) Reset() {1815 func (x *JobUpdated) Reset() {
1669 *x = JobUpdated{}1816 *x = JobUpdated{}
1670- mi := &file_ermite_event_proto_msgTypes[23]1817+ mi := &file_ermite_event_proto_msgTypes[25]
1671 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1818 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1672 ms.StoreMessageInfo(mi)1819 ms.StoreMessageInfo(mi)
1673 }1820 }
@@ -1679,7 +1826,7 @@ func (x *JobUpdated) String() string {
1679 func (*JobUpdated) ProtoMessage() {}1826 func (*JobUpdated) ProtoMessage() {}
1680 1827
1681 func (x *JobUpdated) ProtoReflect() protoreflect.Message {1828 func (x *JobUpdated) ProtoReflect() protoreflect.Message {
1682- mi := &file_ermite_event_proto_msgTypes[23]1829+ mi := &file_ermite_event_proto_msgTypes[25]
1683 if x != nil {1830 if x != nil {
1684 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1831 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1685 if ms.LoadMessageInfo() == nil {1832 if ms.LoadMessageInfo() == nil {
@@ -1692,7 +1839,7 @@ func (x *JobUpdated) ProtoReflect() protoreflect.Message {
1692 1839
1693 // Deprecated: Use JobUpdated.ProtoReflect.Descriptor instead.1840 // Deprecated: Use JobUpdated.ProtoReflect.Descriptor instead.
1694 func (*JobUpdated) Descriptor() ([]byte, []int) {1841 func (*JobUpdated) Descriptor() ([]byte, []int) {
1695- return file_ermite_event_proto_rawDescGZIP(), []int{23}1842+ return file_ermite_event_proto_rawDescGZIP(), []int{25}
1696 }1843 }
1697 1844
1698 func (x *JobUpdated) GetJob() *RunJob {1845 func (x *JobUpdated) GetJob() *RunJob {
@@ -1721,7 +1868,7 @@ type MirrorFailed struct {
1721 1868
1722 func (x *MirrorFailed) Reset() {1869 func (x *MirrorFailed) Reset() {
1723 *x = MirrorFailed{}1870 *x = MirrorFailed{}
1724- mi := &file_ermite_event_proto_msgTypes[24]1871+ mi := &file_ermite_event_proto_msgTypes[26]
1725 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1872 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1726 ms.StoreMessageInfo(mi)1873 ms.StoreMessageInfo(mi)
1727 }1874 }
@@ -1733,7 +1880,7 @@ func (x *MirrorFailed) String() string {
1733 func (*MirrorFailed) ProtoMessage() {}1880 func (*MirrorFailed) ProtoMessage() {}
1734 1881
1735 func (x *MirrorFailed) ProtoReflect() protoreflect.Message {1882 func (x *MirrorFailed) ProtoReflect() protoreflect.Message {
1736- mi := &file_ermite_event_proto_msgTypes[24]1883+ mi := &file_ermite_event_proto_msgTypes[26]
1737 if x != nil {1884 if x != nil {
1738 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1885 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1739 if ms.LoadMessageInfo() == nil {1886 if ms.LoadMessageInfo() == nil {
@@ -1746,7 +1893,7 @@ func (x *MirrorFailed) ProtoReflect() protoreflect.Message {
1746 1893
1747 // Deprecated: Use MirrorFailed.ProtoReflect.Descriptor instead.1894 // Deprecated: Use MirrorFailed.ProtoReflect.Descriptor instead.
1748 func (*MirrorFailed) Descriptor() ([]byte, []int) {1895 func (*MirrorFailed) Descriptor() ([]byte, []int) {
1749- return file_ermite_event_proto_rawDescGZIP(), []int{24}1896+ return file_ermite_event_proto_rawDescGZIP(), []int{26}
1750 }1897 }
1751 1898
1752 func (x *MirrorFailed) GetRepo() string {1899 func (x *MirrorFailed) GetRepo() string {
@@ -1782,7 +1929,7 @@ type MirrorRecovered struct {
1782 1929
1783 func (x *MirrorRecovered) Reset() {1930 func (x *MirrorRecovered) Reset() {
1784 *x = MirrorRecovered{}1931 *x = MirrorRecovered{}
1785- mi := &file_ermite_event_proto_msgTypes[25]1932+ mi := &file_ermite_event_proto_msgTypes[27]
1786 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1933 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1787 ms.StoreMessageInfo(mi)1934 ms.StoreMessageInfo(mi)
1788 }1935 }
@@ -1794,7 +1941,7 @@ func (x *MirrorRecovered) String() string {
1794 func (*MirrorRecovered) ProtoMessage() {}1941 func (*MirrorRecovered) ProtoMessage() {}
1795 1942
1796 func (x *MirrorRecovered) ProtoReflect() protoreflect.Message {1943 func (x *MirrorRecovered) ProtoReflect() protoreflect.Message {
1797- mi := &file_ermite_event_proto_msgTypes[25]1944+ mi := &file_ermite_event_proto_msgTypes[27]
1798 if x != nil {1945 if x != nil {
1799 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))1946 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1800 if ms.LoadMessageInfo() == nil {1947 if ms.LoadMessageInfo() == nil {
@@ -1807,7 +1954,7 @@ func (x *MirrorRecovered) ProtoReflect() protoreflect.Message {
1807 1954
1808 // Deprecated: Use MirrorRecovered.ProtoReflect.Descriptor instead.1955 // Deprecated: Use MirrorRecovered.ProtoReflect.Descriptor instead.
1809 func (*MirrorRecovered) Descriptor() ([]byte, []int) {1956 func (*MirrorRecovered) Descriptor() ([]byte, []int) {
1810- return file_ermite_event_proto_rawDescGZIP(), []int{25}1957+ return file_ermite_event_proto_rawDescGZIP(), []int{27}
1811 }1958 }
1812 1959
1813 func (x *MirrorRecovered) GetRepo() string {1960 func (x *MirrorRecovered) GetRepo() string {
@@ -1826,7 +1973,7 @@ const file_ermite_event_proto_rawDesc = "" +
1826 "\x06topics\x18\x01 \x03(\tR\x06topics\x12!\n" +1973 "\x06topics\x18\x01 \x03(\tR\x06topics\x12!\n" +
1827 "\fresume_after\x18\x02 \x01(\tR\vresumeAfter\"4\n" +1974 "\fresume_after\x18\x02 \x01(\tR\vresumeAfter\"4\n" +
1828 "\rWatchResponse\x12#\n" +1975 "\rWatchResponse\x12#\n" +
1829- "\x05event\x18\x01 \x01(\v2\r.ermite.EventR\x05event\"\xcb\v\n" +1976+ "\x05event\x18\x01 \x01(\v2\r.ermite.EventR\x05event\"\xb1\r\n" +
1830 "\x05Event\x12\x0e\n" +1977 "\x05Event\x12\x0e\n" +
1831 "\x02id\x18\x01 \x01(\tR\x02id\x12.\n" +1978 "\x02id\x18\x01 \x01(\tR\x02id\x12.\n" +
1832 "\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x128\n" +1979 "\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x128\n" +
@@ -1854,7 +2001,9 @@ const file_ermite_event_proto_rawDesc = "" +
1854 "\x0fissue_submitted\x18\x15 \x01(\v2\x16.ermite.IssueSubmittedH\x00R\x0eissueSubmitted\x12`\n" +2001 "\x0fissue_submitted\x18\x15 \x01(\v2\x16.ermite.IssueSubmittedH\x00R\x0eissueSubmitted\x12`\n" +
1855 "\x1amerge_request_mergeability\x18\x16 \x01(\v2 .ermite.MergeRequestMergeabilityH\x00R\x18mergeRequestMergeability\x12;\n" +2002 "\x1amerge_request_mergeability\x18\x16 \x01(\v2 .ermite.MergeRequestMergeabilityH\x00R\x18mergeRequestMergeability\x12;\n" +
1856 "\rmirror_failed\x18\x17 \x01(\v2\x14.ermite.MirrorFailedH\x00R\fmirrorFailed\x12D\n" +2003 "\rmirror_failed\x18\x17 \x01(\v2\x14.ermite.MirrorFailedH\x00R\fmirrorFailed\x12D\n" +
1857- "\x10mirror_recovered\x18\x18 \x01(\v2\x17.ermite.MirrorRecoveredH\x00R\x0fmirrorRecoveredB\x06\n" +2004+ "\x10mirror_recovered\x18\x18 \x01(\v2\x17.ermite.MirrorRecoveredH\x00R\x0fmirrorRecovered\x12n\n" +
2005+ " merge_request_auto_merge_enabled\x18\x19 \x01(\v2$.ermite.MergeRequestAutoMergeEnabledH\x00R\x1cmergeRequestAutoMergeEnabled\x12t\n" +
2006+ "\"merge_request_auto_merge_cancelled\x18\x1a \x01(\v2&.ermite.MergeRequestAutoMergeCancelledH\x00R\x1emergeRequestAutoMergeCancelledB\x06\n" +
1858 "\x04kind\"/\n" +2007 "\x04kind\"/\n" +
1859 "\vRepoCreated\x12 \n" +2008 "\vRepoCreated\x12 \n" +
1860 "\x04repo\x18\x01 \x01(\v2\f.ermite.RepoR\x04repo\"/\n" +2009 "\x04repo\x18\x01 \x01(\v2\f.ermite.RepoR\x04repo\"/\n" +
@@ -1871,9 +2020,15 @@ const file_ermite_event_proto_rawDesc = "" +
1871 "\x06old_id\x18\x02 \x01(\tR\x05oldId\x12\x15\n" +2020 "\x06old_id\x18\x02 \x01(\tR\x05oldId\x12\x15\n" +
1872 "\x06new_id\x18\x03 \x01(\tR\x05newId\"O\n" +2021 "\x06new_id\x18\x03 \x01(\tR\x05newId\"O\n" +
1873 "\x12MergeRequestOpened\x129\n" +2022 "\x12MergeRequestOpened\x129\n" +
1874- "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"O\n" +2023+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"c\n" +
1875 "\x12MergeRequestMerged\x129\n" +2024 "\x12MergeRequestMerged\x129\n" +
1876- "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"\x80\x01\n" +2025+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12\x12\n" +
2026+ "\x04auto\x18\x02 \x01(\bR\x04auto\"Y\n" +
2027+ "\x1cMergeRequestAutoMergeEnabled\x129\n" +
2028+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\"s\n" +
2029+ "\x1eMergeRequestAutoMergeCancelled\x129\n" +
2030+ "\rmerge_request\x18\x01 \x01(\v2\x14.ermite.MergeRequestR\fmergeRequest\x12\x16\n" +
2031+ "\x06reason\x18\x02 \x01(\tR\x06reason\"\x80\x01\n" +
1877 "\x18MergeRequestMergeability\x12\x12\n" +2032 "\x18MergeRequestMergeability\x12\x12\n" +
1878 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +2033 "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x16\n" +
1879 "\x06number\x18\x02 \x01(\x03R\x06number\x128\n" +2034 "\x06number\x18\x02 \x01(\x03R\x06number\x128\n" +
@@ -1940,95 +2095,101 @@ func file_ermite_event_proto_rawDescGZIP() []byte {
1940 return file_ermite_event_proto_rawDescData2095 return file_ermite_event_proto_rawDescData
1941 }2096 }
1942 2097
1943-var file_ermite_event_proto_msgTypes = make([]protoimpl.MessageInfo, 26)2098+var file_ermite_event_proto_msgTypes = make([]protoimpl.MessageInfo, 28)
1944 var file_ermite_event_proto_goTypes = []any{2099 var file_ermite_event_proto_goTypes = []any{
1945- (*WatchRequest)(nil), // 0: ermite.WatchRequest2100+ (*WatchRequest)(nil), // 0: ermite.WatchRequest
1946- (*WatchResponse)(nil), // 1: ermite.WatchResponse2101+ (*WatchResponse)(nil), // 1: ermite.WatchResponse
1947- (*Event)(nil), // 2: ermite.Event2102+ (*Event)(nil), // 2: ermite.Event
1948- (*RepoCreated)(nil), // 3: ermite.RepoCreated2103+ (*RepoCreated)(nil), // 3: ermite.RepoCreated
1949- (*RepoUpdated)(nil), // 4: ermite.RepoUpdated2104+ (*RepoUpdated)(nil), // 4: ermite.RepoUpdated
1950- (*RepoDeleted)(nil), // 5: ermite.RepoDeleted2105+ (*RepoDeleted)(nil), // 5: ermite.RepoDeleted
1951- (*Pushed)(nil), // 6: ermite.Pushed2106+ (*Pushed)(nil), // 6: ermite.Pushed
1952- (*RefUpdate)(nil), // 7: ermite.RefUpdate2107+ (*RefUpdate)(nil), // 7: ermite.RefUpdate
1953- (*MergeRequestOpened)(nil), // 8: ermite.MergeRequestOpened2108+ (*MergeRequestOpened)(nil), // 8: ermite.MergeRequestOpened
1954- (*MergeRequestMerged)(nil), // 9: ermite.MergeRequestMerged2109+ (*MergeRequestMerged)(nil), // 9: ermite.MergeRequestMerged
1955- (*MergeRequestMergeability)(nil), // 10: ermite.MergeRequestMergeability2110+ (*MergeRequestAutoMergeEnabled)(nil), // 10: ermite.MergeRequestAutoMergeEnabled
1956- (*MergeRequestClosed)(nil), // 11: ermite.MergeRequestClosed2111+ (*MergeRequestAutoMergeCancelled)(nil), // 11: ermite.MergeRequestAutoMergeCancelled
1957- (*CommentAdded)(nil), // 12: ermite.CommentAdded2112+ (*MergeRequestMergeability)(nil), // 12: ermite.MergeRequestMergeability
1958- (*CommentEdited)(nil), // 13: ermite.CommentEdited2113+ (*MergeRequestClosed)(nil), // 13: ermite.MergeRequestClosed
1959- (*CommentDeleted)(nil), // 14: ermite.CommentDeleted2114+ (*CommentAdded)(nil), // 14: ermite.CommentAdded
1960- (*CommentResolved)(nil), // 15: ermite.CommentResolved2115+ (*CommentEdited)(nil), // 15: ermite.CommentEdited
1961- (*IssueOpened)(nil), // 16: ermite.IssueOpened2116+ (*CommentDeleted)(nil), // 16: ermite.CommentDeleted
1962- (*IssueClosed)(nil), // 17: ermite.IssueClosed2117+ (*CommentResolved)(nil), // 17: ermite.CommentResolved
1963- (*IssueReopened)(nil), // 18: ermite.IssueReopened2118+ (*IssueOpened)(nil), // 18: ermite.IssueOpened
1964- (*IssueCommented)(nil), // 19: ermite.IssueCommented2119+ (*IssueClosed)(nil), // 19: ermite.IssueClosed
1965- (*IssueSubmitted)(nil), // 20: ermite.IssueSubmitted2120+ (*IssueReopened)(nil), // 20: ermite.IssueReopened
1966- (*Gap)(nil), // 21: ermite.Gap2121+ (*IssueCommented)(nil), // 21: ermite.IssueCommented
1967- (*RunUpdated)(nil), // 22: ermite.RunUpdated2122+ (*IssueSubmitted)(nil), // 22: ermite.IssueSubmitted
1968- (*JobUpdated)(nil), // 23: ermite.JobUpdated2123+ (*Gap)(nil), // 23: ermite.Gap
1969- (*MirrorFailed)(nil), // 24: ermite.MirrorFailed2124+ (*RunUpdated)(nil), // 24: ermite.RunUpdated
1970- (*MirrorRecovered)(nil), // 25: ermite.MirrorRecovered2125+ (*JobUpdated)(nil), // 25: ermite.JobUpdated
1971- (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp2126+ (*MirrorFailed)(nil), // 26: ermite.MirrorFailed
1972- (*Repo)(nil), // 27: ermite.Repo2127+ (*MirrorRecovered)(nil), // 27: ermite.MirrorRecovered
1973- (*MergeRequest)(nil), // 28: ermite.MergeRequest2128+ (*timestamppb.Timestamp)(nil), // 28: google.protobuf.Timestamp
1974- (*Mergeability)(nil), // 29: ermite.Mergeability2129+ (*Repo)(nil), // 29: ermite.Repo
1975- (*Comment)(nil), // 30: ermite.Comment2130+ (*MergeRequest)(nil), // 30: ermite.MergeRequest
1976- (*Issue)(nil), // 31: ermite.Issue2131+ (*Mergeability)(nil), // 31: ermite.Mergeability
1977- (*IssueComment)(nil), // 32: ermite.IssueComment2132+ (*Comment)(nil), // 32: ermite.Comment
1978- (*Run)(nil), // 33: ermite.Run2133+ (*Issue)(nil), // 33: ermite.Issue
1979- (*RunJob)(nil), // 34: ermite.RunJob2134+ (*IssueComment)(nil), // 34: ermite.IssueComment
1980- (MirrorState)(0), // 35: ermite.MirrorState2135+ (*Run)(nil), // 35: ermite.Run
2136+ (*RunJob)(nil), // 36: ermite.RunJob
2137+ (MirrorState)(0), // 37: ermite.MirrorState
1981 }2138 }
1982 var file_ermite_event_proto_depIdxs = []int32{2139 var file_ermite_event_proto_depIdxs = []int32{
1983 2, // 0: ermite.WatchResponse.event:type_name -> ermite.Event2140 2, // 0: ermite.WatchResponse.event:type_name -> ermite.Event
1984- 26, // 1: ermite.Event.time:type_name -> google.protobuf.Timestamp2141+ 28, // 1: ermite.Event.time:type_name -> google.protobuf.Timestamp
1985 3, // 2: ermite.Event.repo_created:type_name -> ermite.RepoCreated2142 3, // 2: ermite.Event.repo_created:type_name -> ermite.RepoCreated
1986 4, // 3: ermite.Event.repo_updated:type_name -> ermite.RepoUpdated2143 4, // 3: ermite.Event.repo_updated:type_name -> ermite.RepoUpdated
1987 5, // 4: ermite.Event.repo_deleted:type_name -> ermite.RepoDeleted2144 5, // 4: ermite.Event.repo_deleted:type_name -> ermite.RepoDeleted
1988 6, // 5: ermite.Event.pushed:type_name -> ermite.Pushed2145 6, // 5: ermite.Event.pushed:type_name -> ermite.Pushed
1989- 21, // 6: ermite.Event.gap:type_name -> ermite.Gap2146+ 23, // 6: ermite.Event.gap:type_name -> ermite.Gap
1990 8, // 7: ermite.Event.merge_request_opened:type_name -> ermite.MergeRequestOpened2147 8, // 7: ermite.Event.merge_request_opened:type_name -> ermite.MergeRequestOpened
1991 9, // 8: ermite.Event.merge_request_merged:type_name -> ermite.MergeRequestMerged2148 9, // 8: ermite.Event.merge_request_merged:type_name -> ermite.MergeRequestMerged
1992- 11, // 9: ermite.Event.merge_request_closed:type_name -> ermite.MergeRequestClosed2149+ 13, // 9: ermite.Event.merge_request_closed:type_name -> ermite.MergeRequestClosed
1993- 12, // 10: ermite.Event.comment_added:type_name -> ermite.CommentAdded2150+ 14, // 10: ermite.Event.comment_added:type_name -> ermite.CommentAdded
1994- 22, // 11: ermite.Event.run_updated:type_name -> ermite.RunUpdated2151+ 24, // 11: ermite.Event.run_updated:type_name -> ermite.RunUpdated
1995- 23, // 12: ermite.Event.job_updated:type_name -> ermite.JobUpdated2152+ 25, // 12: ermite.Event.job_updated:type_name -> ermite.JobUpdated
1996- 13, // 13: ermite.Event.comment_edited:type_name -> ermite.CommentEdited2153+ 15, // 13: ermite.Event.comment_edited:type_name -> ermite.CommentEdited
1997- 14, // 14: ermite.Event.comment_deleted:type_name -> ermite.CommentDeleted2154+ 16, // 14: ermite.Event.comment_deleted:type_name -> ermite.CommentDeleted
1998- 15, // 15: ermite.Event.comment_resolved:type_name -> ermite.CommentResolved2155+ 17, // 15: ermite.Event.comment_resolved:type_name -> ermite.CommentResolved
1999- 16, // 16: ermite.Event.issue_opened:type_name -> ermite.IssueOpened2156+ 18, // 16: ermite.Event.issue_opened:type_name -> ermite.IssueOpened
2000- 17, // 17: ermite.Event.issue_closed:type_name -> ermite.IssueClosed2157+ 19, // 17: ermite.Event.issue_closed:type_name -> ermite.IssueClosed
2001- 18, // 18: ermite.Event.issue_reopened:type_name -> ermite.IssueReopened2158+ 20, // 18: ermite.Event.issue_reopened:type_name -> ermite.IssueReopened
2002- 19, // 19: ermite.Event.issue_commented:type_name -> ermite.IssueCommented2159+ 21, // 19: ermite.Event.issue_commented:type_name -> ermite.IssueCommented
2003- 20, // 20: ermite.Event.issue_submitted:type_name -> ermite.IssueSubmitted2160+ 22, // 20: ermite.Event.issue_submitted:type_name -> ermite.IssueSubmitted
2004- 10, // 21: ermite.Event.merge_request_mergeability:type_name -> ermite.MergeRequestMergeability2161+ 12, // 21: ermite.Event.merge_request_mergeability:type_name -> ermite.MergeRequestMergeability
2005- 24, // 22: ermite.Event.mirror_failed:type_name -> ermite.MirrorFailed2162+ 26, // 22: ermite.Event.mirror_failed:type_name -> ermite.MirrorFailed
2006- 25, // 23: ermite.Event.mirror_recovered:type_name -> ermite.MirrorRecovered2163+ 27, // 23: ermite.Event.mirror_recovered:type_name -> ermite.MirrorRecovered
2007- 27, // 24: ermite.RepoCreated.repo:type_name -> ermite.Repo2164+ 10, // 24: ermite.Event.merge_request_auto_merge_enabled:type_name -> ermite.MergeRequestAutoMergeEnabled
2008- 27, // 25: ermite.RepoUpdated.repo:type_name -> ermite.Repo2165+ 11, // 25: ermite.Event.merge_request_auto_merge_cancelled:type_name -> ermite.MergeRequestAutoMergeCancelled
2009- 7, // 26: ermite.Pushed.ref_updates:type_name -> ermite.RefUpdate2166+ 29, // 26: ermite.RepoCreated.repo:type_name -> ermite.Repo
2010- 28, // 27: ermite.MergeRequestOpened.merge_request:type_name -> ermite.MergeRequest2167+ 29, // 27: ermite.RepoUpdated.repo:type_name -> ermite.Repo
2011- 28, // 28: ermite.MergeRequestMerged.merge_request:type_name -> ermite.MergeRequest2168+ 7, // 28: ermite.Pushed.ref_updates:type_name -> ermite.RefUpdate
2012- 29, // 29: ermite.MergeRequestMergeability.mergeability:type_name -> ermite.Mergeability2169+ 30, // 29: ermite.MergeRequestOpened.merge_request:type_name -> ermite.MergeRequest
2013- 28, // 30: ermite.MergeRequestClosed.merge_request:type_name -> ermite.MergeRequest2170+ 30, // 30: ermite.MergeRequestMerged.merge_request:type_name -> ermite.MergeRequest
2014- 30, // 31: ermite.CommentAdded.comment:type_name -> ermite.Comment2171+ 30, // 31: ermite.MergeRequestAutoMergeEnabled.merge_request:type_name -> ermite.MergeRequest
2015- 30, // 32: ermite.CommentEdited.comment:type_name -> ermite.Comment2172+ 30, // 32: ermite.MergeRequestAutoMergeCancelled.merge_request:type_name -> ermite.MergeRequest
2016- 30, // 33: ermite.CommentDeleted.comment:type_name -> ermite.Comment2173+ 31, // 33: ermite.MergeRequestMergeability.mergeability:type_name -> ermite.Mergeability
2017- 30, // 34: ermite.CommentResolved.comment:type_name -> ermite.Comment2174+ 30, // 34: ermite.MergeRequestClosed.merge_request:type_name -> ermite.MergeRequest
2018- 31, // 35: ermite.IssueOpened.issue:type_name -> ermite.Issue2175+ 32, // 35: ermite.CommentAdded.comment:type_name -> ermite.Comment
2019- 31, // 36: ermite.IssueClosed.issue:type_name -> ermite.Issue2176+ 32, // 36: ermite.CommentEdited.comment:type_name -> ermite.Comment
2020- 31, // 37: ermite.IssueReopened.issue:type_name -> ermite.Issue2177+ 32, // 37: ermite.CommentDeleted.comment:type_name -> ermite.Comment
2021- 32, // 38: ermite.IssueCommented.comment:type_name -> ermite.IssueComment2178+ 32, // 38: ermite.CommentResolved.comment:type_name -> ermite.Comment
2022- 33, // 39: ermite.RunUpdated.run:type_name -> ermite.Run2179+ 33, // 39: ermite.IssueOpened.issue:type_name -> ermite.Issue
2023- 34, // 40: ermite.JobUpdated.job:type_name -> ermite.RunJob2180+ 33, // 40: ermite.IssueClosed.issue:type_name -> ermite.Issue
2024- 35, // 41: ermite.MirrorFailed.state:type_name -> ermite.MirrorState2181+ 33, // 41: ermite.IssueReopened.issue:type_name -> ermite.Issue
2025- 0, // 42: ermite.EventService.Watch:input_type -> ermite.WatchRequest2182+ 34, // 42: ermite.IssueCommented.comment:type_name -> ermite.IssueComment
2026- 1, // 43: ermite.EventService.Watch:output_type -> ermite.WatchResponse2183+ 35, // 43: ermite.RunUpdated.run:type_name -> ermite.Run
2027- 43, // [43:44] is the sub-list for method output_type2184+ 36, // 44: ermite.JobUpdated.job:type_name -> ermite.RunJob
2028- 42, // [42:43] is the sub-list for method input_type2185+ 37, // 45: ermite.MirrorFailed.state:type_name -> ermite.MirrorState
2029- 42, // [42:42] is the sub-list for extension type_name2186+ 0, // 46: ermite.EventService.Watch:input_type -> ermite.WatchRequest
2030- 42, // [42:42] is the sub-list for extension extendee2187+ 1, // 47: ermite.EventService.Watch:output_type -> ermite.WatchResponse
2031- 0, // [0:42] is the sub-list for field type_name2188+ 47, // [47:48] is the sub-list for method output_type
2189+ 46, // [46:47] is the sub-list for method input_type
2190+ 46, // [46:46] is the sub-list for extension type_name
2191+ 46, // [46:46] is the sub-list for extension extendee
2192+ 0, // [0:46] is the sub-list for field type_name
2032 }2193 }
2033 2194
2034 func init() { file_ermite_event_proto_init() }2195 func init() { file_ermite_event_proto_init() }
@@ -2064,6 +2225,8 @@ func file_ermite_event_proto_init() {
2064 (*Event_MergeRequestMergeability)(nil),2225 (*Event_MergeRequestMergeability)(nil),
2065 (*Event_MirrorFailed)(nil),2226 (*Event_MirrorFailed)(nil),
2066 (*Event_MirrorRecovered)(nil),2227 (*Event_MirrorRecovered)(nil),
2228+ (*Event_MergeRequestAutoMergeEnabled)(nil),
2229+ (*Event_MergeRequestAutoMergeCancelled)(nil),
2067 }2230 }
2068 type x struct{}2231 type x struct{}
2069 out := protoimpl.TypeBuilder{2232 out := protoimpl.TypeBuilder{
@@ -2071,7 +2234,7 @@ func file_ermite_event_proto_init() {
2071 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),2234 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
2072 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_event_proto_rawDesc), len(file_ermite_event_proto_rawDesc)),2235 RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_event_proto_rawDesc), len(file_ermite_event_proto_rawDesc)),
2073 NumEnums: 0,2236 NumEnums: 0,
2074- NumMessages: 26,2237+ NumMessages: 28,
2075 NumExtensions: 0,2238 NumExtensions: 0,
2076 NumServices: 1,2239 NumServices: 1,
2077 },2240 },
M gen/ermite/merge_request.pb.go +521 -160 generated file: collapsed
M gen/ermite/repo.pb.go +20 -8 generated file: collapsed
M gen/ermite/server.pb.go +5 -1 generated file: collapsed
M gen_test.go +2 -0
@@ -54,6 +54,8 @@ func TestProcedures(t *testing.T) {
5454 {ermiteconnect.MergeRequestServiceCloseMergeRequestProcedure, "/ermite.MergeRequestService/CloseMergeRequest"},
5555 {ermiteconnect.MergeRequestServiceMergeMergeRequestProcedure, "/ermite.MergeRequestService/MergeMergeRequest"},
5656 {ermiteconnect.MergeRequestServiceMarkReadProcedure, "/ermite.MergeRequestService/MarkRead"},
57+ {ermiteconnect.MergeRequestServiceEnableAutoMergeProcedure, "/ermite.MergeRequestService/EnableAutoMerge"},
58+ {ermiteconnect.MergeRequestServiceCancelAutoMergeProcedure, "/ermite.MergeRequestService/CancelAutoMerge"},
5759 {ermiteconnect.SessionServiceCreateLoginLinkProcedure, "/ermite.SessionService/CreateLoginLink"},
5860 {ermiteconnect.SessionServiceSignOutEverywhereProcedure, "/ermite.SessionService/SignOutEverywhere"},
5961 {ermiteconnect.ServerServiceGetVersionProcedure, "/ermite.ServerService/GetVersion"},
@@ -54,6 +54,8 @@ func TestProcedures(t *testing.T) {
54 {ermiteconnect.MergeRequestServiceCloseMergeRequestProcedure, "/ermite.MergeRequestService/CloseMergeRequest"},54 {ermiteconnect.MergeRequestServiceCloseMergeRequestProcedure, "/ermite.MergeRequestService/CloseMergeRequest"},
55 {ermiteconnect.MergeRequestServiceMergeMergeRequestProcedure, "/ermite.MergeRequestService/MergeMergeRequest"},55 {ermiteconnect.MergeRequestServiceMergeMergeRequestProcedure, "/ermite.MergeRequestService/MergeMergeRequest"},
56 {ermiteconnect.MergeRequestServiceMarkReadProcedure, "/ermite.MergeRequestService/MarkRead"},56 {ermiteconnect.MergeRequestServiceMarkReadProcedure, "/ermite.MergeRequestService/MarkRead"},
57+ {ermiteconnect.MergeRequestServiceEnableAutoMergeProcedure, "/ermite.MergeRequestService/EnableAutoMerge"},
58+ {ermiteconnect.MergeRequestServiceCancelAutoMergeProcedure, "/ermite.MergeRequestService/CancelAutoMerge"},
57 {ermiteconnect.SessionServiceCreateLoginLinkProcedure, "/ermite.SessionService/CreateLoginLink"},59 {ermiteconnect.SessionServiceCreateLoginLinkProcedure, "/ermite.SessionService/CreateLoginLink"},
58 {ermiteconnect.SessionServiceSignOutEverywhereProcedure, "/ermite.SessionService/SignOutEverywhere"},60 {ermiteconnect.SessionServiceSignOutEverywhereProcedure, "/ermite.SessionService/SignOutEverywhere"},
59 {ermiteconnect.ServerServiceGetVersionProcedure, "/ermite.ServerService/GetVersion"},61 {ermiteconnect.ServerServiceGetVersionProcedure, "/ermite.ServerService/GetVersion"},
M proto/ermite/event.proto +23 -0
@@ -140,6 +140,11 @@ message Event {
140140 MirrorFailed mirror_failed = 23;
141141 // MirrorRecovered: a failing or paused mirror succeeded again.
142142 MirrorRecovered mirror_recovered = 24;
143+ // MergeRequestAutoMergeEnabled: auto-merge was enabled on a merge request.
144+ MergeRequestAutoMergeEnabled merge_request_auto_merge_enabled = 25;
145+ // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was
146+ // cancelled.
147+ MergeRequestAutoMergeCancelled merge_request_auto_merge_cancelled = 26;
143148 }
144149 }
145150
@@ -190,6 +195,24 @@ message MergeRequestOpened {
190195 message MergeRequestMerged {
191196 // MergeRequest is the merge request after the merge.
192197 MergeRequest merge_request = 1;
198+ // Auto is true when the server merged it by auto-merge.
199+ bool auto = 2;
200+}
201+
202+// MergeRequestAutoMergeEnabled reports auto-merge enabled on an open merge
203+// request. It is published again when auto-merge is enabled again.
204+message MergeRequestAutoMergeEnabled {
205+ // MergeRequest is the merge request, with auto_merge set.
206+ MergeRequest merge_request = 1;
207+}
208+
209+// MergeRequestAutoMergeCancelled reports the auto-merge of a merge request
210+// cancelled, by a caller or by the server.
211+message MergeRequestAutoMergeCancelled {
212+ // MergeRequest is the merge request, with auto_merge unset.
213+ MergeRequest merge_request = 1;
214+ // Reason says in one line why it was cancelled. For display only.
215+ string reason = 2;
193216 }
194217
195218 // MergeRequestMergeability reports the mergeability of an open merge request.
@@ -140,6 +140,11 @@ message Event {
140 MirrorFailed mirror_failed = 23;140 MirrorFailed mirror_failed = 23;
141 // MirrorRecovered: a failing or paused mirror succeeded again.141 // MirrorRecovered: a failing or paused mirror succeeded again.
142 MirrorRecovered mirror_recovered = 24;142 MirrorRecovered mirror_recovered = 24;
143+ // MergeRequestAutoMergeEnabled: auto-merge was enabled on a merge request.
144+ MergeRequestAutoMergeEnabled merge_request_auto_merge_enabled = 25;
145+ // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was
146+ // cancelled.
147+ MergeRequestAutoMergeCancelled merge_request_auto_merge_cancelled = 26;
143 }148 }
144 }149 }
145 150
@@ -190,6 +195,24 @@ message MergeRequestOpened {
190 message MergeRequestMerged {195 message MergeRequestMerged {
191 // MergeRequest is the merge request after the merge.196 // MergeRequest is the merge request after the merge.
192 MergeRequest merge_request = 1;197 MergeRequest merge_request = 1;
198+ // Auto is true when the server merged it by auto-merge.
199+ bool auto = 2;
200+}
201+
202+// MergeRequestAutoMergeEnabled reports auto-merge enabled on an open merge
203+// request. It is published again when auto-merge is enabled again.
204+message MergeRequestAutoMergeEnabled {
205+ // MergeRequest is the merge request, with auto_merge set.
206+ MergeRequest merge_request = 1;
207+}
208+
209+// MergeRequestAutoMergeCancelled reports the auto-merge of a merge request
210+// cancelled, by a caller or by the server.
211+message MergeRequestAutoMergeCancelled {
212+ // MergeRequest is the merge request, with auto_merge unset.
213+ MergeRequest merge_request = 1;
214+ // Reason says in one line why it was cancelled. For display only.
215+ string reason = 2;
193 }216 }
194 217
195 // MergeRequestMergeability reports the mergeability of an open merge request.218 // MergeRequestMergeability reports the mergeability of an open merge request.
M proto/ermite/merge_request.proto +81 -0
@@ -88,6 +88,21 @@ message Mergeability {
8888 google.protobuf.Timestamp checked_at = 8;
8989 }
9090
91+// AutoMerge is the pending auto-merge of an open merge request: the server
92+// merges it by itself once its checks pass. Set only by servers with the
93+// "merge_requests.auto_merge" feature.
94+message AutoMerge {
95+ // Mode is the merge mode used. Never MERGE_MODE_UNSPECIFIED.
96+ MergeMode mode = 1;
97+ // HeadId is the head the auto-merge was enabled for. A new head cancels the
98+ // auto-merge.
99+ string head_id = 2;
100+ // EnabledBy names who enabled the auto-merge, like MergeRequest.author.
101+ string enabled_by = 3;
102+ // EnabledAt is when the auto-merge was enabled.
103+ google.protobuf.Timestamp enabled_at = 4;
104+}
105+
91106 // MergeRequest asks to merge one branch of a repository into another branch
92107 // of the same repository. It is about a branch, not about who wrote it.
93108 message MergeRequest {
@@ -138,6 +153,13 @@ message MergeRequest {
138153 // hint: MergeMergeRequest checks again. Set only by servers with the
139154 // "merge_requests.mergeability" feature.
140155 Mergeability mergeability = 14;
156+ // AutoMerge is the pending auto-merge. Set only while the merge request is
157+ // OPEN and auto-merge is enabled; unset once merged or closed. Set only by
158+ // servers with the "merge_requests.auto_merge" feature.
159+ AutoMerge auto_merge = 15;
160+ // AutoMerged is true when the server merged the merge request by auto-merge.
161+ // Always false unless state is MERGED.
162+ bool auto_merged = 16;
141163 }
142164
143165 // Comment is a note on a merge request, either general or attached to a line
@@ -294,6 +316,29 @@ service MergeRequestService {
294316 // failed_precondition (not open). On success the server publishes
295317 // MergeRequestMerged then Pushed for the target branch.
296318 rpc MergeMergeRequest(MergeMergeRequestRequest) returns (MergeMergeRequestResponse);
319+ // EnableAutoMerge asks the server to merge an open merge request by itself
320+ // once at least one check passed on its head, every run created on that head
321+ // is complete, and the merge would be accepted whatever
322+ // RepoSettings.failing_checks_block says. Needs the mr:merge scope and, for a
323+ // token limited to branches, write access to the target branch
324+ // (permission_denied otherwise). The server records the caller, the mode and
325+ // the head the caller saw; it merges as the caller, after resolving the caller
326+ // again, and cancels the auto-merge if the caller can no longer merge, if the
327+ // mode is no longer allowed, if the source branch moves or if the setting is
328+ // turned off. Fails with invalid_argument if the mode is not a merge mode or
329+ // if head_id is empty or not a commit id, and with failed_precondition if the
330+ // merge request is not open, if the source branch no longer points to head_id
331+ // ("branch moved, read again"), is a draft,
332+ // RepoSettings.allow_auto_merge is off, the mode is not allowed by
333+ // RepoSettings, or the server has no CI. Enabling again replaces the mode.
334+ // Publishes MergeRequestAutoMergeEnabled. Needs the
335+ // "merge_requests.auto_merge" feature.
336+ rpc EnableAutoMerge(EnableAutoMergeRequest) returns (EnableAutoMergeResponse);
337+ // CancelAutoMerge cancels the pending auto-merge of an open merge request.
338+ // Needs the mr:merge scope and, for a token limited to branches, write access
339+ // to the target branch. Fails with failed_precondition if auto-merge is not
340+ // enabled. Publishes MergeRequestAutoMergeCancelled.
341+ rpc CancelAutoMerge(CancelAutoMergeRequest) returns (CancelAutoMergeResponse);
297342 // MarkRead records the head the caller has reviewed, for the since_last_read
298343 // option of GetMergeRequest. There is one read position per merge request,
299344 // the reviewer's. Needs the mr:write scope. Marking a commit that does not
@@ -539,6 +584,42 @@ message MergeMergeRequestResponse {
539584 bool source_branch_deleted = 2;
540585 }
541586
587+// EnableAutoMergeRequest describes the auto-merge to enable.
588+message EnableAutoMergeRequest {
589+ // Repo is the repository name.
590+ string repo = 1;
591+ // Number is the merge request number.
592+ int64 number = 2;
593+ // Mode is how to merge. MERGE_MODE_UNSPECIFIED means fast-forward. The mode
594+ // must be in RepoSettings.allowed_merge_modes of the repository.
595+ MergeMode mode = 3;
596+ // HeadId is the full id of the commit the caller reviewed, that is the
597+ // MergeRequest.head_id it was shown. Required. The auto-merge is enabled
598+ // only if the source branch still points to it; failed_precondition (branch
599+ // moved) otherwise.
600+ string head_id = 4;
601+}
602+
603+// EnableAutoMergeResponse holds the merge request with auto-merge enabled.
604+message EnableAutoMergeResponse {
605+ // MergeRequest is the merge request, with auto_merge set.
606+ MergeRequest merge_request = 1;
607+}
608+
609+// CancelAutoMergeRequest names the merge request whose auto-merge to cancel.
610+message CancelAutoMergeRequest {
611+ // Repo is the repository name.
612+ string repo = 1;
613+ // Number is the merge request number.
614+ int64 number = 2;
615+}
616+
617+// CancelAutoMergeResponse holds the merge request after the cancellation.
618+message CancelAutoMergeResponse {
619+ // MergeRequest is the merge request, with auto_merge unset.
620+ MergeRequest merge_request = 1;
621+}
622+
542623 // MarkReadRequest records a read position.
543624 message MarkReadRequest {
544625 // Repo is the repository name.
@@ -88,6 +88,21 @@ message Mergeability {
88 google.protobuf.Timestamp checked_at = 8;88 google.protobuf.Timestamp checked_at = 8;
89 }89 }
90 90
91+// AutoMerge is the pending auto-merge of an open merge request: the server
92+// merges it by itself once its checks pass. Set only by servers with the
93+// "merge_requests.auto_merge" feature.
94+message AutoMerge {
95+ // Mode is the merge mode used. Never MERGE_MODE_UNSPECIFIED.
96+ MergeMode mode = 1;
97+ // HeadId is the head the auto-merge was enabled for. A new head cancels the
98+ // auto-merge.
99+ string head_id = 2;
100+ // EnabledBy names who enabled the auto-merge, like MergeRequest.author.
101+ string enabled_by = 3;
102+ // EnabledAt is when the auto-merge was enabled.
103+ google.protobuf.Timestamp enabled_at = 4;
104+}
105+
91 // MergeRequest asks to merge one branch of a repository into another branch106 // MergeRequest asks to merge one branch of a repository into another branch
92 // of the same repository. It is about a branch, not about who wrote it.107 // of the same repository. It is about a branch, not about who wrote it.
93 message MergeRequest {108 message MergeRequest {
@@ -138,6 +153,13 @@ message MergeRequest {
138 // hint: MergeMergeRequest checks again. Set only by servers with the153 // hint: MergeMergeRequest checks again. Set only by servers with the
139 // "merge_requests.mergeability" feature.154 // "merge_requests.mergeability" feature.
140 Mergeability mergeability = 14;155 Mergeability mergeability = 14;
156+ // AutoMerge is the pending auto-merge. Set only while the merge request is
157+ // OPEN and auto-merge is enabled; unset once merged or closed. Set only by
158+ // servers with the "merge_requests.auto_merge" feature.
159+ AutoMerge auto_merge = 15;
160+ // AutoMerged is true when the server merged the merge request by auto-merge.
161+ // Always false unless state is MERGED.
162+ bool auto_merged = 16;
141 }163 }
142 164
143 // Comment is a note on a merge request, either general or attached to a line165 // Comment is a note on a merge request, either general or attached to a line
@@ -294,6 +316,29 @@ service MergeRequestService {
294 // failed_precondition (not open). On success the server publishes316 // failed_precondition (not open). On success the server publishes
295 // MergeRequestMerged then Pushed for the target branch.317 // MergeRequestMerged then Pushed for the target branch.
296 rpc MergeMergeRequest(MergeMergeRequestRequest) returns (MergeMergeRequestResponse);318 rpc MergeMergeRequest(MergeMergeRequestRequest) returns (MergeMergeRequestResponse);
319+ // EnableAutoMerge asks the server to merge an open merge request by itself
320+ // once at least one check passed on its head, every run created on that head
321+ // is complete, and the merge would be accepted whatever
322+ // RepoSettings.failing_checks_block says. Needs the mr:merge scope and, for a
323+ // token limited to branches, write access to the target branch
324+ // (permission_denied otherwise). The server records the caller, the mode and
325+ // the head the caller saw; it merges as the caller, after resolving the caller
326+ // again, and cancels the auto-merge if the caller can no longer merge, if the
327+ // mode is no longer allowed, if the source branch moves or if the setting is
328+ // turned off. Fails with invalid_argument if the mode is not a merge mode or
329+ // if head_id is empty or not a commit id, and with failed_precondition if the
330+ // merge request is not open, if the source branch no longer points to head_id
331+ // ("branch moved, read again"), is a draft,
332+ // RepoSettings.allow_auto_merge is off, the mode is not allowed by
333+ // RepoSettings, or the server has no CI. Enabling again replaces the mode.
334+ // Publishes MergeRequestAutoMergeEnabled. Needs the
335+ // "merge_requests.auto_merge" feature.
336+ rpc EnableAutoMerge(EnableAutoMergeRequest) returns (EnableAutoMergeResponse);
337+ // CancelAutoMerge cancels the pending auto-merge of an open merge request.
338+ // Needs the mr:merge scope and, for a token limited to branches, write access
339+ // to the target branch. Fails with failed_precondition if auto-merge is not
340+ // enabled. Publishes MergeRequestAutoMergeCancelled.
341+ rpc CancelAutoMerge(CancelAutoMergeRequest) returns (CancelAutoMergeResponse);
297 // MarkRead records the head the caller has reviewed, for the since_last_read342 // MarkRead records the head the caller has reviewed, for the since_last_read
298 // option of GetMergeRequest. There is one read position per merge request,343 // option of GetMergeRequest. There is one read position per merge request,
299 // the reviewer's. Needs the mr:write scope. Marking a commit that does not344 // the reviewer's. Needs the mr:write scope. Marking a commit that does not
@@ -539,6 +584,42 @@ message MergeMergeRequestResponse {
539 bool source_branch_deleted = 2;584 bool source_branch_deleted = 2;
540 }585 }
541 586
587+// EnableAutoMergeRequest describes the auto-merge to enable.
588+message EnableAutoMergeRequest {
589+ // Repo is the repository name.
590+ string repo = 1;
591+ // Number is the merge request number.
592+ int64 number = 2;
593+ // Mode is how to merge. MERGE_MODE_UNSPECIFIED means fast-forward. The mode
594+ // must be in RepoSettings.allowed_merge_modes of the repository.
595+ MergeMode mode = 3;
596+ // HeadId is the full id of the commit the caller reviewed, that is the
597+ // MergeRequest.head_id it was shown. Required. The auto-merge is enabled
598+ // only if the source branch still points to it; failed_precondition (branch
599+ // moved) otherwise.
600+ string head_id = 4;
601+}
602+
603+// EnableAutoMergeResponse holds the merge request with auto-merge enabled.
604+message EnableAutoMergeResponse {
605+ // MergeRequest is the merge request, with auto_merge set.
606+ MergeRequest merge_request = 1;
607+}
608+
609+// CancelAutoMergeRequest names the merge request whose auto-merge to cancel.
610+message CancelAutoMergeRequest {
611+ // Repo is the repository name.
612+ string repo = 1;
613+ // Number is the merge request number.
614+ int64 number = 2;
615+}
616+
617+// CancelAutoMergeResponse holds the merge request after the cancellation.
618+message CancelAutoMergeResponse {
619+ // MergeRequest is the merge request, with auto_merge unset.
620+ MergeRequest merge_request = 1;
621+}
622+
542 // MarkReadRequest records a read position.623 // MarkReadRequest records a read position.
543 message MarkReadRequest {624 message MarkReadRequest {
544 // Repo is the repository name.625 // Repo is the repository name.
M proto/ermite/repo.proto +7 -3
@@ -47,6 +47,10 @@ message RepoSettings {
4747 bool failing_checks_block = 2;
4848 // Issues is the issue participation mode of the repository.
4949 IssuesMode issues = 3;
50+ // AllowAutoMerge says whether auto-merge can be enabled on the merge requests
51+ // of the repository (see MergeRequestService.EnableAutoMerge). It is false by
52+ // default. Set only by servers with the "merge_requests.auto_merge" feature.
53+ bool allow_auto_merge = 4;
5054 }
5155
5256 // Repo is the metadata of a repository. Git-owned state (refs, trees, history)
@@ -166,9 +170,9 @@ message UpdateRepoRequest {
166170 // the call fails with failed_precondition.
167171 string default_branch = 4;
168172 // UpdateMask lists the fields to change: "description", "visibility",
169- // "default_branch", "topics", "settings.allowed_merge_modes" and/or
170- // "settings.failing_checks_block". "settings" stands for both merge settings
171- // paths. It must not be empty unless issues is set. Other paths are
173+ // "default_branch", "topics", "settings.allowed_merge_modes",
174+ // "settings.failing_checks_block" and/or "settings.allow_auto_merge".
175+ // "settings" stands for the three merge settings paths. It must not be empty unless issues is set. Other paths are
172176 // invalid_argument, including "settings.issues" and "issues": the issues
173177 // field is applied outside the mask.
174178 google.protobuf.FieldMask update_mask = 5;
@@ -47,6 +47,10 @@ message RepoSettings {
47 bool failing_checks_block = 2;47 bool failing_checks_block = 2;
48 // Issues is the issue participation mode of the repository.48 // Issues is the issue participation mode of the repository.
49 IssuesMode issues = 3;49 IssuesMode issues = 3;
50+ // AllowAutoMerge says whether auto-merge can be enabled on the merge requests
51+ // of the repository (see MergeRequestService.EnableAutoMerge). It is false by
52+ // default. Set only by servers with the "merge_requests.auto_merge" feature.
53+ bool allow_auto_merge = 4;
50 }54 }
51 55
52 // Repo is the metadata of a repository. Git-owned state (refs, trees, history)56 // Repo is the metadata of a repository. Git-owned state (refs, trees, history)
@@ -166,9 +170,9 @@ message UpdateRepoRequest {
166 // the call fails with failed_precondition.170 // the call fails with failed_precondition.
167 string default_branch = 4;171 string default_branch = 4;
168 // UpdateMask lists the fields to change: "description", "visibility",172 // UpdateMask lists the fields to change: "description", "visibility",
169- // "default_branch", "topics", "settings.allowed_merge_modes" and/or173+ // "default_branch", "topics", "settings.allowed_merge_modes",
170- // "settings.failing_checks_block". "settings" stands for both merge settings174+ // "settings.failing_checks_block" and/or "settings.allow_auto_merge".
171- // paths. It must not be empty unless issues is set. Other paths are175+ // "settings" stands for the three merge settings paths. It must not be empty unless issues is set. Other paths are
172 // invalid_argument, including "settings.issues" and "issues": the issues176 // invalid_argument, including "settings.issues" and "issues": the issues
173 // field is applied outside the mask.177 // field is applied outside the mask.
174 google.protobuf.FieldMask update_mask = 5;178 google.protobuf.FieldMask update_mask = 5;
M proto/ermite/server.proto +5 -1
@@ -60,7 +60,11 @@ message GetVersionResponse {
6060 // and "ci.artifacts" (JobArtifactService and ArtifactService). The merge
6161 // request identifier "merge_requests.mergeability" covers
6262 // MergeRequest.mergeability, the MergeRequestMergeability event and
63- // MERGE_MODE_MERGE_COMMIT.
63+ // MERGE_MODE_MERGE_COMMIT. "merge_requests.auto_merge" covers
64+ // RepoSettings.allow_auto_merge, MergeRequest.auto_merge and auto_merged,
65+ // the EnableAutoMerge and CancelAutoMerge RPCs, the
66+ // MergeRequestAutoMergeEnabled and MergeRequestAutoMergeCancelled events
67+ // and MergeRequestMerged.auto.
6468 repeated string features = 2;
6569 }
6670
@@ -60,7 +60,11 @@ message GetVersionResponse {
60 // and "ci.artifacts" (JobArtifactService and ArtifactService). The merge60 // and "ci.artifacts" (JobArtifactService and ArtifactService). The merge
61 // request identifier "merge_requests.mergeability" covers61 // request identifier "merge_requests.mergeability" covers
62 // MergeRequest.mergeability, the MergeRequestMergeability event and62 // MergeRequest.mergeability, the MergeRequestMergeability event and
63- // MERGE_MODE_MERGE_COMMIT.63+ // MERGE_MODE_MERGE_COMMIT. "merge_requests.auto_merge" covers
64+ // RepoSettings.allow_auto_merge, MergeRequest.auto_merge and auto_merged,
65+ // the EnableAutoMerge and CancelAutoMerge RPCs, the
66+ // MergeRequestAutoMergeEnabled and MergeRequestAutoMergeCancelled events
67+ // and MergeRequestMerged.auto.
64 repeated string features = 2;68 repeated string features = 2;
65 }69 }
66 70

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 18

↑↓ moveenter openesc close