Fix possible ui 500 if workflow's job is nil (#31092) (#31098)

Backport #31092 by @lunny

Fix #31087

Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
Giteabot 2024-05-27 14:13:15 +08:00 committed by GitHub
parent 02b947a15f
commit e0b7938d74
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 9 additions and 0 deletions

View File

@ -3637,6 +3637,7 @@ runs.pushed_by = pushed by
runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s
runs.no_matching_online_runner_helper = No matching online runner with label: %s runs.no_matching_online_runner_helper = No matching online runner with label: %s
runs.no_job_without_needs = The workflow must contain at least one job without dependencies. runs.no_job_without_needs = The workflow must contain at least one job without dependencies.
runs.no_job = The workflow must contain at least one job
runs.actor = Actor runs.actor = Actor
runs.status = Status runs.status = Status
runs.actors_no_select = All actors runs.actors_no_select = All actors

View File

@ -107,7 +107,12 @@ func List(ctx *context.Context) {
// The workflow must contain at least one job without "needs". Otherwise, a deadlock will occur and no jobs will be able to run. // The workflow must contain at least one job without "needs". Otherwise, a deadlock will occur and no jobs will be able to run.
hasJobWithoutNeeds := false hasJobWithoutNeeds := false
// Check whether have matching runner and a job without "needs" // Check whether have matching runner and a job without "needs"
emptyJobsNumber := 0
for _, j := range wf.Jobs { for _, j := range wf.Jobs {
if j == nil {
emptyJobsNumber++
continue
}
if !hasJobWithoutNeeds && len(j.Needs()) == 0 { if !hasJobWithoutNeeds && len(j.Needs()) == 0 {
hasJobWithoutNeeds = true hasJobWithoutNeeds = true
} }
@ -131,6 +136,9 @@ func List(ctx *context.Context) {
if !hasJobWithoutNeeds { if !hasJobWithoutNeeds {
workflow.ErrMsg = ctx.Locale.TrString("actions.runs.no_job_without_needs") workflow.ErrMsg = ctx.Locale.TrString("actions.runs.no_job_without_needs")
} }
if emptyJobsNumber == len(wf.Jobs) {
workflow.ErrMsg = ctx.Locale.TrString("actions.runs.no_job")
}
workflows = append(workflows, workflow) workflows = append(workflows, workflow)
} }
} }