|
|
|
@ -8,6 +8,7 @@ import ( |
|
|
|
|
"fmt" |
|
|
|
|
"strings" |
|
|
|
|
|
|
|
|
|
actions_model "code.gitea.io/gitea/models/actions" |
|
|
|
|
"code.gitea.io/gitea/models/db" |
|
|
|
|
git_model "code.gitea.io/gitea/models/git" |
|
|
|
|
"code.gitea.io/gitea/models/migrations" |
|
|
|
@ -32,7 +33,7 @@ var CmdMigrateStorage = cli.Command{ |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "type, t", |
|
|
|
|
Value: "", |
|
|
|
|
Usage: "Type of stored files to copy. Allowed types: 'attachments', 'lfs', 'avatars', 'repo-avatars', 'repo-archivers', 'packages'", |
|
|
|
|
Usage: "Type of stored files to copy. Allowed types: 'attachments', 'lfs', 'avatars', 'repo-avatars', 'repo-archivers', 'packages', 'actions-log'", |
|
|
|
|
}, |
|
|
|
|
cli.StringFlag{ |
|
|
|
|
Name: "storage, s", |
|
|
|
@ -134,6 +135,22 @@ func migratePackages(ctx context.Context, dstStorage storage.ObjectStorage) erro |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func migrateActionsLog(ctx context.Context, dstStorage storage.ObjectStorage) error { |
|
|
|
|
return db.Iterate(ctx, nil, func(ctx context.Context, task *actions_model.ActionTask) error { |
|
|
|
|
if task.LogExpired { |
|
|
|
|
// the log has been cleared
|
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
if !task.LogInStorage { |
|
|
|
|
// running tasks store logs in DBFS
|
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
p := task.LogFilename |
|
|
|
|
_, err := storage.Copy(dstStorage, p, storage.Actions, p) |
|
|
|
|
return err |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func runMigrateStorage(ctx *cli.Context) error { |
|
|
|
|
stdCtx, cancel := installSignals() |
|
|
|
|
defer cancel() |
|
|
|
@ -201,6 +218,7 @@ func runMigrateStorage(ctx *cli.Context) error { |
|
|
|
|
"repo-avatars": migrateRepoAvatars, |
|
|
|
|
"repo-archivers": migrateRepoArchivers, |
|
|
|
|
"packages": migratePackages, |
|
|
|
|
"actions-log": migrateActionsLog, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
tp := strings.ToLower(ctx.String("type")) |
|
|
|
|