mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +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>
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package actions
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
 | 
						|
	"code.gitea.io/gitea/models/db"
 | 
						|
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						|
	"code.gitea.io/gitea/modules/timeutil"
 | 
						|
 | 
						|
	"github.com/robfig/cron/v3"
 | 
						|
)
 | 
						|
 | 
						|
// ActionScheduleSpec represents a schedule spec of a workflow file
 | 
						|
type ActionScheduleSpec struct {
 | 
						|
	ID         int64
 | 
						|
	RepoID     int64                  `xorm:"index"`
 | 
						|
	Repo       *repo_model.Repository `xorm:"-"`
 | 
						|
	ScheduleID int64                  `xorm:"index"`
 | 
						|
	Schedule   *ActionSchedule        `xorm:"-"`
 | 
						|
 | 
						|
	// Next time the job will run, or the zero time if Cron has not been
 | 
						|
	// started or this entry's schedule is unsatisfiable
 | 
						|
	Next timeutil.TimeStamp `xorm:"index"`
 | 
						|
	// Prev is the last time this job was run, or the zero time if never.
 | 
						|
	Prev timeutil.TimeStamp
 | 
						|
	Spec string
 | 
						|
 | 
						|
	Created timeutil.TimeStamp `xorm:"created"`
 | 
						|
	Updated timeutil.TimeStamp `xorm:"updated"`
 | 
						|
}
 | 
						|
 | 
						|
func (s *ActionScheduleSpec) Parse() (cron.Schedule, error) {
 | 
						|
	return cronParser.Parse(s.Spec)
 | 
						|
}
 | 
						|
 | 
						|
func init() {
 | 
						|
	db.RegisterModel(new(ActionScheduleSpec))
 | 
						|
}
 | 
						|
 | 
						|
func UpdateScheduleSpec(ctx context.Context, spec *ActionScheduleSpec, cols ...string) error {
 | 
						|
	sess := db.GetEngine(ctx).ID(spec.ID)
 | 
						|
	if len(cols) > 0 {
 | 
						|
		sess.Cols(cols...)
 | 
						|
	}
 | 
						|
	_, err := sess.Update(spec)
 | 
						|
	return err
 | 
						|
}
 |