diff --git a/models/bots/build.go b/models/bots/build.go index c6d8185487..f80db0c2e2 100644 --- a/models/bots/build.go +++ b/models/bots/build.go @@ -16,6 +16,7 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/routers/api/bots/core" "github.com/google/uuid" "xorm.io/builder" @@ -26,39 +27,6 @@ func init() { db.RegisterModel(new(BuildIndex)) } -// BuildStatus represents a build status -type BuildStatus string - -// enumerate all the statuses of bot build -const ( - StatusSkipped BuildStatus = "skipped" - StatusBlocked BuildStatus = "blocked" - StatusDeclined BuildStatus = "declined" - StatusWaiting BuildStatus = "waiting_on_dependencies" - StatusPending BuildStatus = "pending" - StatusRunning BuildStatus = "running" - StatusPassing BuildStatus = "success" - StatusFailing BuildStatus = "failure" - StatusKilled BuildStatus = "killed" - StatusError BuildStatus = "error" -) - -func (status BuildStatus) IsPending() bool { - return status == StatusPending -} - -func (status BuildStatus) IsRunning() bool { - return status == StatusRunning -} - -func (status BuildStatus) IsFailed() bool { - return status == StatusFailing || status == StatusKilled || status == StatusError -} - -func (status BuildStatus) IsSuccess() bool { - return status == StatusPassing -} - // Build represnets bot build task type Build struct { ID int64 @@ -75,7 +43,7 @@ type Build struct { Grant string // permissions for this task EventPayload string `xorm:"LONGTEXT"` RunnerID int64 `xorm:"index"` - Status BuildStatus `xorm:"index"` + Status core.BuildStatus `xorm:"index"` Created timeutil.TimeStamp `xorm:"created"` StartTime timeutil.TimeStamp EndTime timeutil.TimeStamp @@ -102,7 +70,7 @@ func updateRepoBuildsNumbers(ctx context.Context, repo *repo_model.Repository) e Where(builder.Eq{ "repo_id": repo.ID, }.And( - builder.In("status", StatusFailing, StatusKilled, StatusPassing), + builder.In("status", core.StatusFailing, core.StatusKilled, core.StatusPassing), ), ), ). @@ -111,7 +79,7 @@ func updateRepoBuildsNumbers(ctx context.Context, repo *repo_model.Repository) e } // InsertBuild inserts a bot build task -func InsertBuild(t *Build, workflowsStatuses map[string]map[string]BuildStatus) error { +func InsertBuild(t *Build, workflowsStatuses map[string]map[string]core.BuildStatus) error { if t.UUID == "" { t.UUID = uuid.New().String() } @@ -196,7 +164,7 @@ func GetCurBuildByID(runnerID int64) (*Build, error) { var builds []Build err := db.GetEngine(db.DefaultContext). Where("runner_id=?", runnerID). - And("status=?", StatusPending). + And("status=?", core.StatusPending). Asc("created"). Find(&builds) if err != nil { @@ -263,9 +231,9 @@ func (opts FindBuildOptions) toConds() builder.Cond { cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) } if opts.IsClosed.IsTrue() { - cond = cond.And(builder.Expr("status IN (?,?,?,?)", StatusError, StatusFailing, StatusPassing)) + cond = cond.And(builder.Expr("status IN (?,?,?,?)", core.StatusError, core.StatusFailing, core.StatusPassing)) } else if opts.IsClosed.IsFalse() { - cond = cond.And(builder.Expr("status IN (?,?,?)", StatusPending, StatusRunning)) + cond = cond.And(builder.Expr("status IN (?,?,?)", core.StatusPending, core.StatusRunning)) } return cond } diff --git a/models/bots/build_stage.go b/models/bots/build_stage.go index 1f2f15f9bb..0135959f80 100644 --- a/models/bots/build_stage.go +++ b/models/bots/build_stage.go @@ -10,6 +10,7 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/routers/api/bots/core" "xorm.io/builder" ) @@ -24,7 +25,7 @@ type BuildStage struct { OS string Arch string Filename string - Status BuildStatus + Status core.BuildStatus Started timeutil.TimeStamp Stopped timeutil.TimeStamp LogToFile bool // read log from database or from storage @@ -51,9 +52,9 @@ func (opts FindStageOptions) toConds() builder.Cond { cond = cond.And(builder.Eq{"build_id": opts.BuildID}) } if opts.IsClosed.IsTrue() { - cond = cond.And(builder.Expr("status IN (?,?,?,?)", StatusError, StatusFailing, StatusPassing)) + cond = cond.And(builder.Expr("status IN (?,?,?,?)", core.StatusError, core.StatusFailing, core.StatusPassing)) } else if opts.IsClosed.IsFalse() { - cond = cond.And(builder.Expr("status IN (?,?,?)", StatusPending, StatusRunning)) + cond = cond.And(builder.Expr("status IN (?,?,?)", core.StatusPending, core.StatusRunning)) } return cond } diff --git a/models/bots/build_step.go b/models/bots/build_step.go index 050ddb29ef..15da724580 100644 --- a/models/bots/build_step.go +++ b/models/bots/build_step.go @@ -7,6 +7,7 @@ package bots import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" + "code.gitea.io/gitea/routers/api/bots/core" ) type BuildStep struct { @@ -16,7 +17,7 @@ type BuildStep struct { Name string Kind string Type string - Status BuildStatus + Status core.BuildStatus Started timeutil.TimeStamp Stopped timeutil.TimeStamp Created timeutil.TimeStamp `xorm:"created"` diff --git a/modules/notification/bots/bots.go b/modules/notification/bots/bots.go index 044fadb1cc..9fab742be8 100644 --- a/modules/notification/bots/bots.go +++ b/modules/notification/bots/bots.go @@ -26,6 +26,7 @@ import ( "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/routers/api/bots/core" bots_service "code.gitea.io/gitea/services/bots" ) @@ -83,11 +84,11 @@ func notify(repo *repo_model.Repository, doer *user_model.User, payload, ref str return } - workflowsStatuses := make(map[string]map[string]bots_model.BuildStatus) + workflowsStatuses := make(map[string]map[string]core.BuildStatus) for i, entry := range matchedEntries { - taskStatuses := make(map[string]bots_model.BuildStatus) + taskStatuses := make(map[string]core.BuildStatus) for k := range jobs[i] { - taskStatuses[k] = bots_model.StatusPending + taskStatuses[k] = core.StatusPending } workflowsStatuses[entry.Name()] = taskStatuses } @@ -98,7 +99,7 @@ func notify(repo *repo_model.Repository, doer *user_model.User, payload, ref str TriggerUserID: doer.ID, Event: evt, EventPayload: payload, - Status: bots_model.StatusPending, + Status: core.StatusPending, Ref: ref, CommitSHA: commit.ID.String(), } diff --git a/routers/api/bots/core/status.go b/routers/api/bots/core/status.go new file mode 100644 index 0000000000..70aacb3747 --- /dev/null +++ b/routers/api/bots/core/status.go @@ -0,0 +1,34 @@ +package core + +// BuildStatus represents a build status +type BuildStatus string + +// enumerate all the statuses of bot build +const ( + StatusSkipped BuildStatus = "skipped" + StatusBlocked BuildStatus = "blocked" + StatusDeclined BuildStatus = "declined" + StatusWaiting BuildStatus = "waiting_on_dependencies" + StatusPending BuildStatus = "pending" + StatusRunning BuildStatus = "running" + StatusPassing BuildStatus = "success" + StatusFailing BuildStatus = "failure" + StatusKilled BuildStatus = "killed" + StatusError BuildStatus = "error" +) + +func (status BuildStatus) IsPending() bool { + return status == StatusPending +} + +func (status BuildStatus) IsRunning() bool { + return status == StatusRunning +} + +func (status BuildStatus) IsFailed() bool { + return status == StatusFailing || status == StatusKilled || status == StatusError +} + +func (status BuildStatus) IsSuccess() bool { + return status == StatusPassing +} diff --git a/routers/api/bots/scheduler/queue/queue.go b/routers/api/bots/scheduler/queue/queue.go index d8ab0c15ae..fd135d91bb 100644 --- a/routers/api/bots/scheduler/queue/queue.go +++ b/routers/api/bots/scheduler/queue/queue.go @@ -100,7 +100,7 @@ func (q *queue) signal(ctx context.Context) error { q.Lock() defer q.Unlock() for _, item := range items { - if item.Status == bots.StatusRunning { + if item.Status == core.StatusRunning { continue } if item.Machine != "" { diff --git a/routers/api/bots/socket.go b/routers/api/bots/socket.go index af1563b9a2..1799fd0fa7 100644 --- a/routers/api/bots/socket.go +++ b/routers/api/bots/socket.go @@ -15,6 +15,7 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/timeutil" + "code.gitea.io/gitea/routers/api/bots/core" "github.com/gorilla/websocket" ) @@ -116,9 +117,9 @@ func handleVersion1(r *http.Request, c *websocket.Conn, mt int, message []byte, } cols := []string{"status", "end_time"} if msg.ErrCode == 0 { - build.Status = bots_model.StatusPassing + build.Status = core.StatusPassing } else { - build.Status = bots_model.StatusFailing + build.Status = core.StatusFailing } build.EndTime = timeutil.TimeStampNow() if err := bots_model.UpdateBuild(build, cols...); err != nil {