From 371520d7ab5c018c380f8f7981a8be7d40a01f72 Mon Sep 17 00:00:00 2001 From: sillyguodong <33891828+sillyguodong@users.noreply.github.com> Date: Mon, 20 Mar 2023 10:19:40 +0800 Subject: [PATCH] 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) --- models/actions/runner.go | 1 + models/migrations/migrations.go | 2 ++ models/migrations/v1_20/v248.go | 14 ++++++++++++++ options/locale/locale_en-US.ini | 1 + routers/api/actions/runner/interceptor.go | 17 +++++++++++++++-- templates/shared/actions/runner_list.tmpl | 2 ++ 6 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 models/migrations/v1_20/v248.go diff --git a/models/actions/runner.go b/models/actions/runner.go index 4efe105b0..cce8b4f44 100644 --- a/models/actions/runner.go +++ b/models/actions/runner.go @@ -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 diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 5401ae2fa..6224e1c8d 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -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 index 000000000..40555210e --- /dev/null +++ b/models/migrations/v1_20/v248.go @@ -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)) +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index da925a27f..e519258c6 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -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 diff --git a/routers/api/actions/runner/interceptor.go b/routers/api/actions/runner/interceptor.go index 8c0bd86ec..d97b78f85 100644 --- a/routers/api/actions/runner/interceptor.go +++ b/routers/api/actions/runner/interceptor.go @@ -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() diff --git a/templates/shared/actions/runner_list.tmpl b/templates/shared/actions/runner_list.tmpl index 30c52c01b..dd2e43f81 100644 --- a/templates/shared/actions/runner_list.tmpl +++ b/templates/shared/actions/runner_list.tmpl @@ -49,6 +49,7 @@
{{.Name}}