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
 | 
			
		||||
	UUID        string                 `xorm:"CHAR(36) UNIQUE"`
 | 
			
		||||
	Name        string                 `xorm:"VARCHAR(255)"`
 | 
			
		||||
	Version     string                 `xorm:"VARCHAR(64)"`
 | 
			
		||||
	OwnerID     int64                  `xorm:"index"` // org level runner, 0 means system
 | 
			
		||||
	Owner       *user_model.User       `xorm:"-"`
 | 
			
		||||
	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),
 | 
			
		||||
	// v247 -> v248
 | 
			
		||||
	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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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.active = Active
 | 
			
		||||
runners.status.offline = Offline
 | 
			
		||||
runners.version = Version
 | 
			
		||||
 | 
			
		||||
runs.all_workflows = All Workflows
 | 
			
		||||
runs.open_tab = %d Open
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,9 @@ import (
 | 
			
		||||
const (
 | 
			
		||||
	uuidHeaderKey    = "x-runner-uuid"
 | 
			
		||||
	tokenHeaderKey   = "x-runner-token"
 | 
			
		||||
	versionHeaderKey = "x-runner-version"
 | 
			
		||||
 | 
			
		||||
	versionUnknown = "Unknown"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
		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)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if errors.Is(err, util.ErrNotExist) {
 | 
			
		||||
@@ -45,6 +54,10 @@ var withRunner = connect.WithInterceptors(connect.UnaryInterceptorFunc(func(unar
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		cols := []string{"last_online"}
 | 
			
		||||
		if runner.Version != version {
 | 
			
		||||
			runner.Version = version
 | 
			
		||||
			cols = append(cols, "version")
 | 
			
		||||
		}
 | 
			
		||||
		runner.LastOnline = timeutil.TimeStampNow()
 | 
			
		||||
		if methodName == "UpdateTask" || methodName == "UpdateLog" {
 | 
			
		||||
			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="alphabetically">{{.locale.Tr "actions.runners.id"}}</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.labels"}}</th>
 | 
			
		||||
					<th>{{.locale.Tr "actions.runners.last_online"}}</th>
 | 
			
		||||
@@ -64,6 +65,7 @@
 | 
			
		||||
						</td>
 | 
			
		||||
						<td>{{.ID}}</td>
 | 
			
		||||
						<td><p class="tooltip" data-content="{{.Description}}">{{.Name}}</p></td>
 | 
			
		||||
						<td>{{.Version}}</td>
 | 
			
		||||
						<td>{{.OwnType}}</td>
 | 
			
		||||
						<td class="runner-tags">
 | 
			
		||||
							{{range .AllLabels}}<span class="ui label">{{.}}</span>{{end}}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user