mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-04-23 07:29:39 +00:00
wip: webhook
This commit is contained in:
parent
21fb2f8fe0
commit
c9c5e3fe9c
5 changed files with 58 additions and 26 deletions
|
@ -8,31 +8,33 @@ type HookEventType string
|
||||||
|
|
||||||
// Types of hook events
|
// Types of hook events
|
||||||
const (
|
const (
|
||||||
HookEventCreate HookEventType = "create"
|
HookEventCreate HookEventType = "create"
|
||||||
HookEventDelete HookEventType = "delete"
|
HookEventDelete HookEventType = "delete"
|
||||||
HookEventFork HookEventType = "fork"
|
HookEventFork HookEventType = "fork"
|
||||||
HookEventPush HookEventType = "push"
|
HookEventPush HookEventType = "push"
|
||||||
HookEventIssues HookEventType = "issues"
|
HookEventIssues HookEventType = "issues"
|
||||||
HookEventIssueAssign HookEventType = "issue_assign"
|
HookEventIssueAssign HookEventType = "issue_assign"
|
||||||
HookEventIssueLabel HookEventType = "issue_label"
|
HookEventIssueLabel HookEventType = "issue_label"
|
||||||
HookEventIssueMilestone HookEventType = "issue_milestone"
|
HookEventIssueMilestone HookEventType = "issue_milestone"
|
||||||
HookEventIssueComment HookEventType = "issue_comment"
|
HookEventIssueComment HookEventType = "issue_comment"
|
||||||
HookEventPullRequest HookEventType = "pull_request"
|
HookEventPullRequest HookEventType = "pull_request"
|
||||||
HookEventPullRequestAssign HookEventType = "pull_request_assign"
|
HookEventPullRequestAssign HookEventType = "pull_request_assign"
|
||||||
HookEventPullRequestLabel HookEventType = "pull_request_label"
|
HookEventPullRequestLabel HookEventType = "pull_request_label"
|
||||||
HookEventPullRequestMilestone HookEventType = "pull_request_milestone"
|
HookEventPullRequestMilestone HookEventType = "pull_request_milestone"
|
||||||
HookEventPullRequestComment HookEventType = "pull_request_comment"
|
HookEventPullRequestComment HookEventType = "pull_request_comment"
|
||||||
HookEventPullRequestReviewApproved HookEventType = "pull_request_review_approved"
|
HookEventPullRequestReviewApproved HookEventType = "pull_request_review_approved"
|
||||||
HookEventPullRequestReviewRejected HookEventType = "pull_request_review_rejected"
|
HookEventPullRequestReviewRejected HookEventType = "pull_request_review_rejected"
|
||||||
HookEventPullRequestReviewComment HookEventType = "pull_request_review_comment"
|
HookEventPullRequestReviewComment HookEventType = "pull_request_review_comment"
|
||||||
HookEventPullRequestSync HookEventType = "pull_request_sync"
|
HookEventPullRequestSync HookEventType = "pull_request_sync"
|
||||||
HookEventPullRequestReviewRequest HookEventType = "pull_request_review_request"
|
HookEventPullRequestReviewRequest HookEventType = "pull_request_review_request"
|
||||||
HookEventWiki HookEventType = "wiki"
|
HookEventWiki HookEventType = "wiki"
|
||||||
HookEventRepository HookEventType = "repository"
|
HookEventRepository HookEventType = "repository"
|
||||||
HookEventRelease HookEventType = "release"
|
HookEventRelease HookEventType = "release"
|
||||||
HookEventPackage HookEventType = "package"
|
HookEventPackage HookEventType = "package"
|
||||||
HookEventSchedule HookEventType = "schedule"
|
HookEventSchedule HookEventType = "schedule"
|
||||||
HookEventWorkflowDispatch HookEventType = "workflow_dispatch"
|
HookEventWorkflowDispatch HookEventType = "workflow_dispatch"
|
||||||
|
HookEventActionRunSuccessAfterFailure HookEventType = "action_run_success_after_failur"
|
||||||
|
HookEventActionRunFailure HookEventType = "action_run_hook_event_failure"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Event returns the HookEventType as an event string
|
// Event returns the HookEventType as an event string
|
||||||
|
@ -65,6 +67,10 @@ func (h HookEventType) Event() string {
|
||||||
return "repository"
|
return "repository"
|
||||||
case HookEventRelease:
|
case HookEventRelease:
|
||||||
return "release"
|
return "release"
|
||||||
|
case HookEventActionRunSuccessAfterFailure:
|
||||||
|
return "action_run_success_after_failur"
|
||||||
|
case HookEventActionRunFailure:
|
||||||
|
return "action_run_hook_event_failure"
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ package webhook
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
actions_model "forgejo.org/models/actions"
|
||||||
issues_model "forgejo.org/models/issues"
|
issues_model "forgejo.org/models/issues"
|
||||||
packages_model "forgejo.org/models/packages"
|
packages_model "forgejo.org/models/packages"
|
||||||
"forgejo.org/models/perm"
|
"forgejo.org/models/perm"
|
||||||
|
@ -887,6 +888,27 @@ func (m *webhookNotifier) PackageDelete(ctx context.Context, doer *user_model.Us
|
||||||
notifyPackage(ctx, doer, pd, api.HookPackageDeleted)
|
notifyPackage(ctx, doer, pd, api.HookPackageDeleted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *webhookNotifier) ActionRunNowDone(ctx context.Context, run *actions_model.ActionRun, priorStatus actions_model.Status, lastRun *actions_model.ActionRun) {
|
||||||
|
source := EventSource{
|
||||||
|
Repository: run.Repo,
|
||||||
|
Owner: run.TriggerUser,
|
||||||
|
}
|
||||||
|
|
||||||
|
if run.Status.IsSuccess() {
|
||||||
|
if lastRun.Status.IsSuccess() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := PrepareWebhooks(ctx, source, webhook_module.HookEventActionRunSuccessAfterFailure, &api.PackagePayload{}); err != nil {
|
||||||
|
log.Error("PrepareWebhooks: %v", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err := PrepareWebhooks(ctx, source, webhook_module.HookEventActionRunFailure, &api.PackagePayload{}); err != nil {
|
||||||
|
log.Error("PrepareWebhooks: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func notifyPackage(ctx context.Context, sender *user_model.User, pd *packages_model.PackageDescriptor, action api.HookPackageAction) {
|
func notifyPackage(ctx context.Context, sender *user_model.User, pd *packages_model.PackageDescriptor, action api.HookPackageAction) {
|
||||||
source := EventSource{
|
source := EventSource{
|
||||||
Repository: pd.Repository,
|
Repository: pd.Repository,
|
||||||
|
|
|
@ -36,6 +36,7 @@ type PayloadConvertor[T any] interface {
|
||||||
Release(*api.ReleasePayload) (T, error)
|
Release(*api.ReleasePayload) (T, error)
|
||||||
Wiki(*api.WikiPayload) (T, error)
|
Wiki(*api.WikiPayload) (T, error)
|
||||||
Package(*api.PackagePayload) (T, error)
|
Package(*api.PackagePayload) (T, error)
|
||||||
|
Action(*api.PackagePayload) (T, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertUnmarshalledJSON[T, P any](convert func(P) (T, error), data []byte) (T, error) {
|
func convertUnmarshalledJSON[T, P any](convert func(P) (T, error), data []byte) (T, error) {
|
||||||
|
@ -86,6 +87,8 @@ func NewPayload[T any](rc PayloadConvertor[T], data []byte, event webhook_module
|
||||||
return convertUnmarshalledJSON(rc.Wiki, data)
|
return convertUnmarshalledJSON(rc.Wiki, data)
|
||||||
case webhook_module.HookEventPackage:
|
case webhook_module.HookEventPackage:
|
||||||
return convertUnmarshalledJSON(rc.Package, data)
|
return convertUnmarshalledJSON(rc.Package, data)
|
||||||
|
case webhook_module.HookEventActionRunSuccessAfterFailure, webhook_module.HookEventActionRunFailure:
|
||||||
|
return convertUnmarshalledJSON(rc.Action, data)
|
||||||
}
|
}
|
||||||
var t T
|
var t T
|
||||||
return t, fmt.Errorf("newPayload unsupported event: %s", event)
|
return t, fmt.Errorf("newPayload unsupported event: %s", event)
|
||||||
|
|
|
@ -142,6 +142,7 @@ func SlackLinkToRef(repoURL, ref string) string {
|
||||||
return SlackLinkFormatter(url, refName)
|
return SlackLinkFormatter(url, refName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: fix spelling to Converter
|
||||||
// Create implements payloadConvertor Create method
|
// Create implements payloadConvertor Create method
|
||||||
func (s slackConvertor) Create(p *api.CreatePayload) (SlackPayload, error) {
|
func (s slackConvertor) Create(p *api.CreatePayload) (SlackPayload, error) {
|
||||||
refLink := SlackLinkToRef(p.Repo.HTMLURL, p.Ref)
|
refLink := SlackLinkToRef(p.Repo.HTMLURL, p.Ref)
|
||||||
|
|
|
@ -103,7 +103,7 @@ type EventSource struct {
|
||||||
Owner *user_model.User
|
Owner *user_model.User
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle delivers hook tasks
|
// handler delivers hook tasks
|
||||||
func handler(items ...int64) []int64 {
|
func handler(items ...int64) []int64 {
|
||||||
ctx := graceful.GetManager().HammerContext()
|
ctx := graceful.GetManager().HammerContext()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue