mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:25:11 +01:00 
			
		
		
		
	Only check online runner when detecting matching runners in workflows (#28286)
Mentioned: [#28277](https://github.com/go-gitea/gitea/issues/28277#issuecomment-1831325276) We should only check online runner when detecting matching runners in workflows, as if runner is not online, the workflow will not run. 
This commit is contained in:
		
							parent
							
								
									e02095c5b6
								
							
						
					
					
						commit
						4ea522fecf
					
				| @ -51,6 +51,11 @@ type ActionRunner struct { | |||||||
| 	Deleted timeutil.TimeStamp `xorm:"deleted"` | 	Deleted timeutil.TimeStamp `xorm:"deleted"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | const ( | ||||||
|  | 	RunnerOfflineTime = time.Minute | ||||||
|  | 	RunnerIdleTime    = 10 * time.Second | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| // BelongsToOwnerName before calling, should guarantee that all attributes are loaded | // BelongsToOwnerName before calling, should guarantee that all attributes are loaded | ||||||
| func (r *ActionRunner) BelongsToOwnerName() string { | func (r *ActionRunner) BelongsToOwnerName() string { | ||||||
| 	if r.RepoID != 0 { | 	if r.RepoID != 0 { | ||||||
| @ -76,11 +81,12 @@ func (r *ActionRunner) BelongsToOwnerType() types.OwnerType { | |||||||
| 	return types.OwnerTypeSystemGlobal | 	return types.OwnerTypeSystemGlobal | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // if the logic here changed, you should also modify FindRunnerOptions.ToCond | ||||||
| func (r *ActionRunner) Status() runnerv1.RunnerStatus { | func (r *ActionRunner) Status() runnerv1.RunnerStatus { | ||||||
| 	if time.Since(r.LastOnline.AsTime()) > time.Minute { | 	if time.Since(r.LastOnline.AsTime()) > RunnerOfflineTime { | ||||||
| 		return runnerv1.RunnerStatus_RUNNER_STATUS_OFFLINE | 		return runnerv1.RunnerStatus_RUNNER_STATUS_OFFLINE | ||||||
| 	} | 	} | ||||||
| 	if time.Since(r.LastActive.AsTime()) > 10*time.Second { | 	if time.Since(r.LastActive.AsTime()) > RunnerIdleTime { | ||||||
| 		return runnerv1.RunnerStatus_RUNNER_STATUS_IDLE | 		return runnerv1.RunnerStatus_RUNNER_STATUS_IDLE | ||||||
| 	} | 	} | ||||||
| 	return runnerv1.RunnerStatus_RUNNER_STATUS_ACTIVE | 	return runnerv1.RunnerStatus_RUNNER_STATUS_ACTIVE | ||||||
| @ -153,6 +159,7 @@ type FindRunnerOptions struct { | |||||||
| 	OwnerID       int64 | 	OwnerID       int64 | ||||||
| 	Sort          string | 	Sort          string | ||||||
| 	Filter        string | 	Filter        string | ||||||
|  | 	IsOnline      util.OptionalBool | ||||||
| 	WithAvailable bool // not only runners belong to, but also runners can be used | 	WithAvailable bool // not only runners belong to, but also runners can be used | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -178,6 +185,12 @@ func (opts FindRunnerOptions) ToConds() builder.Cond { | |||||||
| 	if opts.Filter != "" { | 	if opts.Filter != "" { | ||||||
| 		cond = cond.And(builder.Like{"name", opts.Filter}) | 		cond = cond.And(builder.Like{"name", opts.Filter}) | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if opts.IsOnline.IsTrue() { | ||||||
|  | 		cond = cond.And(builder.Gt{"last_online": time.Now().Add(-RunnerOfflineTime).Unix()}) | ||||||
|  | 	} else if opts.IsOnline.IsFalse() { | ||||||
|  | 		cond = cond.And(builder.Lte{"last_online": time.Now().Add(-RunnerOfflineTime).Unix()}) | ||||||
|  | 	} | ||||||
| 	return cond | 	return cond | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3525,7 +3525,7 @@ runs.commit = Commit | |||||||
| runs.scheduled = Scheduled | runs.scheduled = Scheduled | ||||||
| runs.pushed_by = pushed by | runs.pushed_by = pushed by | ||||||
| runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s | runs.invalid_workflow_helper = Workflow config file is invalid. Please check your config file: %s | ||||||
| runs.no_matching_runner_helper = No matching runner: %s | runs.no_matching_online_runner_helper = No matching online runner with label: %s | ||||||
| runs.actor = Actor | runs.actor = Actor | ||||||
| runs.status = Status | runs.status = Status | ||||||
| runs.actors_no_select = All actors | runs.actors_no_select = All actors | ||||||
|  | |||||||
| @ -18,6 +18,7 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
| 	"code.gitea.io/gitea/modules/git" | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
|  | 	"code.gitea.io/gitea/modules/util" | ||||||
| 	"code.gitea.io/gitea/routers/web/repo" | 	"code.gitea.io/gitea/routers/web/repo" | ||||||
| 	"code.gitea.io/gitea/services/convert" | 	"code.gitea.io/gitea/services/convert" | ||||||
| 
 | 
 | ||||||
| @ -77,6 +78,7 @@ func List(ctx *context.Context) { | |||||||
| 		// Get all runner labels | 		// Get all runner labels | ||||||
| 		runners, err := db.Find[actions_model.ActionRunner](ctx, actions_model.FindRunnerOptions{ | 		runners, err := db.Find[actions_model.ActionRunner](ctx, actions_model.FindRunnerOptions{ | ||||||
| 			RepoID:        ctx.Repo.Repository.ID, | 			RepoID:        ctx.Repo.Repository.ID, | ||||||
|  | 			IsOnline:      util.OptionalBoolTrue, | ||||||
| 			WithAvailable: true, | 			WithAvailable: true, | ||||||
| 		}) | 		}) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| @ -113,7 +115,7 @@ func List(ctx *context.Context) { | |||||||
| 						continue | 						continue | ||||||
| 					} | 					} | ||||||
| 					if !allRunnerLabels.Contains(ro) { | 					if !allRunnerLabels.Contains(ro) { | ||||||
| 						workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_runner_helper", ro) | 						workflow.ErrMsg = ctx.Locale.Tr("actions.runs.no_matching_online_runner_helper", ro) | ||||||
| 						break | 						break | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user