2020-05-17 01:31:38 +02:00
|
|
|
// Copyright 2020 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 cron
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/models"
|
2021-11-10 06:13:16 +01:00
|
|
|
"code.gitea.io/gitea/models/webhook"
|
2020-05-17 01:31:38 +02:00
|
|
|
repository_service "code.gitea.io/gitea/modules/repository"
|
2020-12-21 15:39:41 +01:00
|
|
|
"code.gitea.io/gitea/modules/setting"
|
2021-07-24 12:16:34 +02:00
|
|
|
"code.gitea.io/gitea/services/auth"
|
2021-11-16 16:25:33 +01:00
|
|
|
"code.gitea.io/gitea/services/migrations"
|
2020-05-17 01:31:38 +02:00
|
|
|
mirror_service "code.gitea.io/gitea/services/mirror"
|
|
|
|
)
|
|
|
|
|
|
|
|
func registerUpdateMirrorTask() {
|
2021-11-23 04:09:35 +01:00
|
|
|
type UpdateMirrorTaskConfig struct {
|
|
|
|
BaseConfig
|
|
|
|
PullLimit int
|
|
|
|
PushLimit int
|
|
|
|
}
|
|
|
|
|
|
|
|
RegisterTaskFatal("update_mirrors", &UpdateMirrorTaskConfig{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: false,
|
|
|
|
Schedule: "@every 10m",
|
|
|
|
NoSuccessNotice: true,
|
|
|
|
},
|
|
|
|
PullLimit: 50,
|
|
|
|
PushLimit: 50,
|
|
|
|
}, func(ctx context.Context, _ *models.User, cfg Config) error {
|
|
|
|
umtc := cfg.(*UpdateMirrorTaskConfig)
|
|
|
|
return mirror_service.Update(ctx, umtc.PullLimit, umtc.PushLimit)
|
2020-05-17 01:31:38 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerRepoHealthCheck() {
|
|
|
|
type RepoHealthCheckConfig struct {
|
|
|
|
BaseConfig
|
|
|
|
Timeout time.Duration
|
|
|
|
Args []string `delim:" "`
|
|
|
|
}
|
|
|
|
RegisterTaskFatal("repo_health_check", &RepoHealthCheckConfig{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: false,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2020-05-17 01:31:38 +02:00
|
|
|
},
|
|
|
|
Timeout: 60 * time.Second,
|
|
|
|
Args: []string{},
|
|
|
|
}, func(ctx context.Context, _ *models.User, config Config) error {
|
|
|
|
rhcConfig := config.(*RepoHealthCheckConfig)
|
|
|
|
return repository_service.GitFsck(ctx, rhcConfig.Timeout, rhcConfig.Args)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerCheckRepoStats() {
|
|
|
|
RegisterTaskFatal("check_repo_stats", &BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: true,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2020-05-17 01:31:38 +02:00
|
|
|
}, func(ctx context.Context, _ *models.User, _ Config) error {
|
|
|
|
return models.CheckRepoStats(ctx)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerArchiveCleanup() {
|
|
|
|
RegisterTaskFatal("archive_cleanup", &OlderThanConfig{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: true,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2020-05-17 01:31:38 +02:00
|
|
|
},
|
|
|
|
OlderThan: 24 * time.Hour,
|
|
|
|
}, func(ctx context.Context, _ *models.User, config Config) error {
|
|
|
|
acConfig := config.(*OlderThanConfig)
|
|
|
|
return models.DeleteOldRepositoryArchives(ctx, acConfig.OlderThan)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerSyncExternalUsers() {
|
|
|
|
RegisterTaskFatal("sync_external_users", &UpdateExistingConfig{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: false,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2020-05-17 01:31:38 +02:00
|
|
|
},
|
|
|
|
UpdateExisting: true,
|
|
|
|
}, func(ctx context.Context, _ *models.User, config Config) error {
|
|
|
|
realConfig := config.(*UpdateExistingConfig)
|
2021-07-24 12:16:34 +02:00
|
|
|
return auth.SyncExternalUsers(ctx, realConfig.UpdateExisting)
|
2020-05-17 01:31:38 +02:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerDeletedBranchesCleanup() {
|
|
|
|
RegisterTaskFatal("deleted_branches_cleanup", &OlderThanConfig{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: true,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2020-05-17 01:31:38 +02:00
|
|
|
},
|
|
|
|
OlderThan: 24 * time.Hour,
|
|
|
|
}, func(ctx context.Context, _ *models.User, config Config) error {
|
|
|
|
realConfig := config.(*OlderThanConfig)
|
|
|
|
models.RemoveOldDeletedBranches(ctx, realConfig.OlderThan)
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func registerUpdateMigrationPosterID() {
|
|
|
|
RegisterTaskFatal("update_migration_poster_id", &BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: true,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2020-05-17 01:31:38 +02:00
|
|
|
}, func(ctx context.Context, _ *models.User, _ Config) error {
|
|
|
|
return migrations.UpdateMigrationPosterID(ctx)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2021-01-26 22:02:42 +01:00
|
|
|
func registerCleanupHookTaskTable() {
|
|
|
|
RegisterTaskFatal("cleanup_hook_task_table", &CleanupHookTaskConfig{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
Enabled: true,
|
|
|
|
RunAtStart: false,
|
2021-07-15 17:55:48 +02:00
|
|
|
Schedule: "@midnight",
|
2021-01-26 22:02:42 +01:00
|
|
|
},
|
|
|
|
CleanupType: "OlderThan",
|
|
|
|
OlderThan: 168 * time.Hour,
|
|
|
|
NumberToKeep: 10,
|
|
|
|
}, func(ctx context.Context, _ *models.User, config Config) error {
|
|
|
|
realConfig := config.(*CleanupHookTaskConfig)
|
2021-11-10 06:13:16 +01:00
|
|
|
return webhook.CleanupHookTaskTable(ctx, webhook.ToHookTaskCleanupType(realConfig.CleanupType), realConfig.OlderThan, realConfig.NumberToKeep)
|
2021-01-26 22:02:42 +01:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-05-17 01:31:38 +02:00
|
|
|
func initBasicTasks() {
|
|
|
|
registerUpdateMirrorTask()
|
|
|
|
registerRepoHealthCheck()
|
|
|
|
registerCheckRepoStats()
|
|
|
|
registerArchiveCleanup()
|
|
|
|
registerSyncExternalUsers()
|
|
|
|
registerDeletedBranchesCleanup()
|
2020-12-21 15:39:41 +01:00
|
|
|
if !setting.Repository.DisableMigrations {
|
|
|
|
registerUpdateMigrationPosterID()
|
|
|
|
}
|
2021-01-26 22:02:42 +01:00
|
|
|
registerCleanupHookTaskTable()
|
2020-05-17 01:31:38 +02:00
|
|
|
}
|