aboutsummaryrefslogtreecommitdiff
path: root/routers
diff options
context:
space:
mode:
authorJason Song2023-03-04 15:12:37 +0800
committerGitHub2023-03-04 02:12:37 -0500
commit47b912cd526207f831bff759b29a734049d1c8f2 (patch)
treeeb59e9c8ea504339d784b116375ee7dc0e0bffea /routers
parentca84a61761dc78fea7afe5a692deac7db5368dff (diff)
Avoid panic caused by broken payload when creating commit status (#23216)
When creating commit status for Actons jobs, a payload with nil `HeadCommit` will cause panic. Reported at: https://gitea.com/gitea/act_runner/issues/28#issuecomment-732166 Although the `HeadCommit` probably can not be nil after #23215, `CreateCommitStatus` should protect itself, to avoid being broken in the future. In addition, it's enough to print error log instead of returning err when `CreateCommitStatus` failed. --------- Co-authored-by: delvh <dev.lh@web.de>
Diffstat (limited to 'routers')
-rw-r--r--routers/api/actions/runner/runner.go2
-rw-r--r--routers/web/repo/actions/view.go22
2 files changed, 16 insertions, 8 deletions
diff --git a/routers/api/actions/runner/runner.go b/routers/api/actions/runner/runner.go
index 3299eaf1e..07657c912 100644
--- a/routers/api/actions/runner/runner.go
+++ b/routers/api/actions/runner/runner.go
@@ -150,7 +150,7 @@ func (s *Service) UpdateTask(
}
if err := actions_service.CreateCommitStatus(ctx, task.Job); err != nil {
- log.Error("Update commit status failed: %v", err)
+ log.Error("Update commit status for job %v failed: %v", task.Job.ID, err)
// go on
}
diff --git a/routers/web/repo/actions/view.go b/routers/web/repo/actions/view.go
index 556970936..35b99d577 100644
--- a/routers/web/repo/actions/view.go
+++ b/routers/web/repo/actions/view.go
@@ -15,6 +15,7 @@ import (
"code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/modules/actions"
context_module "code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
@@ -214,15 +215,18 @@ func Rerun(ctx *context_module.Context) {
job.Stopped = 0
if err := db.WithTx(ctx, func(ctx context.Context) error {
- if _, err := actions_model.UpdateRunJob(ctx, job, builder.Eq{"status": status}, "task_id", "status", "started", "stopped"); err != nil {
- return err
- }
- return actions_service.CreateCommitStatus(ctx, job)
+ _, err := actions_model.UpdateRunJob(ctx, job, builder.Eq{"status": status}, "task_id", "status", "started", "stopped")
+ return err
}); err != nil {
ctx.Error(http.StatusInternalServerError, err.Error())
return
}
+ if err := actions_service.CreateCommitStatus(ctx, job); err != nil {
+ log.Error("Update commit status for job %v failed: %v", job.ID, err)
+ // go on
+ }
+
ctx.JSON(http.StatusOK, struct{}{})
}
@@ -255,9 +259,6 @@ func Cancel(ctx *context_module.Context) {
if err := actions_model.StopTask(ctx, job.TaskID, actions_model.StatusCancelled); err != nil {
return err
}
- if err := actions_service.CreateCommitStatus(ctx, job); err != nil {
- return err
- }
}
return nil
}); err != nil {
@@ -265,6 +266,13 @@ func Cancel(ctx *context_module.Context) {
return
}
+ for _, job := range jobs {
+ if err := actions_service.CreateCommitStatus(ctx, job); err != nil {
+ log.Error("Update commit status for job %v failed: %v", job.ID, err)
+ // go on
+ }
+ }
+
ctx.JSON(http.StatusOK, struct{}{})
}