 0d55f64e6c
			
		
	
	
	
	
	0d55f64e6cReplace #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
 | |
| }
 |