refactor: move build status to core package

This commit is contained in:
Bo-Yi.Wu 2022-09-03 16:48:03 +08:00 committed by Jason Song
parent ea0cf8515e
commit 1148903d79
7 changed files with 56 additions and 50 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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"`

View File

@ -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(),
}

View File

@ -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
}

View File

@ -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 != "" {

View File

@ -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 {