mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-30 22:11:07 +00:00 
			
		
		
		
	Replace #22751 1. only support the default branch in the repository setting. 2. autoload schedule data from the schedule table after starting the service. 3. support specific syntax like `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly` ## How to use See the [GitHub Actions document](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule) for getting more detailed information. ```yaml on: schedule: - cron: '30 5 * * 1,3' - cron: '30 5 * * 2,4' jobs: test_schedule: runs-on: ubuntu-latest steps: - name: Not on Monday or Wednesday if: github.event.schedule != '30 5 * * 1,3' run: echo "This step will be skipped on Monday and Wednesday" - name: Every time run: echo "This step will always run" ``` Signed-off-by: Bo-Yi.Wu <appleboy.tw@gmail.com> --------- Co-authored-by: Jason Song <i@wolfogre.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2022 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package cron
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	user_model "code.gitea.io/gitea/models/user"
 | |
| 	"code.gitea.io/gitea/modules/setting"
 | |
| 	actions_service "code.gitea.io/gitea/services/actions"
 | |
| )
 | |
| 
 | |
| func initActionsTasks() {
 | |
| 	if !setting.Actions.Enabled {
 | |
| 		return
 | |
| 	}
 | |
| 	registerStopZombieTasks()
 | |
| 	registerStopEndlessTasks()
 | |
| 	registerCancelAbandonedJobs()
 | |
| 	registerScheduleTasks()
 | |
| }
 | |
| 
 | |
| 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)
 | |
| 	})
 | |
| }
 |