mirror of
				https://github.com/go-gitea/gitea
				synced 2025-09-28 03:28:13 +00:00 
			
		
		
		
	feat(runner): finish org runners ui
This commit is contained in:
		| @@ -1,6 +1,7 @@ | |||||||
| package common | package common | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"errors" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"strings" | 	"strings" | ||||||
|  |  | ||||||
| @@ -60,7 +61,7 @@ func RunnersList(ctx *context.Context, tplName base.TplName, opts bots_model.Fin | |||||||
| 	ctx.HTML(http.StatusOK, tplName) | 	ctx.HTML(http.StatusOK, tplName) | ||||||
| } | } | ||||||
|  |  | ||||||
| func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64) { | func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64, ownerID int64, repoID int64) { | ||||||
| 	runner, err := bots_model.GetRunnerByID(runnerID) | 	runner, err := bots_model.GetRunnerByID(runnerID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		ctx.ServerError("GetRunnerByID", err) | 		ctx.ServerError("GetRunnerByID", err) | ||||||
| @@ -70,6 +71,11 @@ func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64) { | |||||||
| 		ctx.ServerError("LoadAttributes", err) | 		ctx.ServerError("LoadAttributes", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | 	if !runner.Editable(ownerID, repoID) { | ||||||
|  | 		err = errors.New("no permission to edit this runner") | ||||||
|  | 		ctx.NotFound("RunnerDetails", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	ctx.Data["Runner"] = runner | 	ctx.Data["Runner"] = runner | ||||||
|  |  | ||||||
| @@ -79,13 +85,18 @@ func RunnerDetails(ctx *context.Context, tplName base.TplName, runnerID int64) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // RunnerDetailsEditPost response for edit runner details | // RunnerDetailsEditPost response for edit runner details | ||||||
| func RunnerDetailsEditPost(ctx *context.Context, runnerID int64, redirectTo string) { | func RunnerDetailsEditPost(ctx *context.Context, runnerID int64, ownerID int64, repoID int64, redirectTo string) { | ||||||
| 	runner, err := bots_model.GetRunnerByID(runnerID) | 	runner, err := bots_model.GetRunnerByID(runnerID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Warn("RunnerDetailsEditPost.GetRunnerByID failed: %v, url: %s", err, ctx.Req.URL) | 		log.Warn("RunnerDetailsEditPost.GetRunnerByID failed: %v, url: %s", err, ctx.Req.URL) | ||||||
| 		ctx.ServerError("RunnerDetailsEditPost.GetRunnerByID", err) | 		ctx.ServerError("RunnerDetailsEditPost.GetRunnerByID", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | 	if !runner.Editable(ownerID, repoID) { | ||||||
|  | 		err = errors.New("no permission to edit this runner") | ||||||
|  | 		ctx.NotFound("RunnerDetailsEditPost.Editable", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	form := web.GetForm(ctx).(*forms.EditRunnerForm) | 	form := web.GetForm(ctx).(*forms.EditRunnerForm) | ||||||
| 	runner.Description = form.Description | 	runner.Description = form.Description | ||||||
|   | |||||||
| @@ -55,7 +55,7 @@ func EditRunner(ctx *context.Context) { | |||||||
| 	ctx.Data["PageIsAdmin"] = true | 	ctx.Data["PageIsAdmin"] = true | ||||||
| 	ctx.Data["PageIsAdminRunners"] = true | 	ctx.Data["PageIsAdminRunners"] = true | ||||||
|  |  | ||||||
| 	common.RunnerDetails(ctx, tplRunnerEdit, ctx.ParamsInt64(":runnerid")) | 	common.RunnerDetails(ctx, tplRunnerEdit, ctx.ParamsInt64(":runnerid"), 0, 0) | ||||||
| } | } | ||||||
|  |  | ||||||
| // EditRunnerPost response for editing runner | // EditRunnerPost response for editing runner | ||||||
| @@ -63,7 +63,7 @@ func EditRunnerPost(ctx *context.Context) { | |||||||
| 	ctx.Data["Title"] = ctx.Tr("admin.runners.edit") | 	ctx.Data["Title"] = ctx.Tr("admin.runners.edit") | ||||||
| 	ctx.Data["PageIsAdmin"] = true | 	ctx.Data["PageIsAdmin"] = true | ||||||
| 	ctx.Data["PageIsAdminRunners"] = true | 	ctx.Data["PageIsAdminRunners"] = true | ||||||
| 	common.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), | 	common.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), 0, 0, | ||||||
| 		setting.AppSubURL+"/admin/runners/"+url.PathEscape(ctx.Params(":runnerid"))) | 		setting.AppSubURL+"/admin/runners/"+url.PathEscape(ctx.Params(":runnerid"))) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,8 @@ | |||||||
| package org | package org | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"net/url" | ||||||
|  |  | ||||||
| 	bots_model "code.gitea.io/gitea/models/bots" | 	bots_model "code.gitea.io/gitea/models/bots" | ||||||
| 	"code.gitea.io/gitea/models/db" | 	"code.gitea.io/gitea/models/db" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
| @@ -39,3 +41,24 @@ func ResetRunnerRegistrationToken(ctx *context.Context) { | |||||||
| 		ctx.Org.Organization.ID, 0, | 		ctx.Org.Organization.ID, 0, | ||||||
| 		ctx.Org.OrgLink+"/settings/runners") | 		ctx.Org.OrgLink+"/settings/runners") | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // RunnersEdit render runner edit page | ||||||
|  | func RunnersEdit(ctx *context.Context) { | ||||||
|  | 	ctx.Data["Title"] = ctx.Tr("org.runners.edit") | ||||||
|  | 	ctx.Data["PageIsOrgSettings"] = true | ||||||
|  | 	ctx.Data["PageIsOrgSettingsRunners"] = true | ||||||
|  |  | ||||||
|  | 	common.RunnerDetails(ctx, tplSettingsRunnersEdit, | ||||||
|  | 		ctx.ParamsInt64(":runnerid"), ctx.Org.Organization.ID, 0, | ||||||
|  | 	) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // RunnersEditPost response for editing runner | ||||||
|  | func RunnersEditPost(ctx *context.Context) { | ||||||
|  | 	ctx.Data["Title"] = ctx.Tr("org.runners.edit") | ||||||
|  | 	ctx.Data["PageIsOrgSettings"] = true | ||||||
|  | 	ctx.Data["PageIsOrgSettingsRunners"] = true | ||||||
|  | 	common.RunnerDetailsEditPost(ctx, ctx.ParamsInt64(":runnerid"), | ||||||
|  | 		ctx.Org.Organization.ID, 0, | ||||||
|  | 		ctx.Org.OrgLink+"/settings/runners/"+url.PathEscape(ctx.Params(":runnerid"))) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -41,6 +41,8 @@ const ( | |||||||
| 	tplSettingsLabels base.TplName = "org/settings/labels" | 	tplSettingsLabels base.TplName = "org/settings/labels" | ||||||
| 	// tplSettingsRunners template path for render runners settings | 	// tplSettingsRunners template path for render runners settings | ||||||
| 	tplSettingsRunners base.TplName = "org/settings/runners" | 	tplSettingsRunners base.TplName = "org/settings/runners" | ||||||
|  | 	// tplSettingsRunnersEdit template path for render runners edit settings | ||||||
|  | 	tplSettingsRunnersEdit base.TplName = "org/settings/runners_edit" | ||||||
| 	// tplSettingsSecrets template path for render secrets settings | 	// tplSettingsSecrets template path for render secrets settings | ||||||
| 	tplSettingsSecrets base.TplName = "org/settings/secrets" | 	tplSettingsSecrets base.TplName = "org/settings/secrets" | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -793,6 +793,13 @@ func RegisterRoutes(m *web.Route) { | |||||||
| 					m.Post("/initialize", bindIgnErr(forms.InitializeLabelsForm{}), org.InitializeLabels) | 					m.Post("/initialize", bindIgnErr(forms.InitializeLabelsForm{}), org.InitializeLabels) | ||||||
| 				}) | 				}) | ||||||
|  |  | ||||||
|  | 				m.Group("/runners", func() { | ||||||
|  | 					m.Get("", org.Runners) | ||||||
|  | 					m.Combo("/{runnerid}").Get(org.RunnersEdit). | ||||||
|  | 						Post(bindIgnErr(forms.EditRunnerForm{}), org.RunnersEditPost) | ||||||
|  | 					m.Get("/reset_registration_token", org.ResetRunnerRegistrationToken) | ||||||
|  | 				}) | ||||||
|  |  | ||||||
| 				m.Group("/secrets", func() { | 				m.Group("/secrets", func() { | ||||||
| 					m.Get("", org.Secrets) | 					m.Get("", org.Secrets) | ||||||
| 					m.Post("", bindIgnErr(forms.AddSecretForm{}), org.SecretsPost) | 					m.Post("", bindIgnErr(forms.AddSecretForm{}), org.SecretsPost) | ||||||
|   | |||||||
| @@ -2,84 +2,7 @@ | |||||||
| <div class="page-content admin runners"> | <div class="page-content admin runners"> | ||||||
| 	{{template "admin/navbar" .}} | 	{{template "admin/navbar" .}} | ||||||
| 	<div class="ui container"> | 	<div class="ui container"> | ||||||
| 		{{template "base/alert" .}} | 		{{template "runners/edit" .}} | ||||||
| 		<h4 class="ui top attached header"> |  | ||||||
| 			{{.locale.Tr "admin.runners.runner_title"}} #{{.Runner.ID}} {{.Runner.Name}} |  | ||||||
| 		</h4> |  | ||||||
| 		<div class="ui attached segment"> |  | ||||||
| 			<form class="ui form" action="{{.Link}}" method="post"> |  | ||||||
| 				{{template "base/disable_form_autofill"}} |  | ||||||
| 				{{.CsrfTokenHtml}} |  | ||||||
| 				<div class="runner-basic-info"> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.status"}}</label> |  | ||||||
| 						<span class="runner-status-{{.Runner.StatusType}}">{{.Runner.StatusType}}</span> |  | ||||||
| 					</div> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.latest_online"}}</label> |  | ||||||
| 						<span>{{TimeSinceUnix .Runner.LastOnline $.locale}}</span> |  | ||||||
| 					</div> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.agent_labels"}}</label> |  | ||||||
| 						<span> |  | ||||||
| 							{{range .Runner.AgentLabels}} |  | ||||||
| 							<span>{{.}}</span> |  | ||||||
| 							{{end}} |  | ||||||
| 						</span> |  | ||||||
| 					</div> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.owner_type"}}</label> |  | ||||||
| 						<span>{{.Runner.OwnType}}</span> |  | ||||||
| 					</div> |  | ||||||
| 				</div> |  | ||||||
|  |  | ||||||
| 				<div class="ui divider"></div> |  | ||||||
|  |  | ||||||
| 				<div class="field"> |  | ||||||
| 					<label for="description">{{.locale.Tr "admin.runners.description"}}</label> |  | ||||||
| 					<input id="description" name="description" value="{{.Runner.Description}}"> |  | ||||||
| 				</div> |  | ||||||
| 				<div class="field"> |  | ||||||
| 					<label for="custom_labels">{{.locale.Tr "admin.runners.custom_labels"}}</label> |  | ||||||
| 					<input id="custom_labels" name="custom_labels" value="{{Join .Runner.CustomLabels `,`}}"> |  | ||||||
| 					<p class="help">{{.locale.Tr "admin.runners.custom_labels_helper"}}</p> |  | ||||||
| 				</div> |  | ||||||
|  |  | ||||||
| 				<div class="ui divider"></div> |  | ||||||
|  |  | ||||||
| 				<div class="field"> |  | ||||||
| 					<button type="submit" class="ui green button">{{.locale.Tr "admin.runners.update_runner"}}</button> |  | ||||||
| 					<button type="button" class="ui red button delete-button show-modal" data-modal="#runner-delete-modal"> |  | ||||||
| 						{{.locale.Tr "admin.runners.delete_runner"}}</button> |  | ||||||
| 				</div> |  | ||||||
| 			</form> |  | ||||||
| 		</div> |  | ||||||
|  |  | ||||||
| 		<h4 class="ui top attached header"> |  | ||||||
| 			{{.locale.Tr "admin.runners.task_list"}} |  | ||||||
| 		</h4> |  | ||||||
| 		<div class="ui attached segment"> |  | ||||||
| 			Comming soon |  | ||||||
| 		</div> |  | ||||||
| 	</div> |  | ||||||
| </div> |  | ||||||
|  |  | ||||||
| <div class="ui small modal" id="runner-delete-modal"> |  | ||||||
| 	<div class="header"> |  | ||||||
| 		{{.locale.Tr "admin.runners.delete_runner_header"}} |  | ||||||
| 	</div> |  | ||||||
| 	<div class="content"> |  | ||||||
| 		<div class="ui warning message text left"> |  | ||||||
| 			{{.locale.Tr "admin.runners.delete_runner_notice" | Safe}} |  | ||||||
| 		</div> |  | ||||||
| 		<form class="ui form" action="{{.Link}}/delete" method="post"> |  | ||||||
| 			{{.CsrfTokenHtml}} |  | ||||||
| 			<input type="hidden" name="action" value="delete"> |  | ||||||
| 			<div class="text right actions"> |  | ||||||
| 				<div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> |  | ||||||
| 				<button class="ui red button">{{.locale.Tr "admin.runners.delete_runner_confirm"}}</button> |  | ||||||
| 			</div> |  | ||||||
| 		</form> |  | ||||||
| 	</div> | 	</div> | ||||||
| </div> | </div> | ||||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								templates/org/settings/runners_edit.tmpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								templates/org/settings/runners_edit.tmpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | {{template "base/head" .}} | ||||||
|  | <div class="page-content organization settings webhooks"> | ||||||
|  | 	{{template "org/header" .}} | ||||||
|  | 	<div class="ui container"> | ||||||
|  | 		<div class="ui grid"> | ||||||
|  | 			{{template "org/settings/navbar" .}} | ||||||
|  | 			<div class="twelve wide column content"> | ||||||
|  | 				{{template "runners/edit" .}} | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | </div> | ||||||
|  | {{template "base/footer" .}} | ||||||
| @@ -1,85 +1,61 @@ | |||||||
| {{template "base/head" .}} | <div class="runner-container"> | ||||||
| <div class="page-content admin runners"> | 	{{template "base/alert" .}} | ||||||
| 	{{template "admin/navbar" .}} | 	<h4 class="ui top attached header"> | ||||||
| 	<div class="ui container"> | 		{{.locale.Tr "admin.runners.runner_title"}} #{{.Runner.ID}} {{.Runner.Name}} | ||||||
| 		{{template "base/alert" .}} | 	</h4> | ||||||
| 		<h4 class="ui top attached header"> | 	<div class="ui attached segment"> | ||||||
| 			{{.locale.Tr "admin.runners.runner_title"}} #{{.Runner.ID}} {{.Runner.Name}} | 		<form class="ui form" action="{{.Link}}" method="post"> | ||||||
| 		</h4> | 			{{template "base/disable_form_autofill"}} | ||||||
| 		<div class="ui attached segment"> |  | ||||||
| 			<form class="ui form" action="{{.Link}}" method="post"> |  | ||||||
| 				{{template "base/disable_form_autofill"}} |  | ||||||
| 				{{.CsrfTokenHtml}} |  | ||||||
| 				<div class="runner-basic-info"> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.status"}}</label> |  | ||||||
| 						<span class="runner-status-{{.Runner.StatusType}}">{{.Runner.StatusType}}</span> |  | ||||||
| 					</div> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.latest_online"}}</label> |  | ||||||
| 						<span>{{TimeSinceUnix .Runner.LastOnline $.locale}}</span> |  | ||||||
| 					</div> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.agent_labels"}}</label> |  | ||||||
| 						<span> |  | ||||||
| 							{{range .Runner.AgentLabels}} |  | ||||||
| 							<span>{{.}}</span> |  | ||||||
| 							{{end}} |  | ||||||
| 						</span> |  | ||||||
| 					</div> |  | ||||||
| 					<div class="field dib"> |  | ||||||
| 						<label>{{.locale.Tr "admin.runners.owner_type"}}</label> |  | ||||||
| 						<span>{{.Runner.OwnType}}</span> |  | ||||||
| 					</div> |  | ||||||
| 				</div> |  | ||||||
|  |  | ||||||
| 				<div class="ui divider"></div> |  | ||||||
|  |  | ||||||
| 				<div class="field"> |  | ||||||
| 					<label for="description">{{.locale.Tr "admin.runners.description"}}</label> |  | ||||||
| 					<input id="description" name="description" value="{{.Runner.Description}}"> |  | ||||||
| 				</div> |  | ||||||
| 				<div class="field"> |  | ||||||
| 					<label for="custom_labels">{{.locale.Tr "admin.runners.custom_labels"}}</label> |  | ||||||
| 					<input id="custom_labels" name="custom_labels" value="{{Join .Runner.CustomLabels `,`}}"> |  | ||||||
| 					<p class="help">{{.locale.Tr "admin.runners.custom_labels_helper"}}</p> |  | ||||||
| 				</div> |  | ||||||
|  |  | ||||||
| 				<div class="ui divider"></div> |  | ||||||
|  |  | ||||||
| 				<div class="field"> |  | ||||||
| 					<button type="submit" class="ui green button">{{.locale.Tr "admin.runners.update_runner"}}</button> |  | ||||||
| 					<button type="button" class="ui red button delete-button show-modal" data-modal="#runner-delete-modal"> |  | ||||||
| 						{{.locale.Tr "admin.runners.delete_runner"}}</button> |  | ||||||
| 				</div> |  | ||||||
| 			</form> |  | ||||||
| 		</div> |  | ||||||
|  |  | ||||||
| 		<h4 class="ui top attached header"> |  | ||||||
| 			{{.locale.Tr "admin.runners.task_list"}} |  | ||||||
| 		</h4> |  | ||||||
| 		<div class="ui attached segment"> |  | ||||||
| 			Comming soon |  | ||||||
| 		</div> |  | ||||||
| 	</div> |  | ||||||
| </div> |  | ||||||
|  |  | ||||||
| <div class="ui small modal" id="runner-delete-modal"> |  | ||||||
| 	<div class="header"> |  | ||||||
| 		{{.locale.Tr "admin.runners.delete_runner_header"}} |  | ||||||
| 	</div> |  | ||||||
| 	<div class="content"> |  | ||||||
| 		<div class="ui warning message text left"> |  | ||||||
| 			{{.locale.Tr "admin.runners.delete_runner_notice" | Safe}} |  | ||||||
| 		</div> |  | ||||||
| 		<form class="ui form" action="{{.Link}}/delete" method="post"> |  | ||||||
| 			{{.CsrfTokenHtml}} | 			{{.CsrfTokenHtml}} | ||||||
| 			<input type="hidden" name="action" value="delete"> | 			<div class="runner-basic-info"> | ||||||
| 			<div class="text right actions"> | 				<div class="field dib"> | ||||||
| 				<div class="ui cancel button">{{.locale.Tr "settings.cancel"}}</div> | 					<label>{{.locale.Tr "admin.runners.status"}}</label> | ||||||
| 				<button class="ui red button">{{.locale.Tr "admin.runners.delete_runner_confirm"}}</button> | 					<span class="runner-status-{{.Runner.StatusType}}">{{.Runner.StatusType}}</span> | ||||||
|  | 				</div> | ||||||
|  | 				<div class="field dib"> | ||||||
|  | 					<label>{{.locale.Tr "admin.runners.latest_online"}}</label> | ||||||
|  | 					<span>{{TimeSinceUnix .Runner.LastOnline $.locale}}</span> | ||||||
|  | 				</div> | ||||||
|  | 				<div class="field dib"> | ||||||
|  | 					<label>{{.locale.Tr "admin.runners.agent_labels"}}</label> | ||||||
|  | 					<span> | ||||||
|  | 						{{range .Runner.AgentLabels}} | ||||||
|  | 						<span>{{.}}</span> | ||||||
|  | 						{{end}} | ||||||
|  | 					</span> | ||||||
|  | 				</div> | ||||||
|  | 				<div class="field dib"> | ||||||
|  | 					<label>{{.locale.Tr "admin.runners.owner_type"}}</label> | ||||||
|  | 					<span>{{.Runner.OwnType}}</span> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  |  | ||||||
|  | 			<div class="ui divider"></div> | ||||||
|  |  | ||||||
|  | 			<div class="field"> | ||||||
|  | 				<label for="description">{{.locale.Tr "admin.runners.description"}}</label> | ||||||
|  | 				<input id="description" name="description" value="{{.Runner.Description}}"> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="field"> | ||||||
|  | 				<label for="custom_labels">{{.locale.Tr "admin.runners.custom_labels"}}</label> | ||||||
|  | 				<input id="custom_labels" name="custom_labels" value="{{Join .Runner.CustomLabels `,`}}"> | ||||||
|  | 				<p class="help">{{.locale.Tr "admin.runners.custom_labels_helper"}}</p> | ||||||
|  | 			</div> | ||||||
|  |  | ||||||
|  | 			<div class="ui divider"></div> | ||||||
|  |  | ||||||
|  | 			<div class="field"> | ||||||
|  | 				<button type="submit" class="ui green button">{{.locale.Tr "admin.runners.update_runner"}}</button> | ||||||
|  | 				<button type="button" class="ui red button delete-button show-modal" data-modal="#runner-delete-modal"> | ||||||
|  | 					{{.locale.Tr "admin.runners.delete_runner"}}</button> | ||||||
| 			</div> | 			</div> | ||||||
| 		</form> | 		</form> | ||||||
| 	</div> | 	</div> | ||||||
|  |  | ||||||
|  | 	<h4 class="ui top attached header"> | ||||||
|  | 		{{.locale.Tr "admin.runners.task_list"}} | ||||||
|  | 	</h4> | ||||||
|  | 	<div class="ui attached segment"> | ||||||
|  | 		Comming soon | ||||||
|  | 	</div> | ||||||
| </div> | </div> | ||||||
| {{template "base/footer" .}} |  | ||||||
|   | |||||||
| @@ -62,10 +62,17 @@ | |||||||
| 				<tr> | 				<tr> | ||||||
| 					<td><span class="runner-status-{{.StatusType}}">{{.StatusType}}</span></td> | 					<td><span class="runner-status-{{.StatusType}}">{{.StatusType}}</span></td> | ||||||
| 					<td> | 					<td> | ||||||
|  | 						{{if .Editable $.RunnerOnwerID $.RunnerRepoID}} | ||||||
| 						<a href="{{$.Link}}/{{.ID}}" class="tooltip" data-content="{{.Description}}"> | 						<a href="{{$.Link}}/{{.ID}}" class="tooltip" data-content="{{.Description}}"> | ||||||
| 							<span class="runner-id">#{{.ID}}</span> | 							<span class="runner-id">#{{.ID}}</span> | ||||||
| 							<span class="runner-name">{{.Name}}</span> | 							<span class="runner-name">{{.Name}}</span> | ||||||
| 						</a> | 						</a> | ||||||
|  | 						{{else}} | ||||||
|  | 						<p class="tooltip" data-content="{{.Description}}"> | ||||||
|  | 							<span class="runner-id">#{{.ID}}</span> | ||||||
|  | 							<span class="runner-name">{{.Name}}</span> | ||||||
|  | 						</p> | ||||||
|  | 						{{end}} | ||||||
| 					</td> | 					</td> | ||||||
| 					<td>{{.OwnType}}</td> | 					<td>{{.OwnType}}</td> | ||||||
| 					<td class="runner-tags"> | 					<td class="runner-tags"> | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| @import "variables.less"; | @import "variables.less"; | ||||||
|  |  | ||||||
| .admin.runners { | .runner-container { | ||||||
|   .runner-ops > a { |   .runner-ops > a { | ||||||
|     margin-left: 0.5em; |     margin-left: 0.5em; | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user