You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tasks_extended.go 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package cron
  5. import (
  6. "context"
  7. "time"
  8. "code.gitea.io/gitea/models"
  9. "code.gitea.io/gitea/models/admin"
  10. asymkey_model "code.gitea.io/gitea/models/asymkey"
  11. "code.gitea.io/gitea/models/db"
  12. user_model "code.gitea.io/gitea/models/user"
  13. "code.gitea.io/gitea/modules/setting"
  14. "code.gitea.io/gitea/modules/updatechecker"
  15. repo_service "code.gitea.io/gitea/services/repository"
  16. archiver_service "code.gitea.io/gitea/services/repository/archiver"
  17. user_service "code.gitea.io/gitea/services/user"
  18. )
  19. func registerDeleteInactiveUsers() {
  20. RegisterTaskFatal("delete_inactive_accounts", &OlderThanConfig{
  21. BaseConfig: BaseConfig{
  22. Enabled: false,
  23. RunAtStart: false,
  24. Schedule: "@annually",
  25. },
  26. OlderThan: time.Minute * time.Duration(setting.Service.ActiveCodeLives),
  27. }, func(ctx context.Context, _ *user_model.User, config Config) error {
  28. olderThanConfig := config.(*OlderThanConfig)
  29. return user_service.DeleteInactiveUsers(ctx, olderThanConfig.OlderThan)
  30. })
  31. }
  32. func registerDeleteRepositoryArchives() {
  33. RegisterTaskFatal("delete_repo_archives", &BaseConfig{
  34. Enabled: false,
  35. RunAtStart: false,
  36. Schedule: "@annually",
  37. }, func(ctx context.Context, _ *user_model.User, _ Config) error {
  38. return archiver_service.DeleteRepositoryArchives(ctx)
  39. })
  40. }
  41. func registerGarbageCollectRepositories() {
  42. type RepoHealthCheckConfig struct {
  43. BaseConfig
  44. Timeout time.Duration
  45. Args []string `delim:" "`
  46. }
  47. RegisterTaskFatal("git_gc_repos", &RepoHealthCheckConfig{
  48. BaseConfig: BaseConfig{
  49. Enabled: false,
  50. RunAtStart: false,
  51. Schedule: "@every 72h",
  52. },
  53. Timeout: time.Duration(setting.Git.Timeout.GC) * time.Second,
  54. Args: setting.Git.GCArgs,
  55. }, func(ctx context.Context, _ *user_model.User, config Config) error {
  56. rhcConfig := config.(*RepoHealthCheckConfig)
  57. return repo_service.GitGcRepos(ctx, rhcConfig.Timeout, rhcConfig.Args...)
  58. })
  59. }
  60. func registerRewriteAllPublicKeys() {
  61. RegisterTaskFatal("resync_all_sshkeys", &BaseConfig{
  62. Enabled: false,
  63. RunAtStart: false,
  64. Schedule: "@every 72h",
  65. }, func(_ context.Context, _ *user_model.User, _ Config) error {
  66. return asymkey_model.RewriteAllPublicKeys()
  67. })
  68. }
  69. func registerRewriteAllPrincipalKeys() {
  70. RegisterTaskFatal("resync_all_sshprincipals", &BaseConfig{
  71. Enabled: false,
  72. RunAtStart: false,
  73. Schedule: "@every 72h",
  74. }, func(_ context.Context, _ *user_model.User, _ Config) error {
  75. return asymkey_model.RewriteAllPrincipalKeys(db.DefaultContext)
  76. })
  77. }
  78. func registerRepositoryUpdateHook() {
  79. RegisterTaskFatal("resync_all_hooks", &BaseConfig{
  80. Enabled: false,
  81. RunAtStart: false,
  82. Schedule: "@every 72h",
  83. }, func(ctx context.Context, _ *user_model.User, _ Config) error {
  84. return repo_service.SyncRepositoryHooks(ctx)
  85. })
  86. }
  87. func registerReinitMissingRepositories() {
  88. RegisterTaskFatal("reinit_missing_repos", &BaseConfig{
  89. Enabled: false,
  90. RunAtStart: false,
  91. Schedule: "@every 72h",
  92. }, func(ctx context.Context, _ *user_model.User, _ Config) error {
  93. return repo_service.ReinitMissingRepositories(ctx)
  94. })
  95. }
  96. func registerDeleteMissingRepositories() {
  97. RegisterTaskFatal("delete_missing_repos", &BaseConfig{
  98. Enabled: false,
  99. RunAtStart: false,
  100. Schedule: "@every 72h",
  101. }, func(ctx context.Context, user *user_model.User, _ Config) error {
  102. return repo_service.DeleteMissingRepositories(ctx, user)
  103. })
  104. }
  105. func registerRemoveRandomAvatars() {
  106. RegisterTaskFatal("delete_generated_repository_avatars", &BaseConfig{
  107. Enabled: false,
  108. RunAtStart: false,
  109. Schedule: "@every 72h",
  110. }, func(ctx context.Context, _ *user_model.User, _ Config) error {
  111. return repo_service.RemoveRandomAvatars(ctx)
  112. })
  113. }
  114. func registerDeleteOldActions() {
  115. RegisterTaskFatal("delete_old_actions", &OlderThanConfig{
  116. BaseConfig: BaseConfig{
  117. Enabled: false,
  118. RunAtStart: false,
  119. Schedule: "@every 168h",
  120. },
  121. OlderThan: 365 * 24 * time.Hour,
  122. }, func(ctx context.Context, _ *user_model.User, config Config) error {
  123. olderThanConfig := config.(*OlderThanConfig)
  124. return models.DeleteOldActions(olderThanConfig.OlderThan)
  125. })
  126. }
  127. func registerUpdateGiteaChecker() {
  128. type UpdateCheckerConfig struct {
  129. BaseConfig
  130. HTTPEndpoint string
  131. }
  132. RegisterTaskFatal("update_checker", &UpdateCheckerConfig{
  133. BaseConfig: BaseConfig{
  134. Enabled: true,
  135. RunAtStart: false,
  136. Schedule: "@every 168h",
  137. },
  138. HTTPEndpoint: "https://dl.gitea.io/gitea/version.json",
  139. }, func(ctx context.Context, _ *user_model.User, config Config) error {
  140. updateCheckerConfig := config.(*UpdateCheckerConfig)
  141. return updatechecker.GiteaUpdateChecker(updateCheckerConfig.HTTPEndpoint)
  142. })
  143. }
  144. func registerDeleteOldSystemNotices() {
  145. RegisterTaskFatal("delete_old_system_notices", &OlderThanConfig{
  146. BaseConfig: BaseConfig{
  147. Enabled: false,
  148. RunAtStart: false,
  149. Schedule: "@every 168h",
  150. },
  151. OlderThan: 365 * 24 * time.Hour,
  152. }, func(ctx context.Context, _ *user_model.User, config Config) error {
  153. olderThanConfig := config.(*OlderThanConfig)
  154. return admin.DeleteOldSystemNotices(olderThanConfig.OlderThan)
  155. })
  156. }
  157. func initExtendedTasks() {
  158. registerDeleteInactiveUsers()
  159. registerDeleteRepositoryArchives()
  160. registerGarbageCollectRepositories()
  161. registerRewriteAllPublicKeys()
  162. registerRewriteAllPrincipalKeys()
  163. registerRepositoryUpdateHook()
  164. registerReinitMissingRepositories()
  165. registerDeleteMissingRepositories()
  166. registerRemoveRandomAvatars()
  167. registerDeleteOldActions()
  168. registerUpdateGiteaChecker()
  169. registerDeleteOldSystemNotices()
  170. }