mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-25 11:33:11 +00:00 
			
		
		
		
	Close #24544 Changes: - Create `action_tasks_version` table to store the latest version of each scope (global, org and repo). - When a job with the status of `waiting` is created, the tasks version of the scopes it belongs to will increase. - When the status of a job already in the database is updated to `waiting`, the tasks version of the scopes it belongs to will increase. - On Gitea side, in `FeatchTask()`, will try to query the `action_tasks_version` record of the scope of the runner that call `FetchTask()`. If the record does not exist, will insert a row. Then, Gitea will compare the version passed from runner to Gitea with the version in database, if inconsistent, try pick task. Gitea always returns the latest version from database to the runner. Related: - Protocol: https://gitea.com/gitea/actions-proto-def/pulls/10 - Runner: https://gitea.com/gitea/act_runner/pulls/219
		
			
				
	
	
		
			23 lines
		
	
	
	
		
			586 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
	
		
			586 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2023 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package v1_21 //nolint
 | |
| 
 | |
| import (
 | |
| 	"code.gitea.io/gitea/modules/timeutil"
 | |
| 
 | |
| 	"xorm.io/xorm"
 | |
| )
 | |
| 
 | |
| func CreateActionTasksVersionTable(x *xorm.Engine) error {
 | |
| 	type ActionTasksVersion struct {
 | |
| 		ID          int64 `xorm:"pk autoincr"`
 | |
| 		OwnerID     int64 `xorm:"UNIQUE(owner_repo)"`
 | |
| 		RepoID      int64 `xorm:"INDEX UNIQUE(owner_repo)"`
 | |
| 		Version     int64
 | |
| 		CreatedUnix timeutil.TimeStamp `xorm:"created"`
 | |
| 		UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
 | |
| 	}
 | |
| 
 | |
| 	return x.Sync(new(ActionTasksVersion))
 | |
| }
 |