mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-29 04:36:18 +01: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 ![image](https://user-images.githubusercontent.com/33891828/225220990-98bc0158-4403-4e6c-9805-31bbbc65a802.png)
This commit is contained in:
parent
af3711100a
commit
371520d7ab
6 changed files with 35 additions and 2 deletions
|
@ -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
|
||||||
|
|
|
@ -23,6 +23,9 @@ 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}}
|
||||||
|
|
Loading…
Reference in a new issue