diff --git a/models/repo.go b/models/repo.go index e95887077c..38dc3f1ab1 100644 --- a/models/repo.go +++ b/models/repo.go @@ -11,6 +11,7 @@ import ( _ "image/jpeg" // Needed for jpeg support + actions_model "code.gitea.io/gitea/models/actions" activities_model "code.gitea.io/gitea/models/activities" admin_model "code.gitea.io/gitea/models/admin" asymkey_model "code.gitea.io/gitea/models/asymkey" @@ -26,6 +27,7 @@ import ( "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/models/webhook" + actions_module "code.gitea.io/gitea/modules/actions" "code.gitea.io/gitea/modules/lfs" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/storage" @@ -52,6 +54,12 @@ func DeleteRepository(doer *user_model.User, uid, repoID int64) error { defer committer.Close() sess := db.GetEngine(ctx) + // Query the action tasks of this repo, they will be needed after they have been deleted to remove the logs + tasks, err := actions_model.FindTasks(ctx, actions_model.FindTaskOptions{RepoID: repoID}) + if err != nil { + return fmt.Errorf("find actions tasks of repo %v: %w", repoID, err) + } + // In case is a organization. org, err := user_model.GetUserByID(ctx, uid) if err != nil { @@ -152,6 +160,11 @@ func DeleteRepository(doer *user_model.User, uid, repoID int64) error { &repo_model.Watch{RepoID: repoID}, &webhook.Webhook{RepoID: repoID}, &secret_model.Secret{RepoID: repoID}, + &actions_model.ActionTaskStep{RepoID: repoID}, + &actions_model.ActionTask{RepoID: repoID}, + &actions_model.ActionRunJob{RepoID: repoID}, + &actions_model.ActionRun{RepoID: repoID}, + &actions_model.ActionRunner{RepoID: repoID}, ); err != nil { return fmt.Errorf("deleteBeans: %w", err) } @@ -315,6 +328,15 @@ func DeleteRepository(doer *user_model.User, uid, repoID int64) error { } } + // Finally, delete action logs after the actions have already been deleted to avoid new log files + for _, task := range tasks { + err := actions_module.RemoveLogs(ctx, task.LogInStorage, task.LogFilename) + if err != nil { + log.Error("remove log file %q: %v", task.LogFilename, err) + // go on + } + } + return nil } diff --git a/services/actions/actions.go b/services/actions/actions.go index f415ae3824..e5d8cc2228 100644 --- a/services/actions/actions.go +++ b/services/actions/actions.go @@ -10,12 +10,9 @@ import ( actions_model "code.gitea.io/gitea/models/actions" "code.gitea.io/gitea/models/db" git_model "code.gitea.io/gitea/models/git" - repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" webhook_model "code.gitea.io/gitea/models/webhook" - actions_module "code.gitea.io/gitea/modules/actions" "code.gitea.io/gitea/modules/graceful" - "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/queue" "code.gitea.io/gitea/modules/setting" @@ -33,46 +30,6 @@ func Init() { notification.RegisterNotifier(NewNotifier()) } -func DeleteResourceOfRepository(ctx context.Context, repo *repo_model.Repository) error { - tasks, err := actions_model.FindTasks(ctx, actions_model.FindTaskOptions{RepoID: repo.ID}) - if err != nil { - return fmt.Errorf("find task of repo %v: %w", repo.ID, err) - } - - if err := db.WithTx(ctx, func(ctx context.Context) error { - e := db.GetEngine(ctx) - if _, err := e.Delete(&actions_model.ActionTaskStep{RepoID: repo.ID}); err != nil { - return fmt.Errorf("delete actions task steps of repo %d: %w", repo.ID, err) - } - if _, err := e.Delete(&actions_model.ActionTask{RepoID: repo.ID}); err != nil { - return fmt.Errorf("delete actions tasks of repo %d: %w", repo.ID, err) - } - if _, err := e.Delete(&actions_model.ActionRunJob{RepoID: repo.ID}); err != nil { - return fmt.Errorf("delete actions run jobs of repo %d: %w", repo.ID, err) - } - if _, err := e.Delete(&actions_model.ActionRun{RepoID: repo.ID}); err != nil { - return fmt.Errorf("delete actions runs of repo %d: %w", repo.ID, err) - } - if _, err := e.Delete(&actions_model.ActionRunner{RepoID: repo.ID}); err != nil { - return fmt.Errorf("delete actions runner of repo %d: %w", repo.ID, err) - } - return nil - }); err != nil { - return err - } - - // remove logs file after tasks have been deleted, to avoid new log files - for _, task := range tasks { - err := actions_module.RemoveLogs(ctx, task.LogInStorage, task.LogFilename) - if err != nil { - log.Error("remove log file %q: %v", task.LogFilename, err) - // go on - } - } - - return nil -} - func CreateCommitStatus(ctx context.Context, job *actions_model.ActionRunJob) error { if err := job.LoadAttributes(ctx); err != nil { return fmt.Errorf("load run: %w", err) diff --git a/services/repository/repository.go b/services/repository/repository.go index 4872e3ef7b..3c3e7e82c3 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -20,7 +20,6 @@ import ( "code.gitea.io/gitea/modules/notification" repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" - actions_service "code.gitea.io/gitea/services/actions" pull_service "code.gitea.io/gitea/services/pull" ) @@ -52,11 +51,6 @@ func DeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_mod return err } - // deletes actions resource after the repo has been deleted, to avoid new tasks - if err := actions_service.DeleteResourceOfRepository(ctx, repo); err != nil { - return fmt.Errorf("delete actions resources failed: %w", err) - } - return packages_model.UnlinkRepositoryFromAllPackages(ctx, repo.ID) }