Support Simplified Concurrency (#139)
- update RawConcurrency struct to parse and serialize string-based concurrency notation - update EvaluateConcurrency to handle new RawConcurrency format Reviewed-on: https://gitea.com/gitea/act/pulls/139 Reviewed-by: Zettat123 <zettat123@noreply.gitea.com> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: ChristopherHX <christopher.homberger@web.de> Co-committed-by: ChristopherHX <christopher.homberger@web.de>
This commit is contained in:
		
				
					committed by
					
						
						ChristopherHX
					
				
			
			
				
	
			
			
			
						parent
						
							9924aea786
						
					
				
				
					commit
					39509e9ad0
				
			@@ -276,9 +276,21 @@ func EvaluateConcurrency(rc *model.RawConcurrency, jobID string, job *Job, gitCt
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evaluator := NewExpressionEvaluator(NewInterpeter(jobID, actJob, matrix, toGitContext(gitCtx), results, vars, inputs))
 | 
						evaluator := NewExpressionEvaluator(NewInterpeter(jobID, actJob, matrix, toGitContext(gitCtx), results, vars, inputs))
 | 
				
			||||||
	group := evaluator.Interpolate(rc.Group)
 | 
						var node yaml.Node
 | 
				
			||||||
	cancelInProgress := evaluator.Interpolate(rc.CancelInProgress)
 | 
						if err := node.Encode(rc); err != nil {
 | 
				
			||||||
	return group, cancelInProgress == "true", nil
 | 
							return "", false, fmt.Errorf("failed to encode concurrency: %w", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := evaluator.EvaluateYamlNode(&node); err != nil {
 | 
				
			||||||
 | 
							return "", false, fmt.Errorf("failed to evaluate concurrency: %w", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var evaluated model.RawConcurrency
 | 
				
			||||||
 | 
						if err := node.Decode(&evaluated); err != nil {
 | 
				
			||||||
 | 
							return "", false, fmt.Errorf("failed to unmarshal evaluated concurrency: %w", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if evaluated.RawExpression != "" {
 | 
				
			||||||
 | 
							return evaluated.RawExpression, false, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return evaluated.Group, evaluated.CancelInProgress == "true", nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func toGitContext(input map[string]any) *model.GithubContext {
 | 
					func toGitContext(input map[string]any) *model.GithubContext {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -778,4 +778,22 @@ func decodeNode(node yaml.Node, out interface{}) bool {
 | 
				
			|||||||
type RawConcurrency struct {
 | 
					type RawConcurrency struct {
 | 
				
			||||||
	Group            string `yaml:"group,omitempty"`
 | 
						Group            string `yaml:"group,omitempty"`
 | 
				
			||||||
	CancelInProgress string `yaml:"cancel-in-progress,omitempty"`
 | 
						CancelInProgress string `yaml:"cancel-in-progress,omitempty"`
 | 
				
			||||||
 | 
						RawExpression    string `yaml:"-,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type objectConcurrency RawConcurrency
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r *RawConcurrency) UnmarshalYAML(n *yaml.Node) error {
 | 
				
			||||||
 | 
						if err := n.Decode(&r.RawExpression); err == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return n.Decode((*objectConcurrency)(r))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r *RawConcurrency) MarshalYAML() (interface{}, error) {
 | 
				
			||||||
 | 
						if r.RawExpression != "" {
 | 
				
			||||||
 | 
							return r.RawExpression, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return (*objectConcurrency)(r), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user