mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-23 13:55:53 +02:00
refactor: move build status to core package
This commit is contained in:
parent
ea0cf8515e
commit
1148903d79
@ -16,6 +16,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
"code.gitea.io/gitea/routers/api/bots/core"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
@ -26,39 +27,6 @@ func init() {
|
|||||||
db.RegisterModel(new(BuildIndex))
|
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
|
// Build represnets bot build task
|
||||||
type Build struct {
|
type Build struct {
|
||||||
ID int64
|
ID int64
|
||||||
@ -75,7 +43,7 @@ type Build struct {
|
|||||||
Grant string // permissions for this task
|
Grant string // permissions for this task
|
||||||
EventPayload string `xorm:"LONGTEXT"`
|
EventPayload string `xorm:"LONGTEXT"`
|
||||||
RunnerID int64 `xorm:"index"`
|
RunnerID int64 `xorm:"index"`
|
||||||
Status BuildStatus `xorm:"index"`
|
Status core.BuildStatus `xorm:"index"`
|
||||||
Created timeutil.TimeStamp `xorm:"created"`
|
Created timeutil.TimeStamp `xorm:"created"`
|
||||||
StartTime timeutil.TimeStamp
|
StartTime timeutil.TimeStamp
|
||||||
EndTime timeutil.TimeStamp
|
EndTime timeutil.TimeStamp
|
||||||
@ -102,7 +70,7 @@ func updateRepoBuildsNumbers(ctx context.Context, repo *repo_model.Repository) e
|
|||||||
Where(builder.Eq{
|
Where(builder.Eq{
|
||||||
"repo_id": repo.ID,
|
"repo_id": repo.ID,
|
||||||
}.And(
|
}.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
|
// 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 == "" {
|
if t.UUID == "" {
|
||||||
t.UUID = uuid.New().String()
|
t.UUID = uuid.New().String()
|
||||||
}
|
}
|
||||||
@ -196,7 +164,7 @@ func GetCurBuildByID(runnerID int64) (*Build, error) {
|
|||||||
var builds []Build
|
var builds []Build
|
||||||
err := db.GetEngine(db.DefaultContext).
|
err := db.GetEngine(db.DefaultContext).
|
||||||
Where("runner_id=?", runnerID).
|
Where("runner_id=?", runnerID).
|
||||||
And("status=?", StatusPending).
|
And("status=?", core.StatusPending).
|
||||||
Asc("created").
|
Asc("created").
|
||||||
Find(&builds)
|
Find(&builds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -263,9 +231,9 @@ func (opts FindBuildOptions) toConds() builder.Cond {
|
|||||||
cond = cond.And(builder.Eq{"repo_id": opts.RepoID})
|
cond = cond.And(builder.Eq{"repo_id": opts.RepoID})
|
||||||
}
|
}
|
||||||
if opts.IsClosed.IsTrue() {
|
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() {
|
} 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
|
return cond
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
"code.gitea.io/gitea/routers/api/bots/core"
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -24,7 +25,7 @@ type BuildStage struct {
|
|||||||
OS string
|
OS string
|
||||||
Arch string
|
Arch string
|
||||||
Filename string
|
Filename string
|
||||||
Status BuildStatus
|
Status core.BuildStatus
|
||||||
Started timeutil.TimeStamp
|
Started timeutil.TimeStamp
|
||||||
Stopped timeutil.TimeStamp
|
Stopped timeutil.TimeStamp
|
||||||
LogToFile bool // read log from database or from storage
|
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})
|
cond = cond.And(builder.Eq{"build_id": opts.BuildID})
|
||||||
}
|
}
|
||||||
if opts.IsClosed.IsTrue() {
|
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() {
|
} 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
|
return cond
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ package bots
|
|||||||
import (
|
import (
|
||||||
"code.gitea.io/gitea/models/db"
|
"code.gitea.io/gitea/models/db"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
|
"code.gitea.io/gitea/routers/api/bots/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BuildStep struct {
|
type BuildStep struct {
|
||||||
@ -16,7 +17,7 @@ type BuildStep struct {
|
|||||||
Name string
|
Name string
|
||||||
Kind string
|
Kind string
|
||||||
Type string
|
Type string
|
||||||
Status BuildStatus
|
Status core.BuildStatus
|
||||||
Started timeutil.TimeStamp
|
Started timeutil.TimeStamp
|
||||||
Stopped timeutil.TimeStamp
|
Stopped timeutil.TimeStamp
|
||||||
Created timeutil.TimeStamp `xorm:"created"`
|
Created timeutil.TimeStamp `xorm:"created"`
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/repository"
|
"code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
|
"code.gitea.io/gitea/routers/api/bots/core"
|
||||||
bots_service "code.gitea.io/gitea/services/bots"
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
workflowsStatuses := make(map[string]map[string]bots_model.BuildStatus)
|
workflowsStatuses := make(map[string]map[string]core.BuildStatus)
|
||||||
for i, entry := range matchedEntries {
|
for i, entry := range matchedEntries {
|
||||||
taskStatuses := make(map[string]bots_model.BuildStatus)
|
taskStatuses := make(map[string]core.BuildStatus)
|
||||||
for k := range jobs[i] {
|
for k := range jobs[i] {
|
||||||
taskStatuses[k] = bots_model.StatusPending
|
taskStatuses[k] = core.StatusPending
|
||||||
}
|
}
|
||||||
workflowsStatuses[entry.Name()] = taskStatuses
|
workflowsStatuses[entry.Name()] = taskStatuses
|
||||||
}
|
}
|
||||||
@ -98,7 +99,7 @@ func notify(repo *repo_model.Repository, doer *user_model.User, payload, ref str
|
|||||||
TriggerUserID: doer.ID,
|
TriggerUserID: doer.ID,
|
||||||
Event: evt,
|
Event: evt,
|
||||||
EventPayload: payload,
|
EventPayload: payload,
|
||||||
Status: bots_model.StatusPending,
|
Status: core.StatusPending,
|
||||||
Ref: ref,
|
Ref: ref,
|
||||||
CommitSHA: commit.ID.String(),
|
CommitSHA: commit.ID.String(),
|
||||||
}
|
}
|
||||||
|
34
routers/api/bots/core/status.go
Normal file
34
routers/api/bots/core/status.go
Normal 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
|
||||||
|
}
|
@ -100,7 +100,7 @@ func (q *queue) signal(ctx context.Context) error {
|
|||||||
q.Lock()
|
q.Lock()
|
||||||
defer q.Unlock()
|
defer q.Unlock()
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
if item.Status == bots.StatusRunning {
|
if item.Status == core.StatusRunning {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if item.Machine != "" {
|
if item.Machine != "" {
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/json"
|
"code.gitea.io/gitea/modules/json"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/timeutil"
|
"code.gitea.io/gitea/modules/timeutil"
|
||||||
|
"code.gitea.io/gitea/routers/api/bots/core"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"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"}
|
cols := []string{"status", "end_time"}
|
||||||
if msg.ErrCode == 0 {
|
if msg.ErrCode == 0 {
|
||||||
build.Status = bots_model.StatusPassing
|
build.Status = core.StatusPassing
|
||||||
} else {
|
} else {
|
||||||
build.Status = bots_model.StatusFailing
|
build.Status = core.StatusFailing
|
||||||
}
|
}
|
||||||
build.EndTime = timeutil.TimeStampNow()
|
build.EndTime = timeutil.TimeStampNow()
|
||||||
if err := bots_model.UpdateBuild(build, cols...); err != nil {
|
if err := bots_model.UpdateBuild(build, cols...); err != nil {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user