mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	chore(actions): support cron schedule task (#26655)
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>
This commit is contained in:
		@@ -95,18 +95,25 @@ func GetEventsFromContent(content []byte) ([]*jobparser.Event, error) {
 | 
			
		||||
	return events, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DetectWorkflows(gitRepo *git.Repository, commit *git.Commit, triggedEvent webhook_module.HookEventType, payload api.Payloader) ([]*DetectedWorkflow, error) {
 | 
			
		||||
func DetectWorkflows(
 | 
			
		||||
	gitRepo *git.Repository,
 | 
			
		||||
	commit *git.Commit,
 | 
			
		||||
	triggedEvent webhook_module.HookEventType,
 | 
			
		||||
	payload api.Payloader,
 | 
			
		||||
) ([]*DetectedWorkflow, []*DetectedWorkflow, error) {
 | 
			
		||||
	entries, err := ListWorkflows(commit)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	workflows := make([]*DetectedWorkflow, 0, len(entries))
 | 
			
		||||
	schedules := make([]*DetectedWorkflow, 0, len(entries))
 | 
			
		||||
	for _, entry := range entries {
 | 
			
		||||
		content, err := GetContentFromEntry(entry)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
			return nil, nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		events, err := GetEventsFromContent(content)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Warn("ignore invalid workflow %q: %v", entry.Name(), err)
 | 
			
		||||
@@ -114,6 +121,14 @@ func DetectWorkflows(gitRepo *git.Repository, commit *git.Commit, triggedEvent w
 | 
			
		||||
		}
 | 
			
		||||
		for _, evt := range events {
 | 
			
		||||
			log.Trace("detect workflow %q for event %#v matching %q", entry.Name(), evt, triggedEvent)
 | 
			
		||||
			if evt.IsSchedule() {
 | 
			
		||||
				dwf := &DetectedWorkflow{
 | 
			
		||||
					EntryName:    entry.Name(),
 | 
			
		||||
					TriggerEvent: evt.Name,
 | 
			
		||||
					Content:      content,
 | 
			
		||||
				}
 | 
			
		||||
				schedules = append(schedules, dwf)
 | 
			
		||||
			}
 | 
			
		||||
			if detectMatched(gitRepo, commit, triggedEvent, payload, evt) {
 | 
			
		||||
				dwf := &DetectedWorkflow{
 | 
			
		||||
					EntryName:    entry.Name(),
 | 
			
		||||
@@ -125,7 +140,7 @@ func DetectWorkflows(gitRepo *git.Repository, commit *git.Commit, triggedEvent w
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return workflows, nil
 | 
			
		||||
	return workflows, schedules, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent webhook_module.HookEventType, payload api.Payloader, evt *jobparser.Event) bool {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user