Before: ![image](https://user-images.githubusercontent.com/18380374/234779250-8bbd325c-190e-4a30-ac3e-766498d17df5.png) After: ![image](https://user-images.githubusercontent.com/18380374/234779094-e232ecba-d9f4-4d62-a702-6d5e4a522782.png) ![image](https://user-images.githubusercontent.com/18380374/234779120-0293af17-a566-4b69-b454-af4e95844e3b.png) --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Giteabot <teabot@gitea.io> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>tags/v1.20.0-rc0
@@ -11,6 +11,7 @@ import ( | |||
"code.gitea.io/gitea/models/db" | |||
repo_model "code.gitea.io/gitea/models/repo" | |||
"code.gitea.io/gitea/models/shared/types" | |||
user_model "code.gitea.io/gitea/models/user" | |||
"code.gitea.io/gitea/modules/timeutil" | |||
"code.gitea.io/gitea/modules/translation" | |||
@@ -28,7 +29,7 @@ type ActionRunner struct { | |||
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 | |||
RepoID int64 `xorm:"index"` // repo level runner, if OwnerID also is zero, then it's a global | |||
Repo *repo_model.Repository `xorm:"-"` | |||
Description string `xorm:"TEXT"` | |||
Base int // 0 native 1 docker 2 virtual machine | |||
@@ -52,14 +53,25 @@ type ActionRunner struct { | |||
Deleted timeutil.TimeStamp `xorm:"deleted"` | |||
} | |||
func (r *ActionRunner) OwnType() string { | |||
// BelongsToOwnerName before calling, should guarantee that all attributes are loaded | |||
func (r *ActionRunner) BelongsToOwnerName() string { | |||
if r.RepoID != 0 { | |||
return fmt.Sprintf("Repo(%s)", r.Repo.FullName()) | |||
return r.Repo.FullName() | |||
} | |||
if r.OwnerID != 0 { | |||
return fmt.Sprintf("Org(%s)", r.Owner.Name) | |||
return r.Owner.Name | |||
} | |||
return "Global" | |||
return "" | |||
} | |||
func (r *ActionRunner) BelongsToOwnerType() types.OwnerType { | |||
if r.RepoID != 0 { | |||
return types.OwnerTypeRepository | |||
} | |||
if r.OwnerID != 0 { | |||
return types.OwnerTypeOrganization | |||
} | |||
return types.OwnerTypeSystemGlobal | |||
} | |||
func (r *ActionRunner) Status() runnerv1.RunnerStatus { |
@@ -0,0 +1,29 @@ | |||
// Copyright 2023 The Gitea Authors. All rights reserved. | |||
// SPDX-License-Identifier: MIT | |||
package types | |||
import "code.gitea.io/gitea/modules/translation" | |||
type OwnerType string | |||
const ( | |||
OwnerTypeSystemGlobal = "system-global" | |||
OwnerTypeIndividual = "individual" | |||
OwnerTypeRepository = "repository" | |||
OwnerTypeOrganization = "organization" | |||
) | |||
func (o OwnerType) LocaleString(locale translation.Locale) string { | |||
switch o { | |||
case OwnerTypeSystemGlobal: | |||
return locale.Tr("concept_system_global") | |||
case OwnerTypeIndividual: | |||
return locale.Tr("concept_user_individual") | |||
case OwnerTypeRepository: | |||
return locale.Tr("concept_code_repository") | |||
case OwnerTypeOrganization: | |||
return locale.Tr("concept_user_organization") | |||
} | |||
return locale.Tr("unknown") | |||
} |
@@ -114,6 +114,11 @@ unknown = Unknown | |||
rss_feed = RSS Feed | |||
concept_system_global = Global | |||
concept_user_individual = Individual | |||
concept_code_repository = Repository | |||
concept_user_organization = Organization | |||
[aria] | |||
navbar = Navigation Bar | |||
footer = Footer |
@@ -7,15 +7,15 @@ | |||
{{template "base/disable_form_autofill"}} | |||
{{.CsrfTokenHtml}} | |||
<div class="runner-basic-info"> | |||
<div class="field gt-dib gt-mr-4 disabled"> | |||
<div class="field gt-dib gt-mr-4"> | |||
<label>{{.locale.Tr "actions.runners.status"}}</label> | |||
<span class="runner-status-{{if .Runner.IsOnline}}online{{else}}offline{{end}}">{{.Runner.StatusLocaleName $.locale}}</span> | |||
</div> | |||
<div class="field gt-dib gt-mr-4 disabled"> | |||
<div class="field gt-dib gt-mr-4"> | |||
<label>{{.locale.Tr "actions.runners.last_online"}}</label> | |||
<span>{{if .LastOnline}}{{TimeSinceUnix .LastOnline $.locale}}{{else}}{{$.locale.Tr "never"}}{{end}}</span> | |||
</div> | |||
<div class="field gt-dib gt-mr-4 disabled"> | |||
<div class="field gt-dib gt-mr-4"> | |||
<label>{{.locale.Tr "actions.runners.agent_labels"}}</label> | |||
<span> | |||
{{range .Runner.AgentLabels}} | |||
@@ -23,9 +23,9 @@ | |||
{{end}} | |||
</span> | |||
</div> | |||
<div class="field gt-dib gt-mr-4 disabled"> | |||
<div class="field gt-dib gt-mr-4"> | |||
<label>{{.locale.Tr "actions.runners.owner_type"}}</label> | |||
<span>{{.Runner.OwnType}}</span> | |||
<span data-tooltip-content="{{.Runner.BelongsToOwnerName}}">{{.Runner.BelongsToOwnerType.LocaleString $.locale}}</span> | |||
</div> | |||
</div> | |||
@@ -65,7 +65,7 @@ | |||
<td>{{.ID}}</td> | |||
<td><p data-tooltip-content="{{.Description}}">{{.Name}}</p></td> | |||
<td>{{if .Version}}{{.Version}}{{else}}{{$.locale.Tr "unknown"}}{{end}}</td> | |||
<td>{{.OwnType}}</td> | |||
<td><span data-tooltip-content="{{.BelongsToOwnerName}}">{{.BelongsToOwnerType.LocaleString $.locale}}<span></td> | |||
<td class="runner-tags"> | |||
{{range .AllLabels}}<span class="ui label">{{.}}</span>{{end}} | |||
</td> |