mirror of
https://github.com/go-gitea/gitea.git
synced 2025-05-18 00:49:09 -04:00
64 lines
2.1 KiB
Go
64 lines
2.1 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package bots
|
|
|
|
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/log"
|
|
"code.gitea.io/gitea/modules/queue"
|
|
)
|
|
|
|
func Init() {
|
|
jobEmitterQueue = queue.CreateUniqueQueue("bots_ready_job", jobEmitterQueueHandle, new(jobUpdate))
|
|
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
|
|
}
|