From ab21418bc82a9d9d54b0061bbe953f66ff4d5ce5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 11 Feb 2025 00:23:58 -0800 Subject: [PATCH 1/4] Add migrations and doctor fixes --- models/actions/runner.go | 14 ++++++++++++++ models/actions/variable.go | 11 +++++++++++ models/migrations/migrations.go | 1 + models/migrations/v1_24/v313.go | 19 +++++++++++++++++++ models/secret/secret.go | 14 ++++++++++++++ services/doctor/dbconsistency.go | 19 +++++++++++++++++++ 6 files changed, 78 insertions(+) create mode 100644 models/migrations/v1_24/v313.go diff --git a/models/actions/runner.go b/models/actions/runner.go index 798a647180335..97db0ca7eac2f 100644 --- a/models/actions/runner.go +++ b/models/actions/runner.go @@ -337,3 +337,17 @@ func FixRunnersWithoutBelongingRepo(ctx context.Context) (int64, error) { } return res.RowsAffected() } + +func CountWrongRepoLevelRunners(ctx context.Context) (int64, error) { + var result int64 + _, err := db.GetEngine(ctx).SQL("SELECT count(`id`) FROM `action_runner` WHERE `repo_id` > 0 AND `owner_id` > 0").Get(&result) + return result, err +} + +func UpdateWrongRepoLevelRunners(ctx context.Context) (int64, error) { + result, err := db.GetEngine(ctx).Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") + if err != nil { + return 0, err + } + return result.RowsAffected() +} diff --git a/models/actions/variable.go b/models/actions/variable.go index 163bb12c9360c..1da03f238ed6c 100644 --- a/models/actions/variable.go +++ b/models/actions/variable.go @@ -147,3 +147,14 @@ func GetVariablesOfRun(ctx context.Context, run *ActionRun) (map[string]string, return variables, nil } + +func CountWrongRepoLevelVariables(ctx context.Context) (int64, error) { + var result int64 + _, err := db.GetEngine(ctx).SQL("SELECT count(`id`) FROM `action_variable` WHERE `repo_id` > 0 AND `owner_id` > 0").Get(&result) + return result, err +} + +func UpdateWrongRepoLevelVariables(ctx context.Context) (int64, error) { + result, err := db.GetEngine(ctx).Exec("UPDATE `action_variable` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") + return err +} diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 95364ab705751..e1775f6bc7a89 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -373,6 +373,7 @@ func prepareMigrationTasks() []*migration { // Gitea 1.23.0-rc0 ends at migration ID number 311 (database version 312) newMigration(312, "Add DeleteBranchAfterMerge to AutoMerge", v1_24.AddDeleteBranchAfterMergeForAutoMerge), + newMigration(313, "Update OwnerID as zero for repository level runners", v1_24.UpdateOwnerIDOfRepoLevelRunners), } return preparedMigrations } diff --git a/models/migrations/v1_24/v313.go b/models/migrations/v1_24/v313.go new file mode 100644 index 0000000000000..0ceef5d885698 --- /dev/null +++ b/models/migrations/v1_24/v313.go @@ -0,0 +1,19 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_24 //nolint + +import ( + "xorm.io/xorm" +) + +func UpdateOwnerIDOfRepoLevelRunners(x *xorm.Engine) error { + if _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0"); err != nil { + return err + } + if _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0"); err != nil { + return err + } + _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") + return err +} diff --git a/models/secret/secret.go b/models/secret/secret.go index ce0ad65a799e4..eab9cf0712d83 100644 --- a/models/secret/secret.go +++ b/models/secret/secret.go @@ -165,3 +165,17 @@ func GetSecretsOfTask(ctx context.Context, task *actions_model.ActionTask) (map[ return secrets, nil } + +func CountWrongRepoLevelSecrets(ctx context.Context) (int64, error) { + var result int64 + _, err := db.GetEngine(ctx).SQL("SELECT count(`id`) FROM `secret` WHERE `repo_id` > 0 AND `owner_id` > 0").Get(&result) + return result, err +} + +func UpdateWrongRepoLevelSecrets(ctx context.Context) (int64, error) { + result, err := db.GetEngine(ctx).Exec("UPDATE `secret` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") + if err != nil { + return 0, err + } + return result.RowsAffected() +} diff --git a/services/doctor/dbconsistency.go b/services/doctor/dbconsistency.go index 7cb7445148a0b..62326ed07c865 100644 --- a/services/doctor/dbconsistency.go +++ b/services/doctor/dbconsistency.go @@ -12,6 +12,7 @@ import ( issues_model "code.gitea.io/gitea/models/issues" "code.gitea.io/gitea/models/migrations" repo_model "code.gitea.io/gitea/models/repo" + secret_model "code.gitea.io/gitea/models/secret" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" ) @@ -164,6 +165,24 @@ func prepareDBConsistencyChecks() []consistencyCheck { Fixer: repo_model.DeleteOrphanedTopics, FixedMessage: "Removed", }, + { + Name: "Repository level Runners with non-zero owner_id", + Counter: actions_model.CountWrongRepoLevelRunners, + Fixer: actions_model.UpdateWrongRepoLevelRunners, + FixedMessage: "Corrected", + }, + { + Name: "Repository level Variables with non-zero owner_id", + Counter: actions_model.CountWrongRepoLevelVariables, + Fixer: actions_model.UpdateWrongRepoLevelVariables, + FixedMessage: "Corrected", + }, + { + Name: "Repository level Secrets with non-zero owner_id", + Counter: secret_model.CountWrongRepoLevelSecrets, + Fixer: secret_model.UpdateWrongRepoLevelSecrets, + FixedMessage: "Corrected", + }, } // TODO: function to recalc all counters From 889082ec83e647a22a56bf4069f02b82c4b870b8 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 11 Feb 2025 09:46:37 -0800 Subject: [PATCH 2/4] Fix lint --- models/actions/variable.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/models/actions/variable.go b/models/actions/variable.go index 1da03f238ed6c..1929cffbd8623 100644 --- a/models/actions/variable.go +++ b/models/actions/variable.go @@ -156,5 +156,8 @@ func CountWrongRepoLevelVariables(ctx context.Context) (int64, error) { func UpdateWrongRepoLevelVariables(ctx context.Context) (int64, error) { result, err := db.GetEngine(ctx).Exec("UPDATE `action_variable` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") - return err + if err != nil { + return 0, err + } + return result.RowsAffected() } From febad275f8aa3fdfc87f0ed50764e999e64ebe13 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 18 Feb 2025 16:47:37 -0800 Subject: [PATCH 3/4] Fix bug --- models/migrations/v1_24/v314.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/migrations/v1_24/v314.go b/models/migrations/v1_24/v314.go index fbabaf4ca876b..4cf17e1c2ba8e 100644 --- a/models/migrations/v1_24/v314.go +++ b/models/migrations/v1_24/v314.go @@ -11,9 +11,9 @@ func UpdateOwnerIDOfRepoLevelRunners(x *xorm.Engine) error { if _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0"); err != nil { return err } - if _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0"); err != nil { + if _, err := x.Exec("UPDATE `action_variable` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0"); err != nil { return err } - _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") + _, err := x.Exec("UPDATE `secret` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0") return err } From 4bf5911d2c94319fd18fbe9442d7fef43eec4407 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 28 Feb 2025 14:21:05 -0800 Subject: [PATCH 4/4] Fix the migration function name --- models/migrations/migrations.go | 2 +- models/migrations/v1_24/v314.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index fbbeeb6b98bba..fd291c5692c8f 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -374,7 +374,7 @@ func prepareMigrationTasks() []*migration { // Gitea 1.23.0-rc0 ends at migration ID number 311 (database version 312) newMigration(312, "Add DeleteBranchAfterMerge to AutoMerge", v1_24.AddDeleteBranchAfterMergeForAutoMerge), newMigration(313, "Move PinOrder from issue table to a new table issue_pin", v1_24.MovePinOrderToTableIssuePin), - newMigration(314, "Update OwnerID as zero for repository level runners", v1_24.UpdateOwnerIDOfRepoLevelRunners), + newMigration(314, "Update OwnerID as zero for repository level action tables", v1_24.UpdateOwnerIDOfRepoLevelActionsTables), } return preparedMigrations } diff --git a/models/migrations/v1_24/v314.go b/models/migrations/v1_24/v314.go index 4cf17e1c2ba8e..e537be13b5c35 100644 --- a/models/migrations/v1_24/v314.go +++ b/models/migrations/v1_24/v314.go @@ -7,7 +7,7 @@ import ( "xorm.io/xorm" ) -func UpdateOwnerIDOfRepoLevelRunners(x *xorm.Engine) error { +func UpdateOwnerIDOfRepoLevelActionsTables(x *xorm.Engine) error { if _, err := x.Exec("UPDATE `action_runner` SET `owner_id` = 0 WHERE `repo_id` > 0 AND `owner_id` > 0"); err != nil { return err }