From 7ff3f7da0f1e1609e589cf9a1bc82abf35c7303b Mon Sep 17 00:00:00 2001 From: Mathieu Fenniak Date: Mon, 11 Aug 2025 09:34:42 -0600 Subject: [PATCH] feat: support actions with 'using: node24' It's worth noting that runner does not actually invoke different versions of node depending on the `using` tag -- it just defers to the `node` command in the path regardless of the tagged value. But this change allows `node24` to be provided and run node, the same level of support as node12...node20. --- act/model/action.go | 5 ++++- act/runner/action.go | 9 ++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/act/model/action.go b/act/model/action.go index 62b1d025..7616b66b 100644 --- a/act/model/action.go +++ b/act/model/action.go @@ -21,7 +21,7 @@ func (a *ActionRunsUsing) UnmarshalYAML(unmarshal func(interface{}) error) error // Force input to lowercase for case insensitive comparison format := ActionRunsUsing(strings.ToLower(using)) switch format { - case ActionRunsUsingNode20, ActionRunsUsingNode16, ActionRunsUsingNode12, ActionRunsUsingDocker, ActionRunsUsingComposite, ActionRunsUsingGo, ActionRunsUsingSh: + case ActionRunsUsingNode24, ActionRunsUsingNode20, ActionRunsUsingNode16, ActionRunsUsingNode12, ActionRunsUsingDocker, ActionRunsUsingComposite, ActionRunsUsingGo, ActionRunsUsingSh: *a = format default: return fmt.Errorf("The runs.using key in action.yml must be one of: %v, got %s", []string{ @@ -30,6 +30,7 @@ func (a *ActionRunsUsing) UnmarshalYAML(unmarshal func(interface{}) error) error ActionRunsUsingNode12, ActionRunsUsingNode16, ActionRunsUsingNode20, + ActionRunsUsingNode24, ActionRunsUsingGo, ActionRunsUsingSh, }, format) @@ -44,6 +45,8 @@ const ( ActionRunsUsingNode16 = "node16" // ActionRunsUsingNode20 for running with node20 ActionRunsUsingNode20 = "node20" + // ActionRunsUsingNode24 for running with node24 + ActionRunsUsingNode24 = "node24" // ActionRunsUsingDocker for running with docker ActionRunsUsingDocker = "docker" // ActionRunsUsingComposite for running composite diff --git a/act/runner/action.go b/act/runner/action.go index 93016f1d..6b27288e 100644 --- a/act/runner/action.go +++ b/act/runner/action.go @@ -182,7 +182,7 @@ func runActionImpl(step actionStep, actionDir string, remoteAction *remoteAction logger.Debugf("type=%v actionDir=%s actionPath=%s workdir=%s actionCacheDir=%s actionName=%s containerActionDir=%s", stepModel.Type(), actionDir, actionPath, rc.Config.Workdir, rc.ActionCacheDir(), actionName, containerActionDir) switch action.Runs.Using { - case model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20: + case model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20, model.ActionRunsUsingNode24: if err := maybeCopyToActionDir(ctx, step, actionDir, actionPath, containerActionDir); err != nil { return err } @@ -237,6 +237,7 @@ func runActionImpl(step actionStep, actionDir string, remoteAction *remoteAction model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20, + model.ActionRunsUsingNode24, model.ActionRunsUsingComposite, model.ActionRunsUsingGo, model.ActionRunsUsingSh, @@ -530,6 +531,7 @@ func hasPreStep(step actionStep) common.Conditional { ((action.Runs.Using == model.ActionRunsUsingNode12 || action.Runs.Using == model.ActionRunsUsingNode16 || action.Runs.Using == model.ActionRunsUsingNode20 || + action.Runs.Using == model.ActionRunsUsingNode24 || action.Runs.Using == model.ActionRunsUsingGo || action.Runs.Using == model.ActionRunsUsingSh) && action.Runs.Pre != "") @@ -546,7 +548,7 @@ func runPreStep(step actionStep) common.Executor { action := step.getActionModel() switch action.Runs.Using { - case model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20, model.ActionRunsUsingSh: + case model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20, model.ActionRunsUsingNode24, model.ActionRunsUsingSh: // defaults in pre steps were missing, however provided inputs are available populateEnvsFromInput(ctx, step.getEnv(), action, rc) // todo: refactor into step @@ -672,6 +674,7 @@ func hasPostStep(step actionStep) common.Conditional { ((action.Runs.Using == model.ActionRunsUsingNode12 || action.Runs.Using == model.ActionRunsUsingNode16 || action.Runs.Using == model.ActionRunsUsingNode20 || + action.Runs.Using == model.ActionRunsUsingNode24 || action.Runs.Using == model.ActionRunsUsingGo || action.Runs.Using == model.ActionRunsUsingSh) && action.Runs.Post != "") @@ -708,7 +711,7 @@ func runPostStep(step actionStep) common.Executor { _, containerActionDir := getContainerActionPaths(stepModel, actionLocation, rc) switch action.Runs.Using { - case model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20: + case model.ActionRunsUsingNode12, model.ActionRunsUsingNode16, model.ActionRunsUsingNode20, model.ActionRunsUsingNode24: populateEnvsFromSavedState(step.getEnv(), step, rc) populateEnvsFromInput(ctx, step.getEnv(), step.getActionModel(), rc)