From 82a3640cf853a2e69f51fa30d77ecfb80b15ef11 Mon Sep 17 00:00:00 2001 From: sillyguodong Date: Fri, 1 Mar 2024 04:29:58 +0000 Subject: [PATCH] Make runs-on support variable expression (#91) Partial implementation of https://gitea.com/gitea/act_runner/issues/445, the Gitea side also needs a PR for the entire functionality. Gitea side: https://github.com/go-gitea/gitea/pull/29468 Co-authored-by: Jason Song Reviewed-on: https://gitea.com/gitea/act/pulls/91 Reviewed-by: Jason Song Co-authored-by: sillyguodong Co-committed-by: sillyguodong --- pkg/jobparser/interpeter.go | 2 ++ pkg/jobparser/jobparser.go | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/jobparser/interpeter.go b/pkg/jobparser/interpeter.go index 750f964..8aaf319 100644 --- a/pkg/jobparser/interpeter.go +++ b/pkg/jobparser/interpeter.go @@ -15,6 +15,7 @@ func NewInterpeter( matrix map[string]interface{}, gitCtx *model.GithubContext, results map[string]*JobResult, + vars map[string]string, ) exprparser.Interpreter { strategy := make(map[string]interface{}) if job.Strategy != nil { @@ -62,6 +63,7 @@ func NewInterpeter( Matrix: matrix, Needs: using, Inputs: nil, // not supported yet + Vars: vars, } config := exprparser.Config{ diff --git a/pkg/jobparser/jobparser.go b/pkg/jobparser/jobparser.go index cd84651..7b3a281 100644 --- a/pkg/jobparser/jobparser.go +++ b/pkg/jobparser/jobparser.go @@ -53,7 +53,7 @@ func Parse(content []byte, options ...ParseOption) ([]*SingleWorkflow, error) { } job.Name = nameWithMatrix(job.Name, matrix) job.Strategy.RawMatrix = encodeMatrix(matrix) - evaluator := NewExpressionEvaluator(NewInterpeter(id, origin.GetJob(id), matrix, pc.gitContext, results)) + evaluator := NewExpressionEvaluator(NewInterpeter(id, origin.GetJob(id), matrix, pc.gitContext, results, pc.vars)) runsOn := origin.GetJob(id).RunsOn() for i, v := range runsOn { runsOn[i] = evaluator.Interpolate(v) @@ -86,9 +86,16 @@ func WithGitContext(context *model.GithubContext) ParseOption { } } +func WithVars(vars map[string]string) ParseOption { + return func(c *parseContext) { + c.vars = vars + } +} + type parseContext struct { jobResults map[string]string gitContext *model.GithubContext + vars map[string]string } type ParseOption func(c *parseContext)