diff --git a/models/bots/run.go b/models/bots/run.go index 103d03bd59..1250089430 100644 --- a/models/bots/run.go +++ b/models/bots/run.go @@ -16,10 +16,10 @@ import ( "code.gitea.io/gitea/models/webhook" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" - "xorm.io/builder" "github.com/nektos/act/pkg/jobparser" "golang.org/x/exp/slices" + "xorm.io/builder" ) // Run represents a run of a workflow file @@ -28,6 +28,7 @@ type Run struct { Title string RepoID int64 `xorm:"index unique(repo_index)"` Repo *repo_model.Repository `xorm:"-"` + OwnerID int64 `xorm:"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 @@ -175,6 +176,9 @@ func InsertRun(run *Run, jobs []*jobparser.SingleWorkflow) error { } runJobs = append(runJobs, &RunJob{ RunID: run.ID, + RepoID: run.RepoID, + OwnerID: run.OwnerID, + CommitSHA: run.CommitSHA, Name: job.Name, WorkflowPayload: payload, JobID: id, diff --git a/models/bots/run_job.go b/models/bots/run_job.go index 7162b18116..3ccba70ddf 100644 --- a/models/bots/run_job.go +++ b/models/bots/run_job.go @@ -11,16 +11,19 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" - "xorm.io/builder" "golang.org/x/exp/slices" + "xorm.io/builder" ) // RunJob represents a job of a run type RunJob struct { ID int64 - RunID int64 `xorm:"index"` - Run *Run `xorm:"-"` + RunID int64 `xorm:"index"` + Run *Run `xorm:"-"` + RepoID int64 `xorm:"index"` + OwnerID int64 `xorm:"index"` + CommitSHA string `xorm:"index"` Name string Attempt int64 WorkflowPayload []byte diff --git a/models/bots/run_job_list.go b/models/bots/run_job_list.go index 292774a42b..bd9c714fcc 100644 --- a/models/bots/run_job_list.go +++ b/models/bots/run_job_list.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" + "xorm.io/builder" ) @@ -60,6 +61,9 @@ func (jobs RunJobList) LoadAttributes(ctx context.Context, withRepo bool) error type FindRunJobOptions struct { db.ListOptions RunID int64 + RepoID int64 + OwnerID int64 + CommitSHA string Statuses []Status UpdatedBefore timeutil.TimeStamp } @@ -69,6 +73,15 @@ func (opts FindRunJobOptions) toConds() builder.Cond { if opts.RunID > 0 { cond = cond.And(builder.Eq{"run_id": opts.RunID}) } + if opts.RepoID > 0 { + cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) + } + if opts.OwnerID > 0 { + cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) + } + if opts.CommitSHA != "" { + cond = cond.And(builder.Eq{"commit_sha": opts.CommitSHA}) + } if len(opts.Statuses) > 0 { cond = cond.And(builder.In("status", opts.Statuses)) } diff --git a/models/bots/run_list.go b/models/bots/run_list.go index 3eefa4f0c9..147950d5b0 100644 --- a/models/bots/run_list.go +++ b/models/bots/run_list.go @@ -11,6 +11,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/util" + "xorm.io/builder" ) @@ -68,6 +69,7 @@ func (runs RunList) LoadRepos() error { type FindRunOptions struct { db.ListOptions RepoID int64 + OwnerID int64 IsClosed util.OptionalBool WorkflowFileName string } @@ -77,6 +79,9 @@ func (opts FindRunOptions) toConds() builder.Cond { if opts.RepoID > 0 { cond = cond.And(builder.Eq{"repo_id": opts.RepoID}) } + if opts.OwnerID > 0 { + cond = cond.And(builder.Eq{"owner_id": opts.OwnerID}) + } if opts.IsClosed.IsFalse() { cond = cond.And(builder.Eq{"status": StatusWaiting}.Or( builder.Eq{"status": StatusRunning})) diff --git a/models/migrations/v-dev.go b/models/migrations/v-dev.go index 73c23c1482..6d46b97843 100644 --- a/models/migrations/v-dev.go +++ b/models/migrations/v-dev.go @@ -7,6 +7,7 @@ package migrations import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" + "xorm.io/xorm" ) @@ -51,6 +52,7 @@ func addBotTables(x *xorm.Engine) error { ID int64 Title string RepoID int64 `xorm:"index unique(repo_index)"` + OwnerID int64 `xorm:"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 @@ -69,7 +71,10 @@ func addBotTables(x *xorm.Engine) error { type BotsRunJob struct { ID int64 - RunID int64 `xorm:"index"` + RunID int64 `xorm:"index"` + RepoID int64 `xorm:"index"` + OwnerID int64 `xorm:"index"` + CommitSHA string `xorm:"index"` Name string Attempt int64 WorkflowPayload []byte diff --git a/modules/notification/bots/bots.go b/modules/notification/bots/bots.go index 094b3c9929..f99ecfc481 100644 --- a/modules/notification/bots/bots.go +++ b/modules/notification/bots/bots.go @@ -75,6 +75,7 @@ func notify(repo *repo_model.Repository, doer *user_model.User, ref string, evt run := bots_model.Run{ Title: commit.Message(), RepoID: repo.ID, + OwnerID: repo.OwnerID, WorkflowID: id, TriggerUserID: doer.ID, Ref: ref,