diff --git a/internal/api/openapi/shared.go b/internal/api/openapi/common.go similarity index 95% rename from internal/api/openapi/shared.go rename to internal/api/openapi/common.go index 94a710a5e..ebb3a9e9b 100644 --- a/internal/api/openapi/shared.go +++ b/internal/api/openapi/common.go @@ -20,6 +20,14 @@ func ptrptr(i interface{}) *interface{} { return &i } +func toInterfaceSlice[T interface{}](vals []T) []interface{} { + res := make([]interface{}, len(vals)) + for i := range vals { + res[i] = vals[i] + } + return res +} + var queryParameterPage = openapi3.ParameterOrRef{ Parameter: &openapi3.Parameter{ Name: request.QueryParamPage, diff --git a/internal/api/openapi/openapi.go b/internal/api/openapi/openapi.go index e9cc7a6b7..d20b2a38b 100644 --- a/internal/api/openapi/openapi.go +++ b/internal/api/openapi/openapi.go @@ -48,6 +48,7 @@ func Generate() *openapi3.Spec { repoOperations(&reflector) resourceOperations(&reflector) pullReqOperations(&reflector) + webhookOperations(&reflector) // // define security scheme diff --git a/internal/api/openapi/webhook.go b/internal/api/openapi/webhook.go new file mode 100644 index 000000000..5eeed8f91 --- /dev/null +++ b/internal/api/openapi/webhook.go @@ -0,0 +1,188 @@ +// Copyright 2022 Harness Inc. All rights reserved. +// Use of this source code is governed by the Polyform Free Trial License +// that can be found in the LICENSE.md file for this repository. + +package openapi + +import ( + "net/http" + + "github.com/harness/gitness/internal/api/controller/webhook" + "github.com/harness/gitness/internal/api/usererror" + "github.com/harness/gitness/types" + "github.com/harness/gitness/types/enum" + + "github.com/swaggest/openapi-go/openapi3" +) + +// webhookTrigger is a plugin for enum.WebhookTrigger to allow using oneof. +type webhookTrigger string + +func (webhookTrigger) Enum() []interface{} { + return toInterfaceSlice(enum.GetAllWebhookTriggers()) +} + +// webhookCreateInput is used to overshadow field Triggers of webhook.CreateInput. +type webhookCreateInput struct { + webhook.CreateInput + Triggers []webhookTrigger `json:"triggers"` +} + +// webhookParent is a plugin for enum.WebhookParent to allow using oneof. +type webhookParent string + +func (webhookParent) Enum() []interface{} { + return toInterfaceSlice(enum.GetAllWebhookParents()) +} + +// webhookType is used to overshadow fields Parent & Triggers of types.Webhook. +type webhookType struct { + types.Webhook + ParentType webhookParent `json:"parent_type"` + Triggers []webhookTrigger `json:"triggers"` +} + +type createWebhookRequest struct { + repoRequest + webhookCreateInput +} + +type listWebhooksRequest struct { + repoRequest +} + +type webhookRequest struct { + repoRequest + ID int64 `path:"webhook_id"` +} + +type getWebhookRequest struct { + webhookRequest +} + +type deleteWebhookRequest struct { + webhookRequest +} + +// webhookUpdateInput is used to overshadow field Triggers of webhook.UpdateInput. +type webhookUpdateInput struct { + webhook.UpdateInput + Triggers []webhookTrigger `json:"triggers"` +} + +type updateWebhookRequest struct { + webhookRequest + webhookUpdateInput +} + +// webhookExecutionResult is a plugin for enum.WebhookExecutionResult to allow using oneof. +type webhookExecutionResult string + +func (webhookExecutionResult) Enum() []interface{} { + return toInterfaceSlice(enum.GetAllWebhookExecutionResults()) +} + +// webhookExecutionType is used to overshadow triggers TriggerType & Result of types.WebhookExecution. +type webhookExecutionType struct { + types.WebhookExecution + TriggerType webhookTrigger `json:"trigger_type"` + Result webhookExecutionResult `json:"result"` +} + +type listWebhookExecutionsRequest struct { + webhookRequest +} + +type webhookExecutionRequest struct { + webhookRequest + ID int64 `path:"webhook_execution_id"` +} + +type getWebhookExecutionRequest struct { + webhookExecutionRequest +} + +//nolint:funlen +func webhookOperations(reflector *openapi3.Reflector) { + createWebhook := openapi3.Operation{} + createWebhook.WithTags("webhook") + createWebhook.WithMapOfAnything(map[string]interface{}{"operationId": "createWebhook"}) + _ = reflector.SetRequest(&createWebhook, new(createWebhookRequest), http.MethodPost) + _ = reflector.SetJSONResponse(&createWebhook, new(webhookType), http.StatusOK) + _ = reflector.SetJSONResponse(&createWebhook, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&createWebhook, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&createWebhook, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&createWebhook, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodPost, "/repos/{repoRef}/webhooks", createWebhook) + + listWebhooks := openapi3.Operation{} + listWebhooks.WithTags("webhook") + listWebhooks.WithMapOfAnything(map[string]interface{}{"operationId": "listWebhooks"}) + listWebhooks.WithParameters(queryParameterPage, queryParameterPerPage) + _ = reflector.SetRequest(&listWebhooks, new(listWebhooksRequest), http.MethodGet) + _ = reflector.SetJSONResponse(&listWebhooks, new([]webhookType), http.StatusOK) + _ = reflector.SetJSONResponse(&listWebhooks, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&listWebhooks, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&listWebhooks, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&listWebhooks, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodGet, "/repos/{repoRef}/webhooks", listWebhooks) + + getWebhook := openapi3.Operation{} + getWebhook.WithTags("webhook") + getWebhook.WithMapOfAnything(map[string]interface{}{"operationId": "getWebhook"}) + _ = reflector.SetRequest(&getWebhook, new(getWebhookRequest), http.MethodGet) + _ = reflector.SetJSONResponse(&getWebhook, new(webhookType), http.StatusOK) + _ = reflector.SetJSONResponse(&getWebhook, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&getWebhook, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&getWebhook, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&getWebhook, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodGet, "/repos/{repoRef}/webhooks/{webhook_id}", getWebhook) + + updateWebhook := openapi3.Operation{} + updateWebhook.WithTags("webhook") + updateWebhook.WithMapOfAnything(map[string]interface{}{"operationId": "updateWebhook"}) + _ = reflector.SetRequest(&updateWebhook, new(updateWebhookRequest), http.MethodPut) + _ = reflector.SetJSONResponse(&updateWebhook, new(webhookType), http.StatusOK) + _ = reflector.SetJSONResponse(&updateWebhook, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&updateWebhook, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&updateWebhook, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&updateWebhook, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodPut, "/repos/{repoRef}/webhooks/{webhook_id}", updateWebhook) + + deleteWebhook := openapi3.Operation{} + deleteWebhook.WithTags("webhook") + deleteWebhook.WithMapOfAnything(map[string]interface{}{"operationId": "deleteWebhook"}) + _ = reflector.SetRequest(&deleteWebhook, new(deleteWebhookRequest), http.MethodDelete) + _ = reflector.SetJSONResponse(&deleteWebhook, nil, http.StatusNoContent) + _ = reflector.SetJSONResponse(&deleteWebhook, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&deleteWebhook, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&deleteWebhook, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&deleteWebhook, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodDelete, "/repos/{repoRef}/webhooks/{webhook_id}", deleteWebhook) + + listWebhookExecutions := openapi3.Operation{} + listWebhookExecutions.WithTags("webhook") + listWebhookExecutions.WithMapOfAnything(map[string]interface{}{"operationId": "listWebhookExecutions"}) + listWebhookExecutions.WithParameters(queryParameterPage, queryParameterPerPage) + _ = reflector.SetRequest(&listWebhookExecutions, new(listWebhookExecutionsRequest), http.MethodGet) + _ = reflector.SetJSONResponse(&listWebhookExecutions, new([]webhookExecutionType), http.StatusOK) + _ = reflector.SetJSONResponse(&listWebhookExecutions, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&listWebhookExecutions, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&listWebhookExecutions, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&listWebhookExecutions, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodGet, + "/repos/{repoRef}/webhooks/{webhook_id}/executions", listWebhookExecutions) + + getWebhookExecution := openapi3.Operation{} + getWebhookExecution.WithTags("webhook") + getWebhookExecution.WithMapOfAnything(map[string]interface{}{"operationId": "getWebhookExecution"}) + getWebhookExecution.WithParameters(queryParameterPage, queryParameterPerPage) + _ = reflector.SetRequest(&getWebhookExecution, new(getWebhookExecutionRequest), http.MethodGet) + _ = reflector.SetJSONResponse(&getWebhookExecution, new(webhookExecutionType), http.StatusOK) + _ = reflector.SetJSONResponse(&getWebhookExecution, new(usererror.Error), http.StatusBadRequest) + _ = reflector.SetJSONResponse(&getWebhookExecution, new(usererror.Error), http.StatusInternalServerError) + _ = reflector.SetJSONResponse(&getWebhookExecution, new(usererror.Error), http.StatusUnauthorized) + _ = reflector.SetJSONResponse(&getWebhookExecution, new(usererror.Error), http.StatusForbidden) + _ = reflector.Spec.AddOperation(http.MethodGet, + "/repos/{repoRef}/webhooks/{webhook_id}/executions/{webhook_execution_id}", getWebhookExecution) +} diff --git a/types/enum/shared.go b/types/enum/common.go similarity index 67% rename from types/enum/shared.go rename to types/enum/common.go index 2400d242e..ca85d9423 100644 --- a/types/enum/shared.go +++ b/types/enum/common.go @@ -4,6 +4,8 @@ package enum +import "sort" + const ( id = "id" uid = "uid" @@ -23,3 +25,16 @@ const ( comment = "comment" code = "code" ) + +func existsInSortedSlice(strs []string, s string) bool { + idx := sort.SearchStrings(strs, s) + return idx >= 0 && idx < len(strs) && strs[idx] == s +} + +func enumToStringSlice[T ~string](vals []T) []string { + res := make([]string, len(vals)) + for i := range vals { + res[i] = string(vals[i]) + } + return res +} diff --git a/types/enum/pullreq.go b/types/enum/pullreq.go index 3f4e0aec8..50ad544d0 100644 --- a/types/enum/pullreq.go +++ b/types/enum/pullreq.go @@ -73,19 +73,23 @@ const ( PullReqActivityTypeTitleChange PullReqActivityType = "title-change" ) -var pullReqActivityTypes = []string{ - string(PullReqActivityTypeComment), - string(PullReqActivityTypeCodeComment), - string(PullReqActivityTypeTitleChange), +func GetAllPullReqActivityTypes() []PullReqActivityType { + return []PullReqActivityType{ + PullReqActivityTypeComment, + PullReqActivityTypeCodeComment, + PullReqActivityTypeTitleChange, + } } +var rawPullReqActivityTypes = enumToStringSlice(GetAllPullReqActivityTypes()) + func init() { - sort.Strings(pullReqActivityTypes) + sort.Strings(rawPullReqActivityTypes) } // ParsePullReqActivityType parses the pull request activity type. func ParsePullReqActivityType(s string) (PullReqActivityType, bool) { - if existsInSortedSlice(pullReqActivityTypes, s) { + if existsInSortedSlice(rawPullReqActivityTypes, s) { return PullReqActivityType(s), true } return "", false @@ -103,25 +107,24 @@ const ( PullReqActivityKindCodeComment PullReqActivityKind = "code" ) -var pullReqActivityKinds = []string{ - string(PullReqActivityKindSystem), - string(PullReqActivityKindComment), - string(PullReqActivityTypeCodeComment), +func GetAllPullReqActivityKinds() []PullReqActivityKind { + return []PullReqActivityKind{ + PullReqActivityKindSystem, + PullReqActivityKindComment, + PullReqActivityKindCodeComment, + } } +var rawPullReqActivityKinds = enumToStringSlice(GetAllPullReqActivityKinds()) + func init() { - sort.Strings(pullReqActivityKinds) + sort.Strings(rawPullReqActivityKinds) } // ParsePullReqActivityKind parses the pull request activity type. func ParsePullReqActivityKind(s string) (PullReqActivityKind, bool) { - if existsInSortedSlice(pullReqActivityKinds, s) { + if existsInSortedSlice(rawPullReqActivityKinds, s) { return PullReqActivityKind(s), true } return "", false } - -func existsInSortedSlice(strs []string, s string) bool { - idx := sort.SearchStrings(strs, s) - return idx >= 0 && idx < len(strs) && strs[idx] == s -} diff --git a/types/enum/webhook.go b/types/enum/webhook.go index 7aca0ed74..dac730c98 100644 --- a/types/enum/webhook.go +++ b/types/enum/webhook.go @@ -10,27 +10,42 @@ import "sort" type WebhookParent string const ( - // WebhookParentSpace describes a space as webhook owner. - WebhookParentSpace WebhookParent = "space" - // WebhookParentSpace describes a repo as webhook owner. WebhookParentRepo WebhookParent = "repo" + + // WebhookParentSpace describes a space as webhook owner. + WebhookParentSpace WebhookParent = "space" ) +func GetAllWebhookParents() []WebhookParent { + return []WebhookParent{ + WebhookParentRepo, + WebhookParentSpace, + } +} + // WebhookExecutionResult defines the different results of a webhook execution. type WebhookExecutionResult string const ( - // WebhookExecutionResultFatalError describes a webhook execution result that failed with an unrecoverable error. - WebhookExecutionResultFatalError WebhookExecutionResult = "fatal_error" + // WebhookExecutionResultSuccess describes a webhook execution result that succeeded. + WebhookExecutionResultSuccess WebhookExecutionResult = "success" // WebhookExecutionResultRetriableError describes a webhook execution result that failed with a retriable error. WebhookExecutionResultRetriableError WebhookExecutionResult = "retriable_error" - // WebhookExecutionResultSuccess describes a webhook execution result that succeeded. - WebhookExecutionResultSuccess WebhookExecutionResult = "success" + // WebhookExecutionResultFatalError describes a webhook execution result that failed with an unrecoverable error. + WebhookExecutionResultFatalError WebhookExecutionResult = "fatal_error" ) +func GetAllWebhookExecutionResults() []WebhookExecutionResult { + return []WebhookExecutionResult{ + WebhookExecutionResultSuccess, + WebhookExecutionResultRetriableError, + WebhookExecutionResultFatalError, + } +} + // WebhookTrigger defines the different types of webhook triggers available. // NOTE: For now we keep a small list - will be extended later on once we decided on a final set of triggers. type WebhookTrigger string @@ -40,17 +55,21 @@ const ( WebhookTriggerPush WebhookTrigger = "push" ) -var webhookTriggers = []string{ - string(WebhookTriggerPush), +func GetAllWebhookTriggers() []WebhookTrigger { + return []WebhookTrigger{ + WebhookTriggerPush, + } } +var rawWebhookTriggers = enumToStringSlice(GetAllWebhookTriggers()) + func init() { - sort.Strings(webhookTriggers) + sort.Strings(rawWebhookTriggers) } // ParsePullReqActivityType parses the webhook trigger type. func ParseWebhookTrigger(s string) (WebhookTrigger, bool) { - if existsInSortedSlice(webhookTriggers, s) { + if existsInSortedSlice(rawWebhookTriggers, s) { return WebhookTrigger(s), true } return "", false diff --git a/web/src/services/code/index.tsx b/web/src/services/code/index.tsx index ace94ea71..fd1cff820 100644 --- a/web/src/services/code/index.tsx +++ b/web/src/services/code/index.tsx @@ -11,10 +11,20 @@ export type EnumParentResourceType = string export type EnumPathTargetType = string +export type EnumPullReqActivityKind = string + +export type EnumPullReqActivityType = string + export type EnumPullReqState = string export type EnumTokenType = string +export type EnumWebhookExecutionResult = string + +export type EnumWebhookParent = string + +export type EnumWebhookTrigger = string + export interface FormDataOpenapiLoginRequest { password?: string username?: string @@ -32,6 +42,15 @@ export interface OpenapiCalculateCommitDivergenceRequest { requests?: RepoCommitDivergenceRequest[] | null } +export interface OpenapiCommentCreatePullReqRequest { + parent_id?: number + text?: string +} + +export interface OpenapiCommentUpdatePullReqRequest { + text?: string +} + export interface OpenapiCommitFilesRequest { actions?: RepoCommitFileAction[] | null branch?: string @@ -92,6 +111,14 @@ export interface OpenapiCreateSpaceRequest { uid?: string } +export interface OpenapiCreateWebhookRequest { + enabled?: boolean + insecure?: boolean + secret?: string + triggers?: OpenapiWebhookTrigger[] | null + url?: string +} + export interface OpenapiCurrentUserResponse { data?: TypesUser status?: 'SUCCESS' | 'FAILURE' | 'ERROR' @@ -137,6 +164,48 @@ export interface OpenapiUpdateSpaceRequest { isPublic?: boolean | null } +export interface OpenapiUpdateWebhookRequest { + enabled?: boolean | null + insecure?: boolean | null + secret?: string | null + triggers?: OpenapiWebhookTrigger[] | null + url?: string | null +} + +export type OpenapiWebhookExecutionResult = 'success' | 'retriable_error' | 'fatal_error' + +export interface OpenapiWebhookExecutionType { + created?: number + duration?: number + error?: string + id?: number + request?: TypesWebhookExecutionRequest + response?: TypesWebhookExecutionResponse + result?: OpenapiWebhookExecutionResult + retrigger_of?: number | null + retriggerable?: boolean + trigger_type?: OpenapiWebhookTrigger + webhook_id?: number +} + +export type OpenapiWebhookParent = 'repo' | 'space' + +export type OpenapiWebhookTrigger = 'push' + +export interface OpenapiWebhookType { + created?: number + created_by?: number + enabled?: boolean + id?: number + insecure?: boolean + parent_id?: number + parent_type?: OpenapiWebhookParent + triggers?: OpenapiWebhookTrigger[] | null + updated?: number + url?: string + version?: number +} + export interface RepoBranch { commit?: RepoCommit name?: string @@ -262,6 +331,28 @@ export interface TypesPullReq { version?: number } +export interface TypesPullReqActivity { + author?: TypesPrincipalInfo + created?: number + deleted?: number | null + edited?: number + id?: number + kind?: EnumPullReqActivityKind + metadata?: { [key: string]: any } | null + order?: number + parent_id?: number | null + payload?: { [key: string]: any } | null + pullreq_id?: number + repo_id?: number + resolved?: number | null + resolver?: TypesPrincipalInfo + sub_order?: number + text?: string + type?: EnumPullReqActivityType + updated?: number + version?: number +} + export interface TypesRepository { created?: number createdBy?: number @@ -336,6 +427,19 @@ export interface TypesUserInput { password?: string | null } +export interface TypesWebhookExecutionRequest { + body?: string + headers?: string + url?: string +} + +export interface TypesWebhookExecutionResponse { + body?: string + headers?: string + status?: number + status_code?: string +} + export interface UserUpdateInput { displayName?: string | null email?: string | null @@ -1116,6 +1220,227 @@ export const useUpdatePullReq = ({ repoRef, pullreq_number, ...props }: UseUpdat { base: getConfigNew('code'), pathParams: { repoRef, pullreq_number }, ...props } ) +export interface ListPullReqActivitiesQueryParams { + /** + * The kind of the pull request activity to include in the result. + */ + kind?: ('system' | 'comment' | 'code')[] + /** + * The type of the pull request activity to include in the result. + */ + type?: ('comment' | 'code-comment' | 'title-change')[] + /** + * The result should contain only entries created at and after this timestamp (unix millis). + */ + since?: number + /** + * The result should contain only entries created before this timestamp (unix millis). + */ + until?: number + /** + * The maximum number of results to return. + */ + limit?: number +} + +export interface ListPullReqActivitiesPathParams { + repoRef: string + pullreq_number: number +} + +export type ListPullReqActivitiesProps = Omit< + GetProps, + 'path' +> & + ListPullReqActivitiesPathParams + +export const ListPullReqActivities = ({ repoRef, pullreq_number, ...props }: ListPullReqActivitiesProps) => ( + + path={`/repos/${repoRef}/pullreq/${pullreq_number}/activities`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseListPullReqActivitiesProps = Omit< + UseGetProps< + TypesPullReqActivity[], + UsererrorError, + ListPullReqActivitiesQueryParams, + ListPullReqActivitiesPathParams + >, + 'path' +> & + ListPullReqActivitiesPathParams + +export const useListPullReqActivities = ({ repoRef, pullreq_number, ...props }: UseListPullReqActivitiesProps) => + useGet( + (paramsInPath: ListPullReqActivitiesPathParams) => + `/repos/${paramsInPath.repoRef}/pullreq/${paramsInPath.pullreq_number}/activities`, + { base: getConfigNew('code'), pathParams: { repoRef, pullreq_number }, ...props } + ) + +export interface CommentCreatePullReqPathParams { + repoRef: string + pullreq_number: number +} + +export type CommentCreatePullReqProps = Omit< + MutateProps< + TypesPullReqActivity, + UsererrorError, + void, + OpenapiCommentCreatePullReqRequest, + CommentCreatePullReqPathParams + >, + 'path' | 'verb' +> & + CommentCreatePullReqPathParams + +export const CommentCreatePullReq = ({ repoRef, pullreq_number, ...props }: CommentCreatePullReqProps) => ( + + verb="POST" + path={`/repos/${repoRef}/pullreq/${pullreq_number}/comments`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseCommentCreatePullReqProps = Omit< + UseMutateProps< + TypesPullReqActivity, + UsererrorError, + void, + OpenapiCommentCreatePullReqRequest, + CommentCreatePullReqPathParams + >, + 'path' | 'verb' +> & + CommentCreatePullReqPathParams + +export const useCommentCreatePullReq = ({ repoRef, pullreq_number, ...props }: UseCommentCreatePullReqProps) => + useMutate< + TypesPullReqActivity, + UsererrorError, + void, + OpenapiCommentCreatePullReqRequest, + CommentCreatePullReqPathParams + >( + 'POST', + (paramsInPath: CommentCreatePullReqPathParams) => + `/repos/${paramsInPath.repoRef}/pullreq/${paramsInPath.pullreq_number}/comments`, + { base: getConfigNew('code'), pathParams: { repoRef, pullreq_number }, ...props } + ) + +export interface CommentDeletePullReqPathParams { + repoRef: string + pullreq_number: number +} + +export type CommentDeletePullReqProps = Omit< + MutateProps, + 'path' | 'verb' +> & + CommentDeletePullReqPathParams + +export const CommentDeletePullReq = ({ repoRef, pullreq_number, ...props }: CommentDeletePullReqProps) => ( + + verb="DELETE" + path={`/repos/${repoRef}/pullreq/${pullreq_number}/comments`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseCommentDeletePullReqProps = Omit< + UseMutateProps, + 'path' | 'verb' +> & + CommentDeletePullReqPathParams + +export const useCommentDeletePullReq = ({ repoRef, pullreq_number, ...props }: UseCommentDeletePullReqProps) => + useMutate( + 'DELETE', + (paramsInPath: CommentDeletePullReqPathParams) => + `/repos/${paramsInPath.repoRef}/pullreq/${paramsInPath.pullreq_number}/comments`, + { base: getConfigNew('code'), pathParams: { repoRef, pullreq_number }, ...props } + ) + +export interface CommentUpdatePullReqPathParams { + repoRef: string + pullreq_number: number + pullreq_comment_id: number +} + +export type CommentUpdatePullReqProps = Omit< + MutateProps< + TypesPullReqActivity, + UsererrorError, + void, + OpenapiCommentUpdatePullReqRequest, + CommentUpdatePullReqPathParams + >, + 'path' | 'verb' +> & + CommentUpdatePullReqPathParams + +export const CommentUpdatePullReq = ({ + repoRef, + pullreq_number, + pullreq_comment_id, + ...props +}: CommentUpdatePullReqProps) => ( + + verb="PUT" + path={`/repos/${repoRef}/pullreq/${pullreq_number}/comments/${pullreq_comment_id}`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseCommentUpdatePullReqProps = Omit< + UseMutateProps< + TypesPullReqActivity, + UsererrorError, + void, + OpenapiCommentUpdatePullReqRequest, + CommentUpdatePullReqPathParams + >, + 'path' | 'verb' +> & + CommentUpdatePullReqPathParams + +export const useCommentUpdatePullReq = ({ + repoRef, + pullreq_number, + pullreq_comment_id, + ...props +}: UseCommentUpdatePullReqProps) => + useMutate< + TypesPullReqActivity, + UsererrorError, + void, + OpenapiCommentUpdatePullReqRequest, + CommentUpdatePullReqPathParams + >( + 'PUT', + (paramsInPath: CommentUpdatePullReqPathParams) => + `/repos/${paramsInPath.repoRef}/pullreq/${paramsInPath.pullreq_number}/comments/${paramsInPath.pullreq_comment_id}`, + { base: getConfigNew('code'), pathParams: { repoRef, pullreq_number, pullreq_comment_id }, ...props } + ) + export interface ListRepositoryServiceAccountsPathParams { repoRef: string } @@ -1203,6 +1528,289 @@ export const useListTags = ({ repoRef, ...props }: UseListTagsProps) => { base: getConfigNew('code'), pathParams: { repoRef }, ...props } ) +export interface ListWebhooksQueryParams { + /** + * The page to return. + */ + page?: number + /** + * The number of entries returned per page. + */ + per_page?: number +} + +export interface ListWebhooksPathParams { + repoRef: string +} + +export type ListWebhooksProps = Omit< + GetProps, + 'path' +> & + ListWebhooksPathParams + +export const ListWebhooks = ({ repoRef, ...props }: ListWebhooksProps) => ( + + path={`/repos/${repoRef}/webhooks`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseListWebhooksProps = Omit< + UseGetProps, + 'path' +> & + ListWebhooksPathParams + +export const useListWebhooks = ({ repoRef, ...props }: UseListWebhooksProps) => + useGet( + (paramsInPath: ListWebhooksPathParams) => `/repos/${paramsInPath.repoRef}/webhooks`, + { base: getConfigNew('code'), pathParams: { repoRef }, ...props } + ) + +export interface CreateWebhookPathParams { + repoRef: string +} + +export type CreateWebhookProps = Omit< + MutateProps, + 'path' | 'verb' +> & + CreateWebhookPathParams + +export const CreateWebhook = ({ repoRef, ...props }: CreateWebhookProps) => ( + + verb="POST" + path={`/repos/${repoRef}/webhooks`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseCreateWebhookProps = Omit< + UseMutateProps, + 'path' | 'verb' +> & + CreateWebhookPathParams + +export const useCreateWebhook = ({ repoRef, ...props }: UseCreateWebhookProps) => + useMutate( + 'POST', + (paramsInPath: CreateWebhookPathParams) => `/repos/${paramsInPath.repoRef}/webhooks`, + { base: getConfigNew('code'), pathParams: { repoRef }, ...props } + ) + +export interface DeleteWebhookPathParams { + repoRef: string +} + +export type DeleteWebhookProps = Omit< + MutateProps, + 'path' | 'verb' +> & + DeleteWebhookPathParams + +export const DeleteWebhook = ({ repoRef, ...props }: DeleteWebhookProps) => ( + + verb="DELETE" + path={`/repos/${repoRef}/webhooks`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseDeleteWebhookProps = Omit< + UseMutateProps, + 'path' | 'verb' +> & + DeleteWebhookPathParams + +export const useDeleteWebhook = ({ repoRef, ...props }: UseDeleteWebhookProps) => + useMutate( + 'DELETE', + (paramsInPath: DeleteWebhookPathParams) => `/repos/${paramsInPath.repoRef}/webhooks`, + { base: getConfigNew('code'), pathParams: { repoRef }, ...props } + ) + +export interface GetWebhookPathParams { + repoRef: string + webhook_id: number +} + +export type GetWebhookProps = Omit, 'path'> & + GetWebhookPathParams + +export const GetWebhook = ({ repoRef, webhook_id, ...props }: GetWebhookProps) => ( + + path={`/repos/${repoRef}/webhooks/${webhook_id}`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseGetWebhookProps = Omit< + UseGetProps, + 'path' +> & + GetWebhookPathParams + +export const useGetWebhook = ({ repoRef, webhook_id, ...props }: UseGetWebhookProps) => + useGet( + (paramsInPath: GetWebhookPathParams) => `/repos/${paramsInPath.repoRef}/webhooks/${paramsInPath.webhook_id}`, + { base: getConfigNew('code'), pathParams: { repoRef, webhook_id }, ...props } + ) + +export interface UpdateWebhookPathParams { + repoRef: string + webhook_id: number +} + +export type UpdateWebhookProps = Omit< + MutateProps, + 'path' | 'verb' +> & + UpdateWebhookPathParams + +export const UpdateWebhook = ({ repoRef, webhook_id, ...props }: UpdateWebhookProps) => ( + + verb="PUT" + path={`/repos/${repoRef}/webhooks/${webhook_id}`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseUpdateWebhookProps = Omit< + UseMutateProps, + 'path' | 'verb' +> & + UpdateWebhookPathParams + +export const useUpdateWebhook = ({ repoRef, webhook_id, ...props }: UseUpdateWebhookProps) => + useMutate( + 'PUT', + (paramsInPath: UpdateWebhookPathParams) => `/repos/${paramsInPath.repoRef}/webhooks/${paramsInPath.webhook_id}`, + { base: getConfigNew('code'), pathParams: { repoRef, webhook_id }, ...props } + ) + +export interface ListWebhookExecutionsQueryParams { + /** + * The page to return. + */ + page?: number + /** + * The number of entries returned per page. + */ + per_page?: number +} + +export interface ListWebhookExecutionsPathParams { + repoRef: string + webhook_id: number +} + +export type ListWebhookExecutionsProps = Omit< + GetProps< + OpenapiWebhookExecutionType[], + UsererrorError, + ListWebhookExecutionsQueryParams, + ListWebhookExecutionsPathParams + >, + 'path' +> & + ListWebhookExecutionsPathParams + +export const ListWebhookExecutions = ({ repoRef, webhook_id, ...props }: ListWebhookExecutionsProps) => ( + + path={`/repos/${repoRef}/webhooks/${webhook_id}/executions`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseListWebhookExecutionsProps = Omit< + UseGetProps< + OpenapiWebhookExecutionType[], + UsererrorError, + ListWebhookExecutionsQueryParams, + ListWebhookExecutionsPathParams + >, + 'path' +> & + ListWebhookExecutionsPathParams + +export const useListWebhookExecutions = ({ repoRef, webhook_id, ...props }: UseListWebhookExecutionsProps) => + useGet< + OpenapiWebhookExecutionType[], + UsererrorError, + ListWebhookExecutionsQueryParams, + ListWebhookExecutionsPathParams + >( + (paramsInPath: ListWebhookExecutionsPathParams) => + `/repos/${paramsInPath.repoRef}/webhooks/${paramsInPath.webhook_id}/executions`, + { base: getConfigNew('code'), pathParams: { repoRef, webhook_id }, ...props } + ) + +export interface GetWebhookExecutionQueryParams { + /** + * The page to return. + */ + page?: number + /** + * The number of entries returned per page. + */ + per_page?: number +} + +export interface GetWebhookExecutionPathParams { + repoRef: string + webhook_id: number + webhook_execution_id: number +} + +export type GetWebhookExecutionProps = Omit< + GetProps, + 'path' +> & + GetWebhookExecutionPathParams + +export const GetWebhookExecution = ({ + repoRef, + webhook_id, + webhook_execution_id, + ...props +}: GetWebhookExecutionProps) => ( + + path={`/repos/${repoRef}/webhooks/${webhook_id}/executions/${webhook_execution_id}`} + base={getConfigNew('code')} + {...props} + /> +) + +export type UseGetWebhookExecutionProps = Omit< + UseGetProps< + OpenapiWebhookExecutionType, + UsererrorError, + GetWebhookExecutionQueryParams, + GetWebhookExecutionPathParams + >, + 'path' +> & + GetWebhookExecutionPathParams + +export const useGetWebhookExecution = ({ + repoRef, + webhook_id, + webhook_execution_id, + ...props +}: UseGetWebhookExecutionProps) => + useGet( + (paramsInPath: GetWebhookExecutionPathParams) => + `/repos/${paramsInPath.repoRef}/webhooks/${paramsInPath.webhook_id}/executions/${paramsInPath.webhook_execution_id}`, + { base: getConfigNew('code'), pathParams: { repoRef, webhook_id, webhook_execution_id }, ...props } + ) + export type ListGitignoreProps = Omit, 'path'> export const ListGitignore = (props: ListGitignoreProps) => ( diff --git a/web/src/services/code/swagger.yaml b/web/src/services/code/swagger.yaml index c8c8dd294..fb6b22b35 100644 --- a/web/src/services/code/swagger.yaml +++ b/web/src/services/code/swagger.yaml @@ -1155,6 +1155,258 @@ paths: description: Internal Server Error tags: - pullreq + /repos/{repoRef}/pullreq/{pullreq_number}/activities: + get: + operationId: listPullReqActivities + parameters: + - description: The kind of the pull request activity to include in the result. + in: query + name: kind + required: false + schema: + items: + enum: + - system + - comment + - code + type: string + type: array + - description: The type of the pull request activity to include in the result. + in: query + name: type + required: false + schema: + items: + enum: + - comment + - code-comment + - title-change + type: string + type: array + - description: The result should contain only entries created at and after this + timestamp (unix millis). + in: query + name: since + required: false + schema: + minimum: 0 + type: integer + - description: The result should contain only entries created before this timestamp + (unix millis). + in: query + name: until + required: false + schema: + minimum: 0 + type: integer + - description: The maximum number of results to return. + in: query + name: limit + required: false + schema: + minimum: 1 + type: integer + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: pullreq_number + required: true + schema: + type: integer + responses: + "200": + content: + application/json: + schema: + items: + $ref: '#/components/schemas/TypesPullReqActivity' + type: array + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - pullreq + /repos/{repoRef}/pullreq/{pullreq_number}/comments: + post: + operationId: commentCreatePullReq + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: pullreq_number + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiCommentCreatePullReqRequest' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/TypesPullReqActivity' + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - pullreq + /repos/{repoRef}/pullreq/{pullreq_number}/comments/{pullreq_comment_id}: + delete: + operationId: commentDeletePullReq + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: pullreq_number + required: true + schema: + type: integer + - in: path + name: pullreq_comment_id + required: true + schema: + type: integer + responses: + "204": + description: No Content + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - pullreq + put: + operationId: commentUpdatePullReq + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: pullreq_number + required: true + schema: + type: integer + - in: path + name: pullreq_comment_id + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiCommentUpdatePullReqRequest' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/TypesPullReqActivity' + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - pullreq /repos/{repoRef}/service_accounts: get: operationId: listRepositoryServiceAccounts @@ -1294,6 +1546,388 @@ paths: description: Internal Server Error tags: - repository + /repos/{repoRef}/webhooks: + get: + operationId: listWebhooks + parameters: + - description: The page to return. + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: integer + - description: The number of entries returned per page. + in: query + name: per_page + required: false + schema: + default: 50 + maximum: 100 + minimum: 1 + type: integer + - in: path + name: repoRef + required: true + schema: + type: string + responses: + "200": + content: + application/json: + schema: + items: + $ref: '#/components/schemas/OpenapiWebhookType' + type: array + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook + post: + operationId: createWebhook + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiCreateWebhookRequest' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiWebhookType' + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook + /repos/{repoRef}/webhooks/{webhook_id}: + delete: + operationId: deleteWebhook + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: webhook_id + required: true + schema: + type: integer + responses: + "204": + description: No Content + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook + get: + operationId: getWebhook + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: webhook_id + required: true + schema: + type: integer + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiWebhookType' + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook + put: + operationId: updateWebhook + parameters: + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: webhook_id + required: true + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiUpdateWebhookRequest' + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiWebhookType' + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook + /repos/{repoRef}/webhooks/{webhook_id}/executions: + get: + operationId: listWebhookExecutions + parameters: + - description: The page to return. + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: integer + - description: The number of entries returned per page. + in: query + name: per_page + required: false + schema: + default: 50 + maximum: 100 + minimum: 1 + type: integer + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: webhook_id + required: true + schema: + type: integer + responses: + "200": + content: + application/json: + schema: + items: + $ref: '#/components/schemas/OpenapiWebhookExecutionType' + type: array + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook + /repos/{repoRef}/webhooks/{webhook_id}/executions/{webhook_execution_id}: + get: + operationId: getWebhookExecution + parameters: + - description: The page to return. + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: integer + - description: The number of entries returned per page. + in: query + name: per_page + required: false + schema: + default: 50 + maximum: 100 + minimum: 1 + type: integer + - in: path + name: repoRef + required: true + schema: + type: string + - in: path + name: webhook_id + required: true + schema: + type: integer + - in: path + name: webhook_execution_id + required: true + schema: + type: integer + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/OpenapiWebhookExecutionType' + description: OK + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Unauthorized + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Forbidden + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/UsererrorError' + description: Internal Server Error + tags: + - webhook /resources/gitignore: get: operationId: listGitignore @@ -2181,10 +2815,20 @@ components: type: string EnumPathTargetType: type: string + EnumPullReqActivityKind: + type: string + EnumPullReqActivityType: + type: string EnumPullReqState: type: string EnumTokenType: type: string + EnumWebhookExecutionResult: + type: string + EnumWebhookParent: + type: string + EnumWebhookTrigger: + type: string FormDataOpenapiLoginRequest: properties: password: @@ -2216,6 +2860,18 @@ components: nullable: true type: array type: object + OpenapiCommentCreatePullReqRequest: + properties: + parent_id: + type: integer + text: + type: string + type: object + OpenapiCommentUpdatePullReqRequest: + properties: + text: + type: string + type: object OpenapiCommitFilesRequest: properties: actions: @@ -2322,6 +2978,22 @@ components: uid: type: string type: object + OpenapiCreateWebhookRequest: + properties: + enabled: + type: boolean + insecure: + type: boolean + secret: + type: string + triggers: + items: + $ref: '#/components/schemas/OpenapiWebhookTrigger' + nullable: true + type: array + url: + type: string + type: object OpenapiCurrentUserResponse: properties: data: @@ -2403,6 +3075,95 @@ components: nullable: true type: boolean type: object + OpenapiUpdateWebhookRequest: + properties: + enabled: + nullable: true + type: boolean + insecure: + nullable: true + type: boolean + secret: + nullable: true + type: string + triggers: + items: + $ref: '#/components/schemas/OpenapiWebhookTrigger' + nullable: true + type: array + url: + nullable: true + type: string + type: object + OpenapiWebhookExecutionResult: + enum: + - success + - retriable_error + - fatal_error + type: string + OpenapiWebhookExecutionType: + properties: + created: + type: integer + duration: + type: integer + error: + type: string + id: + type: integer + request: + $ref: '#/components/schemas/TypesWebhookExecutionRequest' + response: + $ref: '#/components/schemas/TypesWebhookExecutionResponse' + result: + $ref: '#/components/schemas/OpenapiWebhookExecutionResult' + retrigger_of: + nullable: true + type: integer + retriggerable: + type: boolean + trigger_type: + $ref: '#/components/schemas/OpenapiWebhookTrigger' + webhook_id: + type: integer + type: object + OpenapiWebhookParent: + enum: + - repo + - space + type: string + OpenapiWebhookTrigger: + enum: + - push + type: string + OpenapiWebhookType: + properties: + created: + type: integer + created_by: + type: integer + enabled: + type: boolean + id: + type: integer + insecure: + type: boolean + parent_id: + type: integer + parent_type: + $ref: '#/components/schemas/OpenapiWebhookParent' + triggers: + items: + $ref: '#/components/schemas/OpenapiWebhookTrigger' + nullable: true + type: array + updated: + type: integer + url: + type: string + version: + type: integer + type: object RepoBranch: properties: commit: @@ -2600,6 +3361,54 @@ components: version: type: integer type: object + TypesPullReqActivity: + properties: + author: + $ref: '#/components/schemas/TypesPrincipalInfo' + created: + type: integer + deleted: + nullable: true + type: integer + edited: + type: integer + id: + type: integer + kind: + $ref: '#/components/schemas/EnumPullReqActivityKind' + metadata: + additionalProperties: {} + nullable: true + type: object + order: + type: integer + parent_id: + nullable: true + type: integer + payload: + additionalProperties: {} + nullable: true + type: object + pullreq_id: + type: integer + repo_id: + type: integer + resolved: + nullable: true + type: integer + resolver: + $ref: '#/components/schemas/TypesPrincipalInfo' + sub_order: + type: integer + text: + type: string + type: + $ref: '#/components/schemas/EnumPullReqActivityType' + updated: + type: integer + version: + type: integer + type: object TypesRepository: properties: created: @@ -2731,6 +3540,26 @@ components: nullable: true type: string type: object + TypesWebhookExecutionRequest: + properties: + body: + type: string + headers: + type: string + url: + type: string + type: object + TypesWebhookExecutionResponse: + properties: + body: + type: string + headers: + type: string + status: + type: integer + status_code: + type: string + type: object UserUpdateInput: properties: displayName: