summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorZettat123 <zettat123@gmail.com>2024-04-23 11:51:52 +0800
committerGitHub <noreply@github.com>2024-04-23 03:51:52 +0000
commit30dd4beeee631860c7dd393c341e9955997095a4 (patch)
tree9ba249e01f2838cf63901fe0452e35fd551982c7 /models
parente94864e86c43f435af7e1fc3c4831a4cc0a3e981 (diff)
downloadgitea-30dd4beeee631860c7dd393c341e9955997095a4.tar.gz
gitea-30dd4beeee631860c7dd393c341e9955997095a4.zip
Add a db consistency check to remove runners that do not belong to a repository (#30614)
Follow #30406
Diffstat (limited to 'models')
-rw-r--r--models/actions/runner.go26
1 files changed, 24 insertions, 2 deletions
diff --git a/models/actions/runner.go b/models/actions/runner.go
index 67f003387b..9192925d5a 100644
--- a/models/actions/runner.go
+++ b/models/actions/runner.go
@@ -270,7 +270,7 @@ func CountRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) {
// Only affect action runners were a owner ID is set, as actions runners
// could also be created on a repository.
return db.GetEngine(ctx).Table("action_runner").
- Join("LEFT", "user", "`action_runner`.owner_id = `user`.id").
+ Join("LEFT", "`user`", "`action_runner`.owner_id = `user`.id").
Where("`action_runner`.owner_id != ?", 0).
And(builder.IsNull{"`user`.id"}).
Count(new(ActionRunner))
@@ -279,7 +279,7 @@ func CountRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) {
func FixRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) {
subQuery := builder.Select("`action_runner`.id").
From("`action_runner`").
- Join("LEFT", "user", "`action_runner`.owner_id = `user`.id").
+ Join("LEFT", "`user`", "`action_runner`.owner_id = `user`.id").
Where(builder.Neq{"`action_runner`.owner_id": 0}).
And(builder.IsNull{"`user`.id"})
b := builder.Delete(builder.In("id", subQuery)).From("`action_runner`")
@@ -289,3 +289,25 @@ func FixRunnersWithoutBelongingOwner(ctx context.Context) (int64, error) {
}
return res.RowsAffected()
}
+
+func CountRunnersWithoutBelongingRepo(ctx context.Context) (int64, error) {
+ return db.GetEngine(ctx).Table("action_runner").
+ Join("LEFT", "`repository`", "`action_runner`.repo_id = `repository`.id").
+ Where("`action_runner`.repo_id != ?", 0).
+ And(builder.IsNull{"`repository`.id"}).
+ Count(new(ActionRunner))
+}
+
+func FixRunnersWithoutBelongingRepo(ctx context.Context) (int64, error) {
+ subQuery := builder.Select("`action_runner`.id").
+ From("`action_runner`").
+ Join("LEFT", "`repository`", "`action_runner`.repo_id = `repository`.id").
+ Where(builder.Neq{"`action_runner`.repo_id": 0}).
+ And(builder.IsNull{"`repository`.id"})
+ b := builder.Delete(builder.In("id", subQuery)).From("`action_runner`")
+ res, err := db.GetEngine(ctx).Exec(b)
+ if err != nil {
+ return 0, err
+ }
+ return res.RowsAffected()
+}