completed phase 2b
This commit is contained in:
@@ -34,5 +34,8 @@ func Run(engine *xorm.Engine) error {
|
||||
if err := Run007(engine); err != nil {
|
||||
return err
|
||||
}
|
||||
return Run008(engine)
|
||||
if err := Run008(engine); err != nil {
|
||||
return err
|
||||
}
|
||||
return Run009(engine)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"github.com/forgeo/forgebucket/internal/models"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
func Run009(engine *xorm.Engine) error {
|
||||
return engine.Sync2(
|
||||
&models.Pipeline{},
|
||||
&models.PipelineRun{},
|
||||
&models.PipelineJob{},
|
||||
&models.PipelineStep{},
|
||||
&models.PipelineStepLog{},
|
||||
&models.Runner{},
|
||||
&models.Artifact{},
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// Pipeline represents a workflow definition file stored in the repository.
|
||||
type Pipeline struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
RepoID int64 `xorm:"'repo_id' notnull index" json:"repoId"`
|
||||
Name string `xorm:"'name' varchar(255)" json:"name"`
|
||||
FilePath string `xorm:"'file_path' varchar(500)" json:"filePath"`
|
||||
CreatedAt time.Time `xorm:"'created_at' created" json:"createdAt"`
|
||||
UpdatedAt time.Time `xorm:"'updated_at' updated" json:"updatedAt"`
|
||||
}
|
||||
|
||||
// PipelineRun is a single execution of a Pipeline.
|
||||
type PipelineRun struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
PipelineID int64 `xorm:"'pipeline_id' notnull index" json:"pipelineId"`
|
||||
RepoID int64 `xorm:"'repo_id' notnull index" json:"repoId"`
|
||||
TriggerRef string `xorm:"'trigger_ref' varchar(255)" json:"triggerRef"` // refs/heads/main
|
||||
TriggerSHA string `xorm:"'trigger_sha' varchar(40)" json:"triggerSha"`
|
||||
TriggeredBy string `xorm:"'triggered_by' varchar(64)" json:"triggeredBy"`
|
||||
Status string `xorm:"'status' varchar(20)" json:"status"` // queued/running/succeeded/failed/cancelled
|
||||
StartedAt *time.Time `xorm:"'started_at'" json:"startedAt"`
|
||||
FinishedAt *time.Time `xorm:"'finished_at'" json:"finishedAt"`
|
||||
CreatedAt time.Time `xorm:"'created_at' created" json:"createdAt"`
|
||||
}
|
||||
|
||||
// PipelineJob is a single node in the DAG for a PipelineRun.
|
||||
type PipelineJob struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
RunID int64 `xorm:"'run_id' notnull index" json:"runId"`
|
||||
Name string `xorm:"'name' varchar(255)" json:"name"`
|
||||
Image string `xorm:"'image' varchar(500)" json:"image"` // Docker image
|
||||
Needs string `xorm:"'needs' text" json:"needs"` // JSON array of dependency job names
|
||||
Status string `xorm:"'status' varchar(20)" json:"status"`
|
||||
StartedAt *time.Time `xorm:"'started_at'" json:"startedAt"`
|
||||
FinishedAt *time.Time `xorm:"'finished_at'" json:"finishedAt"`
|
||||
CreatedAt time.Time `xorm:"'created_at' created" json:"createdAt"`
|
||||
}
|
||||
|
||||
// PipelineStep is a single command within a PipelineJob.
|
||||
type PipelineStep struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
JobID int64 `xorm:"'job_id' notnull index" json:"jobId"`
|
||||
Seq int `xorm:"'seq'" json:"seq"` // execution order within the job
|
||||
Name string `xorm:"'name' varchar(255)" json:"name"`
|
||||
RunCmd string `xorm:"'run_cmd' text" json:"runCmd"` // shell command (run:)
|
||||
UsesAction string `xorm:"'uses_action' varchar(255)" json:"usesAction"` // built-in action (uses:)
|
||||
Status string `xorm:"'status' varchar(20)" json:"status"`
|
||||
ExitCode int `xorm:"'exit_code'" json:"exitCode"`
|
||||
StartedAt *time.Time `xorm:"'started_at'" json:"startedAt"`
|
||||
FinishedAt *time.Time `xorm:"'finished_at'" json:"finishedAt"`
|
||||
}
|
||||
|
||||
// PipelineStepLog stores append-only log output for a step.
|
||||
type PipelineStepLog struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
StepID int64 `xorm:"'step_id' notnull index" json:"stepId"`
|
||||
ChunkIndex int `xorm:"'chunk_index'" json:"chunkIndex"`
|
||||
Content string `xorm:"'content' text" json:"content"`
|
||||
CreatedAt time.Time `xorm:"'created_at' created" json:"createdAt"`
|
||||
}
|
||||
|
||||
// Runner is a registered execution backend.
|
||||
type Runner struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
Name string `xorm:"'name' unique varchar(100)" json:"name"`
|
||||
Labels string `xorm:"'labels' text" json:"labels"` // JSON array of capability labels
|
||||
Status string `xorm:"'status' varchar(20)" json:"status"` // idle/busy/offline
|
||||
TokenHash string `xorm:"'token_hash' varchar(64)" json:"-"`
|
||||
LastSeenAt time.Time `xorm:"'last_seen_at'" json:"lastSeenAt"`
|
||||
CreatedAt time.Time `xorm:"'created_at' created" json:"createdAt"`
|
||||
}
|
||||
|
||||
// Artifact is a file produced by a PipelineRun and stored for later download.
|
||||
type Artifact struct {
|
||||
ID int64 `xorm:"'id' pk autoincr" json:"id"`
|
||||
RunID int64 `xorm:"'run_id' notnull index" json:"runId"`
|
||||
RepoID int64 `xorm:"'repo_id' notnull index" json:"repoId"`
|
||||
Name string `xorm:"'name' varchar(255)" json:"name"`
|
||||
StoragePath string `xorm:"'storage_path' varchar(500)" json:"-"`
|
||||
Size int64 `xorm:"'size'" json:"size"`
|
||||
ContentType string `xorm:"'content_type' varchar(100)" json:"contentType"`
|
||||
CreatedAt time.Time `xorm:"'created_at' created" json:"createdAt"`
|
||||
}
|
||||
Reference in New Issue
Block a user