gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package cron
  4. import (
  5. "context"
  6. user_model "code.gitea.io/gitea/models/user"
  7. "code.gitea.io/gitea/modules/setting"
  8. actions_service "code.gitea.io/gitea/services/actions"
  9. )
  10. func initActionsTasks() {
  11. if !setting.Actions.Enabled {
  12. return
  13. }
  14. registerStopZombieTasks()
  15. registerStopEndlessTasks()
  16. registerCancelAbandonedJobs()
  17. registerScheduleTasks()
  18. registerActionsCleanup()
  19. }
  20. func registerStopZombieTasks() {
  21. RegisterTaskFatal("stop_zombie_tasks", &BaseConfig{
  22. Enabled: true,
  23. RunAtStart: true,
  24. Schedule: "@every 5m",
  25. }, func(ctx context.Context, _ *user_model.User, cfg Config) error {
  26. return actions_service.StopZombieTasks(ctx)
  27. })
  28. }
  29. func registerStopEndlessTasks() {
  30. RegisterTaskFatal("stop_endless_tasks", &BaseConfig{
  31. Enabled: true,
  32. RunAtStart: true,
  33. Schedule: "@every 30m",
  34. }, func(ctx context.Context, _ *user_model.User, cfg Config) error {
  35. return actions_service.StopEndlessTasks(ctx)
  36. })
  37. }
  38. func registerCancelAbandonedJobs() {
  39. RegisterTaskFatal("cancel_abandoned_jobs", &BaseConfig{
  40. Enabled: true,
  41. RunAtStart: true,
  42. Schedule: "@every 6h",
  43. }, func(ctx context.Context, _ *user_model.User, cfg Config) error {
  44. return actions_service.CancelAbandonedJobs(ctx)
  45. })
  46. }
  47. // registerScheduleTasks registers a scheduled task that runs every minute to start any due schedule tasks.
  48. func registerScheduleTasks() {
  49. // Register the task with a unique name, enabled status, and schedule for every minute.
  50. RegisterTaskFatal("start_schedule_tasks", &BaseConfig{
  51. Enabled: true,
  52. RunAtStart: false,
  53. Schedule: "@every 1m",
  54. }, func(ctx context.Context, _ *user_model.User, cfg Config) error {
  55. // Call the function to start schedule tasks and pass the context.
  56. return actions_service.StartScheduleTasks(ctx)
  57. })
  58. }
  59. func registerActionsCleanup() {
  60. RegisterTaskFatal("cleanup_actions", &BaseConfig{
  61. Enabled: true,
  62. RunAtStart: false,
  63. Schedule: "@midnight",
  64. }, func(ctx context.Context, _ *user_model.User, _ Config) error {
  65. return actions_service.Cleanup(ctx)
  66. })
  67. }