@@ -10,6 +10,7 @@ import (
1010
1111 actions_model "code.gitea.io/gitea/models/actions"
1212 "code.gitea.io/gitea/models/db"
13+ "code.gitea.io/gitea/modules/log"
1314 "code.gitea.io/gitea/modules/setting"
1415 "code.gitea.io/gitea/modules/templates"
1516 actions_shared "code.gitea.io/gitea/routers/web/shared/actions"
@@ -179,9 +180,57 @@ func RunnerDeletePost(ctx *context.Context) {
179180 ctx .ServerError ("getRunnersCtx" , err )
180181 return
181182 }
182- actions_shared .RunnerDeletePost (ctx , ctx .PathParamInt64 ("runnerid" ), rCtx .RedirectLink , rCtx .RedirectLink + url .PathEscape (ctx .PathParam ("runnerid" )))
183+
184+ runner , ok := findRunner (ctx , rCtx )
185+ if ! ok {
186+ return
187+ }
188+
189+ successRedirectTo := rCtx .RedirectLink
190+ failedRedirectTo := rCtx .RedirectLink + url .PathEscape (ctx .PathParam ("runnerid" ))
191+
192+ if err := actions_model .DeleteRunner (ctx , runner .ID ); err != nil {
193+ log .Warn ("DeleteRunnerPost.UpdateRunner failed: %v, url: %s" , err , ctx .Req .URL )
194+ ctx .Flash .Warning (ctx .Tr ("actions.runners.delete_runner_failed" ))
195+
196+ ctx .JSONRedirect (failedRedirectTo )
197+ return
198+ }
199+
200+ log .Info ("DeleteRunnerPost success: %s" , ctx .Req .URL )
201+
202+ ctx .Flash .Success (ctx .Tr ("actions.runners.delete_runner_success" ))
203+
204+ ctx .JSONRedirect (successRedirectTo )
183205}
184206
185207func RedirectToDefaultSetting (ctx * context.Context ) {
186208 ctx .Redirect (ctx .Repo .RepoLink + "/settings/actions/runners" )
187209}
210+
211+ func findRunner (ctx * context.Context , rCtx * runnersCtx ) (* actions_model.ActionRunner , bool ) {
212+ runnerID := ctx .PathParamInt64 ("runnerid" )
213+ opts := & actions_model.FindRunnerOptions {
214+ IDs : []int64 {runnerID },
215+ }
216+ switch {
217+ case rCtx .IsRepo :
218+ opts .RepoID = rCtx .RepoID
219+ case rCtx .IsOrg , rCtx .IsUser :
220+ opts .OwnerID = rCtx .OwnerID
221+ case rCtx .IsAdmin :
222+ // do nothing
223+ }
224+
225+ var runner * actions_model.ActionRunner
226+ if got , err := db .Find [actions_model.ActionRunner ](ctx , opts ); err != nil {
227+ ctx .ServerError ("FindRunner" , err )
228+ return nil , false
229+ } else if len (got ) == 0 {
230+ ctx .NotFound ("FindRunner" , errors .New ("runner not found" ))
231+ return nil , false
232+ } else {
233+ runner = got [0 ]
234+ }
235+ return runner , true
236+ }
0 commit comments