]> source.dussan.org Git - gitea.git/commitdiff
Display the version of runner in the runner list (#23490)
authorsillyguodong <33891828+sillyguodong@users.noreply.github.com>
Mon, 20 Mar 2023 02:19:40 +0000 (10:19 +0800)
committerGitHub <noreply@github.com>
Mon, 20 Mar 2023 02:19:40 +0000 (22:19 -0400)
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)

models/actions/runner.go
models/migrations/migrations.go
models/migrations/v1_20/v248.go [new file with mode: 0644]
options/locale/locale_en-US.ini
routers/api/actions/runner/interceptor.go
templates/shared/actions/runner_list.tmpl

index 4efe105b08845d750624ab3a034a39962035c443..cce8b4f4431d3f0a31db40283cc4384a48643294 100644 (file)
@@ -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
index 5401ae2fa6352a8adea44597823b14b157066969..6224e1c8d7c0f12590437720ae3e867c8dc78cd3 100644 (file)
@@ -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
diff --git a/models/migrations/v1_20/v248.go b/models/migrations/v1_20/v248.go
new file mode 100644 (file)
index 0000000..4055521
--- /dev/null
@@ -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))
+}
index da925a27f5d3d5f5c2f798f030ea282fa32afaa2..e519258c6b28f01720b1768dbb1d9bca42b21c13 100644 (file)
@@ -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
index 8c0bd86ecb6c6c982c401d6883029003e6c01923..d97b78f8513be1b6ab891a56e7b6577fee9f4133 100644 (file)
@@ -21,8 +21,11 @@ import (
 )
 
 const (
-       uuidHeaderKey  = "x-runner-uuid"
-       tokenHeaderKey = "x-runner-token"
+       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()
index 30c52c01b45774ce3d15c3bffaf086f86a1ec852..dd2e43f816a93ca2b4f5224064014d67c8a10692 100644 (file)
@@ -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}}