mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Display the version of runner in the runner list (#23490)
Close: #23489 ### Change 1. Add version column to action_runner table. 2. Read the runner version from the request header, and update it in DB. 3. Display version in runner list ### Screenshot 
This commit is contained in:
		@@ -25,6 +25,7 @@ type ActionRunner struct {
 | 
				
			|||||||
	ID          int64
 | 
						ID          int64
 | 
				
			||||||
	UUID        string                 `xorm:"CHAR(36) UNIQUE"`
 | 
						UUID        string                 `xorm:"CHAR(36) UNIQUE"`
 | 
				
			||||||
	Name        string                 `xorm:"VARCHAR(255)"`
 | 
						Name        string                 `xorm:"VARCHAR(255)"`
 | 
				
			||||||
 | 
						Version     string                 `xorm:"VARCHAR(64)"`
 | 
				
			||||||
	OwnerID     int64                  `xorm:"index"` // org level runner, 0 means system
 | 
						OwnerID     int64                  `xorm:"index"` // org level runner, 0 means system
 | 
				
			||||||
	Owner       *user_model.User       `xorm:"-"`
 | 
						Owner       *user_model.User       `xorm:"-"`
 | 
				
			||||||
	RepoID      int64                  `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
 | 
						RepoID      int64                  `xorm:"index"` // repo level runner, if orgid also is zero, then it's a global
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -473,6 +473,8 @@ var migrations = []Migration{
 | 
				
			|||||||
	NewMigration("Add missed column owner_id for project table", v1_20.AddNewColumnForProject),
 | 
						NewMigration("Add missed column owner_id for project table", v1_20.AddNewColumnForProject),
 | 
				
			||||||
	// v247 -> v248
 | 
						// v247 -> v248
 | 
				
			||||||
	NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType),
 | 
						NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType),
 | 
				
			||||||
 | 
						// v248 -> v249
 | 
				
			||||||
 | 
						NewMigration("Add version column to action_runner table", v1_20.AddVersionToActionRunner),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetCurrentDBVersion returns the current db version
 | 
					// GetCurrentDBVersion returns the current db version
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								models/migrations/v1_20/v248.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								models/migrations/v1_20/v248.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package v1_20 //nolint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "xorm.io/xorm"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func AddVersionToActionRunner(x *xorm.Engine) error {
 | 
				
			||||||
 | 
						type ActionRunner struct {
 | 
				
			||||||
 | 
							Version string `xorm:"VARCHAR(64)"` // the version of act_runner
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return x.Sync(new(ActionRunner))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -3355,6 +3355,7 @@ runners.status.unspecified = Unknown
 | 
				
			|||||||
runners.status.idle = Idle
 | 
					runners.status.idle = Idle
 | 
				
			||||||
runners.status.active = Active
 | 
					runners.status.active = Active
 | 
				
			||||||
runners.status.offline = Offline
 | 
					runners.status.offline = Offline
 | 
				
			||||||
 | 
					runners.version = Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
runs.all_workflows = All Workflows
 | 
					runs.all_workflows = All Workflows
 | 
				
			||||||
runs.open_tab = %d Open
 | 
					runs.open_tab = %d Open
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,8 +21,11 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	uuidHeaderKey  = "x-runner-uuid"
 | 
						uuidHeaderKey    = "x-runner-uuid"
 | 
				
			||||||
	tokenHeaderKey = "x-runner-token"
 | 
						tokenHeaderKey   = "x-runner-token"
 | 
				
			||||||
 | 
						versionHeaderKey = "x-runner-version"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						versionUnknown = "Unknown"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var withRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unaryFunc connect.UnaryFunc) connect.UnaryFunc {
 | 
					var withRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unaryFunc connect.UnaryFunc) connect.UnaryFunc {
 | 
				
			||||||
@@ -33,6 +36,12 @@ var withRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unar
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		uuid := request.Header().Get(uuidHeaderKey)
 | 
							uuid := request.Header().Get(uuidHeaderKey)
 | 
				
			||||||
		token := request.Header().Get(tokenHeaderKey)
 | 
							token := request.Header().Get(tokenHeaderKey)
 | 
				
			||||||
 | 
							version := request.Header().Get(versionHeaderKey)
 | 
				
			||||||
 | 
							if util.IsEmptyString(version) {
 | 
				
			||||||
 | 
								version = versionUnknown
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							version, _ = util.SplitStringAtByteN(version, 64)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		runner, err := actions_model.GetRunnerByUUID(ctx, uuid)
 | 
							runner, err := actions_model.GetRunnerByUUID(ctx, uuid)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			if errors.Is(err, util.ErrNotExist) {
 | 
								if errors.Is(err, util.ErrNotExist) {
 | 
				
			||||||
@@ -45,6 +54,10 @@ var withRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unar
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		cols := []string{"last_online"}
 | 
							cols := []string{"last_online"}
 | 
				
			||||||
 | 
							if runner.Version != version {
 | 
				
			||||||
 | 
								runner.Version = version
 | 
				
			||||||
 | 
								cols = append(cols, "version")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		runner.LastOnline = timeutil.TimeStampNow()
 | 
							runner.LastOnline = timeutil.TimeStampNow()
 | 
				
			||||||
		if methodName == "UpdateTask" || methodName == "UpdateLog" {
 | 
							if methodName == "UpdateTask" || methodName == "UpdateLog" {
 | 
				
			||||||
			runner.LastActive = timeutil.TimeStampNow()
 | 
								runner.LastActive = timeutil.TimeStampNow()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,6 +49,7 @@
 | 
				
			|||||||
					<th data-sortt-asc="online" data-sortt-desc="offline">{{.locale.Tr "actions.runners.status"}}</th>
 | 
										<th data-sortt-asc="online" data-sortt-desc="offline">{{.locale.Tr "actions.runners.status"}}</th>
 | 
				
			||||||
					<th data-sortt-asc="alphabetically">{{.locale.Tr "actions.runners.id"}}</th>
 | 
										<th data-sortt-asc="alphabetically">{{.locale.Tr "actions.runners.id"}}</th>
 | 
				
			||||||
					<th>{{.locale.Tr "actions.runners.name"}}</th>
 | 
										<th>{{.locale.Tr "actions.runners.name"}}</th>
 | 
				
			||||||
 | 
										<th>{{.locale.Tr "actions.runners.version"}}</th>
 | 
				
			||||||
					<th>{{.locale.Tr "actions.runners.owner_type"}}</th>
 | 
										<th>{{.locale.Tr "actions.runners.owner_type"}}</th>
 | 
				
			||||||
					<th>{{.locale.Tr "actions.runners.labels"}}</th>
 | 
										<th>{{.locale.Tr "actions.runners.labels"}}</th>
 | 
				
			||||||
					<th>{{.locale.Tr "actions.runners.last_online"}}</th>
 | 
										<th>{{.locale.Tr "actions.runners.last_online"}}</th>
 | 
				
			||||||
@@ -64,6 +65,7 @@
 | 
				
			|||||||
						</td>
 | 
											</td>
 | 
				
			||||||
						<td>{{.ID}}</td>
 | 
											<td>{{.ID}}</td>
 | 
				
			||||||
						<td><p class="tooltip" data-content="{{.Description}}">{{.Name}}</p></td>
 | 
											<td><p class="tooltip" data-content="{{.Description}}">{{.Name}}</p></td>
 | 
				
			||||||
 | 
											<td>{{.Version}}</td>
 | 
				
			||||||
						<td>{{.OwnType}}</td>
 | 
											<td>{{.OwnType}}</td>
 | 
				
			||||||
						<td class="runner-tags">
 | 
											<td class="runner-tags">
 | 
				
			||||||
							{{range .AllLabels}}<span class="ui label">{{.}}</span>{{end}}
 | 
												{{range .AllLabels}}<span class="ui label">{{.}}</span>{{end}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user