2022-11-25 17:48:45 +08:00

140 lines
4.3 KiB
Go

// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package migrations
import (
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/timeutil"
"xorm.io/xorm"
)
func addBotTables(x *xorm.Engine) error {
type BotsRunner struct {
ID int64
UUID string `xorm:"CHAR(36) UNIQUE"`
Name string `xorm:"VARCHAR(32) UNIQUE"`
OwnerID int64 `xorm:"index"` // org level runner, 0 means system
RepoID int64 `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
Description string `xorm:"TEXT"`
Base int // 0 native 1 docker 2 virtual machine
RepoRange string // glob match which repositories could use this runner
Token string `xorm:"CHAR(36) UNIQUE"`
// instance status (idle, active, offline)
Status int32
// Store OS and Artch.
AgentLabels []string
// Store custom labes use defined.
CustomLabels []string
LastOnline timeutil.TimeStamp `xorm:"index"`
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
Deleted timeutil.TimeStamp `xorm:"deleted"`
}
type BotsRunnerToken struct {
ID int64
Token string `xorm:"CHAR(36) UNIQUE"`
OwnerID int64 `xorm:"index"` // org level runner, 0 means system
RepoID int64 `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
IsActive bool
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
Deleted timeutil.TimeStamp `xorm:"deleted"`
}
type BotsRun struct {
ID int64
Title string
RepoID int64 `xorm:"index unique(repo_index)"`
WorkflowID string `xorm:"index"` // the name of workflow file
Index int64 `xorm:"index unique(repo_index)"` // a unique number for each run of a repository
TriggerUserID int64
Ref string
CommitSHA string
Event string
Token string // token for this task
Grant string // permissions for this task
EventPayload string `xorm:"LONGTEXT"`
Status int `xorm:"index"`
Started timeutil.TimeStamp
Stopped timeutil.TimeStamp
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
}
type BotsRunJob struct {
ID int64
RunID int64 `xorm:"index"`
Name string
Ready bool // ready to be executed
Attempt int64
WorkflowPayload []byte
JobID string // job id in workflow, not job's id
Needs []int64 `xorm:"JSON TEXT"`
RunsOn []string `xorm:"JSON TEXT"`
TaskID int64 // the latest task of the job
Status int `xorm:"index"`
Started timeutil.TimeStamp
Stopped timeutil.TimeStamp
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
}
type Repository struct {
NumRuns int `xorm:"NOT NULL DEFAULT 0"`
NumClosedRuns int `xorm:"NOT NULL DEFAULT 0"`
}
type BotsRunIndex db.ResourceIndex
type BotsTask struct {
ID int64
JobID int64
Attempt int64
RunnerID int64 `xorm:"index"`
Result int32
Status int `xorm:"index"`
Started timeutil.TimeStamp
Stopped timeutil.TimeStamp
LogFilename string // file name of log
LogInStorage bool // read log from database or from storage
LogLength int64 // lines count
LogSize int64 // blob size
LogIndexes *[]int64 `xorm:"BLOB"` // line number to offset
LogExpired bool
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
}
type BotsTaskStep struct {
ID int64
Name string
TaskID int64 `xorm:"index unique(task_number)"`
Number int64 `xorm:"index unique(task_number)"`
Result int32
Status int `xorm:"index"`
LogIndex int64
LogLength int64
Started timeutil.TimeStamp
Stopped timeutil.TimeStamp
Created timeutil.TimeStamp `xorm:"created"`
Updated timeutil.TimeStamp `xorm:"updated"`
}
return x.Sync2(
new(BotsRunner),
new(BotsRunnerToken),
new(BotsRun),
new(BotsRunJob),
new(Repository),
new(BotsRunIndex),
new(BotsTask),
new(BotsTaskStep),
)
}