From 0f5aab0c1aee1955944d374eda95b3c95b94bd58 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Fri, 18 Nov 2022 12:26:34 +0800 Subject: [PATCH] chore: remove Result from task and step --- models/bots/run.go | 2 +- models/bots/status.go | 19 ++++++++++++++++--- models/bots/task.go | 23 ++++++++++------------- models/bots/task_step.go | 6 ++---- models/migrations/v-dev.go | 6 ++---- routers/api/bots/runner/runner.go | 4 ++-- 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/models/bots/run.go b/models/bots/run.go index 428696f293..66715bd647 100644 --- a/models/bots/run.go +++ b/models/bots/run.go @@ -148,7 +148,7 @@ func InsertRun(run *Run, jobs []*jobparser.SingleWorkflow) error { } run.Index = index - if run.Status == StatusUnknown { + if run.Status.IsUnknown() { run.Status = StatusWaiting } diff --git a/models/bots/status.go b/models/bots/status.go index 626b45f5d0..ae39cfa80a 100644 --- a/models/bots/status.go +++ b/models/bots/status.go @@ -4,6 +4,8 @@ package bots +import runnerv1 "gitea.com/gitea/proto-go/runner/v1" + // Status represents the status of Run, RunJob, Task, or TaskStep type Status int @@ -13,9 +15,9 @@ const ( StatusFailure // 2, consistent with runnerv1.Result_RESULT_FAILURE StatusCancelled // 3, consistent with runnerv1.Result_RESULT_CANCELLED StatusSkipped // 4, consistent with runnerv1.Result_RESULT_SKIPPED - StatusWaiting // 5 - StatusRunning // 6 - StatusBlocked // 7 + StatusWaiting // 5, isn't a runnerv1.Result + StatusRunning // 6, isn't a runnerv1.Result + StatusBlocked // 7, isn't a runnerv1.Result ) // String returns the string name of the Status @@ -33,6 +35,10 @@ func (s Status) HasRun() bool { return s.In(StatusSuccess, StatusFailure) } +func (s Status) IsUnknown() bool { + return s == StatusUnknown +} + func (s Status) IsSuccess() bool { return s == StatusSuccess } @@ -66,6 +72,13 @@ func (s Status) In(statuses ...Status) bool { return false } +func (s Status) AsResult() runnerv1.Result { + if s.IsDone() { + return runnerv1.Result(s) + } + return runnerv1.Result_RESULT_UNSPECIFIED +} + var statusNames = map[Status]string{ StatusUnknown: "unknown", StatusWaiting: "waiting", diff --git a/models/bots/task.go b/models/bots/task.go index 26631dc885..91b15cc9aa 100644 --- a/models/bots/task.go +++ b/models/bots/task.go @@ -38,8 +38,7 @@ type Task struct { Job *RunJob `xorm:"-"` Steps []*TaskStep `xorm:"-"` Attempt int64 - RunnerID int64 `xorm:"index"` - Result runnerv1.Result + RunnerID int64 `xorm:"index"` Status Status `xorm:"index"` Started timeutil.TimeStamp `xorm:"index"` Stopped timeutil.TimeStamp @@ -435,9 +434,8 @@ func UpdateTaskByState(state *runnerv1.TaskState) (*Task, error) { return nil, err } - task.Result = state.Result - if task.Result != runnerv1.Result_RESULT_UNSPECIFIED { - task.Status = Status(task.Result) + if state.Result != runnerv1.Result_RESULT_UNSPECIFIED { + task.Status = Status(state.Result) task.Stopped = timeutil.TimeStamp(state.StoppedAt.AsTime().Unix()) if _, err := UpdateRunJob(ctx, &RunJob{ ID: task.JobID, @@ -458,15 +456,16 @@ func UpdateTaskByState(state *runnerv1.TaskState) (*Task, error) { prevStepDone := true for _, step := range task.Steps { + var result runnerv1.Result if v, ok := stepStates[step.Number]; ok { - step.Result = v.Result + result = v.Result step.LogIndex = v.LogIndex step.LogLength = v.LogLength step.Started = convertTimestamp(v.StartedAt) step.Stopped = convertTimestamp(v.StoppedAt) } - if step.Result != runnerv1.Result_RESULT_UNSPECIFIED { - step.Status = Status(step.Result) + if result != runnerv1.Result_RESULT_UNSPECIFIED { + step.Status = Status(result) prevStepDone = true } else if prevStepDone { step.Status = StatusRunning @@ -494,9 +493,8 @@ func StopTask(ctx context.Context, task *Task, result runnerv1.Result) (*Task, e e := db.GetEngine(ctx) now := timeutil.TimeStampNow() - task.Result = result - if task.Result != runnerv1.Result_RESULT_UNSPECIFIED { - task.Status = Status(task.Result) + if result != runnerv1.Result_RESULT_UNSPECIFIED { + task.Status = Status(result) task.Stopped = now if _, err := UpdateRunJob(ctx, &RunJob{ ID: task.JobID, @@ -516,8 +514,7 @@ func StopTask(ctx context.Context, task *Task, result runnerv1.Result) (*Task, e } for _, step := range task.Steps { - if step.Result == runnerv1.Result_RESULT_UNSPECIFIED { - step.Result = result + if !step.Status.IsDone() { step.Status = Status(result) if step.Started == 0 { step.Started = now diff --git a/models/bots/task_step.go b/models/bots/task_step.go index ba24fc34d7..31f2b76ec7 100644 --- a/models/bots/task_step.go +++ b/models/bots/task_step.go @@ -10,16 +10,14 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" - runnerv1 "gitea.com/gitea/proto-go/runner/v1" ) // TaskStep represents a step of Task type TaskStep struct { ID int64 Name string - TaskID int64 `xorm:"index unique(task_number)"` - Number int64 `xorm:"index unique(task_number)"` - Result runnerv1.Result + TaskID int64 `xorm:"index unique(task_number)"` + Number int64 `xorm:"index unique(task_number)"` Status Status `xorm:"index"` LogIndex int64 LogLength int64 diff --git a/models/migrations/v-dev.go b/models/migrations/v-dev.go index b4f3b4d91d..485b012f92 100644 --- a/models/migrations/v-dev.go +++ b/models/migrations/v-dev.go @@ -104,8 +104,7 @@ func addBotTables(x *xorm.Engine) error { ID int64 JobID int64 Attempt int64 - RunnerID int64 `xorm:"index"` - Result int32 + RunnerID int64 `xorm:"index"` Status int `xorm:"index"` Started timeutil.TimeStamp `xorm:"index"` Stopped timeutil.TimeStamp @@ -134,8 +133,7 @@ func addBotTables(x *xorm.Engine) error { Name string TaskID int64 `xorm:"index unique(task_number)"` Number int64 `xorm:"index unique(task_number)"` - Result int32 - Status int `xorm:"index"` + Status int `xorm:"index"` LogIndex int64 LogLength int64 Started timeutil.TimeStamp diff --git a/routers/api/bots/runner/runner.go b/routers/api/bots/runner/runner.go index 850d54f161..4d373a7a42 100644 --- a/routers/api/bots/runner/runner.go +++ b/routers/api/bots/runner/runner.go @@ -165,11 +165,11 @@ func (s *Service) UpdateTask( if err != nil { return nil, status.Errorf(codes.Internal, "can't find the task: %v", err) } - if task.Result == runnerv1.Result_RESULT_CANCELLED { + if task.Status.IsCancelled() { return connect.NewResponse(&runnerv1.UpdateTaskResponse{ State: &runnerv1.TaskState{ Id: req.Msg.State.Id, - Result: task.Result, + Result: task.Status.AsResult(), }, }), nil }