mirror of
https://github.com/go-gitea/gitea.git
synced 2025-05-18 00:49:09 -04:00
feat: remove bots resources after deleting repo
This commit is contained in:
parent
e33d4d7700
commit
c1fce2cf7d
@ -365,6 +365,7 @@ func CreateTaskForRunner(ctx context.Context, runner *BotRunner) (*BotTask, bool
|
|||||||
Name: v.String(),
|
Name: v.String(),
|
||||||
TaskID: task.ID,
|
TaskID: task.ID,
|
||||||
Number: int64(i),
|
Number: int64(i),
|
||||||
|
RepoID: task.RepoID,
|
||||||
Status: StatusWaiting,
|
Status: StatusWaiting,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ type BotTaskStep struct {
|
|||||||
Name string
|
Name string
|
||||||
TaskID int64 `xorm:"index unique(task_number)"`
|
TaskID int64 `xorm:"index unique(task_number)"`
|
||||||
Number int64 `xorm:"index unique(task_number)"`
|
Number int64 `xorm:"index unique(task_number)"`
|
||||||
|
RepoID int64 `xorm:"index"`
|
||||||
Status Status `xorm:"index"`
|
Status Status `xorm:"index"`
|
||||||
LogIndex int64
|
LogIndex int64
|
||||||
LogLength int64
|
LogLength int64
|
||||||
|
@ -134,6 +134,7 @@ func addBotTables(x *xorm.Engine) error {
|
|||||||
Name string
|
Name string
|
||||||
TaskID int64 `xorm:"index unique(task_number)"`
|
TaskID int64 `xorm:"index unique(task_number)"`
|
||||||
Number int64 `xorm:"index unique(task_number)"`
|
Number int64 `xorm:"index unique(task_number)"`
|
||||||
|
RepoID int64 `xorm:"index"`
|
||||||
Status int `xorm:"index"`
|
Status int `xorm:"index"`
|
||||||
LogIndex int64
|
LogIndex int64
|
||||||
LogLength int64
|
LogLength int64
|
||||||
|
@ -110,6 +110,22 @@ func TransferLogs(ctx context.Context, filename string) (func(), error) {
|
|||||||
return remove, nil
|
return remove, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RemoveLogs(ctx context.Context, inStorage bool, filename string) error {
|
||||||
|
if !inStorage {
|
||||||
|
name := DBFSPrefix + filename
|
||||||
|
err := dbfs.Remove(ctx, name)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("dbfs remove %q: %w", name, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
err := storage.Bots.Delete(filename)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("storage delete %q: %w", filename, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func openLogs(ctx context.Context, inStorage bool, filename string) (io.ReadSeekCloser, error) {
|
func openLogs(ctx context.Context, inStorage bool, filename string) (io.ReadSeekCloser, error) {
|
||||||
if !inStorage {
|
if !inStorage {
|
||||||
name := DBFSPrefix + filename
|
name := DBFSPrefix + filename
|
||||||
|
@ -5,7 +5,15 @@
|
|||||||
package bots
|
package bots
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
bots_model "code.gitea.io/gitea/models/bots"
|
||||||
|
"code.gitea.io/gitea/models/db"
|
||||||
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
|
bots_module "code.gitea.io/gitea/modules/bots"
|
||||||
"code.gitea.io/gitea/modules/graceful"
|
"code.gitea.io/gitea/modules/graceful"
|
||||||
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/queue"
|
"code.gitea.io/gitea/modules/queue"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -13,3 +21,43 @@ func Init() {
|
|||||||
jobEmitterQueue = queue.CreateUniqueQueue("bots_ready_job", jobEmitterQueueHandle, new(jobUpdate))
|
jobEmitterQueue = queue.CreateUniqueQueue("bots_ready_job", jobEmitterQueueHandle, new(jobUpdate))
|
||||||
go graceful.GetManager().RunWithShutdownFns(jobEmitterQueue.Run)
|
go graceful.GetManager().RunWithShutdownFns(jobEmitterQueue.Run)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeleteResourceOfRepository(ctx context.Context, repo *repo_model.Repository) error {
|
||||||
|
tasks, _, err := bots_model.FindTasks(ctx, bots_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(&bots_model.BotTaskStep{RepoID: repo.ID}); err != nil {
|
||||||
|
return fmt.Errorf("delete bots task steps of repo %d: %w", repo.ID, err)
|
||||||
|
}
|
||||||
|
if _, err := e.Delete(&bots_model.BotTask{RepoID: repo.ID}); err != nil {
|
||||||
|
return fmt.Errorf("delete bots tasks of repo %d: %w", repo.ID, err)
|
||||||
|
}
|
||||||
|
if _, err := e.Delete(&bots_model.BotRunJob{RepoID: repo.ID}); err != nil {
|
||||||
|
return fmt.Errorf("delete bots run jobs of repo %d: %w", repo.ID, err)
|
||||||
|
}
|
||||||
|
if _, err := e.Delete(&bots_model.BotRun{RepoID: repo.ID}); err != nil {
|
||||||
|
return fmt.Errorf("delete bots runs of repo %d: %w", repo.ID, err)
|
||||||
|
}
|
||||||
|
if _, err := e.Delete(&bots_model.BotRunner{RepoID: repo.ID}); err != nil {
|
||||||
|
return fmt.Errorf("delete bots 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 := bots_module.RemoveLogs(ctx, task.LogInStorage, task.LogFilename)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("remove log file %q: %v", task.LogFilename, err)
|
||||||
|
// go on
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -20,6 +20,7 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/notification"
|
"code.gitea.io/gitea/modules/notification"
|
||||||
repo_module "code.gitea.io/gitea/modules/repository"
|
repo_module "code.gitea.io/gitea/modules/repository"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
bots_service "code.gitea.io/gitea/services/bots"
|
||||||
pull_service "code.gitea.io/gitea/services/pull"
|
pull_service "code.gitea.io/gitea/services/pull"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -51,6 +52,11 @@ func DeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_mod
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deletes bots resource after the repo has been deleted, to avoid new bots tasks
|
||||||
|
if err := bots_service.DeleteResourceOfRepository(ctx, repo); err != nil {
|
||||||
|
log.Error("delete bots resource failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
return packages_model.UnlinkRepositoryFromAllPackages(ctx, repo.ID)
|
return packages_model.UnlinkRepositoryFromAllPackages(ctx, repo.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user