mirror of
https://github.com/go-gitea/gitea.git
synced 2025-10-23 23:13:29 +02:00
allow workflow_run for recusive depth of 5
This commit is contained in:
parent
956556dc20
commit
bb85519b06
@ -164,6 +164,17 @@ func (run *ActionRun) GetPullRequestEventPayload() (*api.PullRequestPayload, err
|
|||||||
return nil, fmt.Errorf("event %s is not a pull request event", run.Event)
|
return nil, fmt.Errorf("event %s is not a pull request event", run.Event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (run *ActionRun) GetWorkflowRunEventPayload() (*api.WorkflowRunPayload, error) {
|
||||||
|
if run.Event == webhook_module.HookEventWorkflowRun {
|
||||||
|
var payload api.WorkflowRunPayload
|
||||||
|
if err := json.Unmarshal([]byte(run.EventPayload), &payload); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &payload, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("event %s is not a pull request event", run.Event)
|
||||||
|
}
|
||||||
|
|
||||||
func (run *ActionRun) IsSchedule() bool {
|
func (run *ActionRun) IsSchedule() bool {
|
||||||
return run.ScheduleID > 0
|
return run.ScheduleID > 0
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ func notify(ctx context.Context, input *notifyInput) error {
|
|||||||
return fmt.Errorf("gitRepo.GetCommit: %w", err)
|
return fmt.Errorf("gitRepo.GetCommit: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if skipWorkflows(input, commit) {
|
if skipWorkflows(ctx, input, commit) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +243,7 @@ func notify(ctx context.Context, input *notifyInput) error {
|
|||||||
return handleWorkflows(ctx, detectedWorkflows, commit, input, ref.String())
|
return handleWorkflows(ctx, detectedWorkflows, commit, input, ref.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func skipWorkflows(input *notifyInput, commit *git.Commit) bool {
|
func skipWorkflows(ctx context.Context, input *notifyInput, commit *git.Commit) bool {
|
||||||
// skip workflow runs with a configured skip-ci string in commit message or pr title if the event is push or pull_request(_sync)
|
// skip workflow runs with a configured skip-ci string in commit message or pr title if the event is push or pull_request(_sync)
|
||||||
// https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs
|
// https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs
|
||||||
skipWorkflowEvents := []webhook_module.HookEventType{
|
skipWorkflowEvents := []webhook_module.HookEventType{
|
||||||
@ -265,12 +265,21 @@ func skipWorkflows(input *notifyInput, commit *git.Commit) bool {
|
|||||||
}
|
}
|
||||||
if input.Event == webhook_module.HookEventWorkflowRun {
|
if input.Event == webhook_module.HookEventWorkflowRun {
|
||||||
wrun, ok := input.Payload.(*api.WorkflowRunPayload)
|
wrun, ok := input.Payload.(*api.WorkflowRunPayload)
|
||||||
if ok && wrun.WorkflowRun != nil && wrun.WorkflowRun.Event == "workflow_run" {
|
for i := 0; i < 5 && ok && wrun.WorkflowRun != nil; i++ {
|
||||||
// skip workflow runs triggered by another workflow run
|
if wrun.WorkflowRun.Event != "workflow_run" {
|
||||||
// TODO GitHub allows chaining up to 5 of them
|
return false
|
||||||
log.Debug("repo %s: skipped workflow_run because of recursive event", input.Repo.RepoPath())
|
}
|
||||||
return true
|
r, _ := actions_model.GetRunByID(ctx, wrun.WorkflowRun.ID)
|
||||||
|
var err error
|
||||||
|
wrun, err = r.GetWorkflowRunEventPayload()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetWorkflowRunEventPayload: %v", err)
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// skip workflow runs events exceeding the maxiumum of 5 recursive events
|
||||||
|
log.Debug("repo %s: skipped workflow_run because of recursive event of 5", input.Repo.RepoPath())
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user