code.gitea.io/gitea@v1.21.7/services/cron/tasks_actions.go (about)

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