mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	Fixes #7646 Adds a cron job to cleanup action runners that have been offline or inactive for X amount of time. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7803 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: Julian Schlarb <julian.schlarb@denktmit.de> Co-committed-by: Julian Schlarb <julian.schlarb@denktmit.de>
		
			
				
	
	
		
			97 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2022 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package cron
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"time"
 | |
| 
 | |
| 	user_model "forgejo.org/models/user"
 | |
| 	"forgejo.org/modules/setting"
 | |
| 	actions_service "forgejo.org/services/actions"
 | |
| )
 | |
| 
 | |
| func initActionsTasks() {
 | |
| 	if !setting.Actions.Enabled {
 | |
| 		return
 | |
| 	}
 | |
| 	registerStopZombieTasks()
 | |
| 	registerStopEndlessTasks()
 | |
| 	registerCancelAbandonedJobs()
 | |
| 	registerScheduleTasks()
 | |
| 	registerActionsCleanup()
 | |
| 	registerOfflineRunnersCleanup()
 | |
| }
 | |
| 
 | |
| func registerStopZombieTasks() {
 | |
| 	RegisterTaskFatal("stop_zombie_tasks", &BaseConfig{
 | |
| 		Enabled:    true,
 | |
| 		RunAtStart: true,
 | |
| 		Schedule:   "@every 5m",
 | |
| 	}, func(ctx context.Context, _ *user_model.User, cfg Config) error {
 | |
| 		return actions_service.StopZombieTasks(ctx)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func registerStopEndlessTasks() {
 | |
| 	RegisterTaskFatal("stop_endless_tasks", &BaseConfig{
 | |
| 		Enabled:    true,
 | |
| 		RunAtStart: true,
 | |
| 		Schedule:   "@every 30m",
 | |
| 	}, func(ctx context.Context, _ *user_model.User, cfg Config) error {
 | |
| 		return actions_service.StopEndlessTasks(ctx)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func registerCancelAbandonedJobs() {
 | |
| 	RegisterTaskFatal("cancel_abandoned_jobs", &BaseConfig{
 | |
| 		Enabled:    true,
 | |
| 		RunAtStart: true,
 | |
| 		Schedule:   "@every 6h",
 | |
| 	}, func(ctx context.Context, _ *user_model.User, cfg Config) error {
 | |
| 		return actions_service.CancelAbandonedJobs(ctx)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // registerScheduleTasks registers a scheduled task that runs every minute to start any due schedule tasks.
 | |
| func registerScheduleTasks() {
 | |
| 	// Register the task with a unique name, enabled status, and schedule for every minute.
 | |
| 	RegisterTaskFatal("start_schedule_tasks", &BaseConfig{
 | |
| 		Enabled:    true,
 | |
| 		RunAtStart: false,
 | |
| 		Schedule:   "@every 1m",
 | |
| 	}, func(ctx context.Context, _ *user_model.User, cfg Config) error {
 | |
| 		// Call the function to start schedule tasks and pass the context.
 | |
| 		return actions_service.StartScheduleTasks(ctx)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func registerActionsCleanup() {
 | |
| 	RegisterTaskFatal("cleanup_actions", &BaseConfig{
 | |
| 		Enabled:    true,
 | |
| 		RunAtStart: false,
 | |
| 		Schedule:   "@midnight",
 | |
| 	}, func(ctx context.Context, _ *user_model.User, _ Config) error {
 | |
| 		return actions_service.Cleanup(ctx)
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func registerOfflineRunnersCleanup() {
 | |
| 	RegisterTaskFatal("cleanup_offline_runners", &CleanupOfflineRunnersConfig{
 | |
| 		BaseConfig: BaseConfig{
 | |
| 			Enabled:    false,
 | |
| 			RunAtStart: false,
 | |
| 			Schedule:   "@midnight",
 | |
| 		},
 | |
| 		GlobalScopeOnly: true,
 | |
| 		OlderThan:       time.Hour * 24,
 | |
| 	}, func(ctx context.Context, _ *user_model.User, cfg Config) error {
 | |
| 		c := cfg.(*CleanupOfflineRunnersConfig)
 | |
| 		return actions_service.CleanupOfflineRunners(
 | |
| 			ctx,
 | |
| 			c.OlderThan,
 | |
| 			c.GlobalScopeOnly,
 | |
| 		)
 | |
| 	})
 | |
| }
 |