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) diff --git a/act/runner/testdata/actions/node24/action.yml b/act/runner/testdata/actions/node24/action.yml new file mode 100644 index 00000000..0f83974a --- /dev/null +++ b/act/runner/testdata/actions/node24/action.yml @@ -0,0 +1,5 @@ +name: 'using node24 action' +description: 'An action that has using:node24' +runs: + using: 'node24' + main: 'index.js' diff --git a/act/runner/testdata/actions/node24/index.js b/act/runner/testdata/actions/node24/index.js new file mode 100644 index 00000000..679a6f70 --- /dev/null +++ b/act/runner/testdata/actions/node24/index.js @@ -0,0 +1,3 @@ +// Note that the runner does not actually invoke different versions of node depending on the `using` tag, so this output +// isn't checked/asserted to ensure that the right version is in-use. It might as well be an empty script. +console.log('Current node.js version:', process.versions.node); diff --git a/act/runner/testdata/local-action-js/push.yml b/act/runner/testdata/local-action-js/push.yml index f97cf2ec..70638568 100644 --- a/act/runner/testdata/local-action-js/push.yml +++ b/act/runner/testdata/local-action-js/push.yml @@ -10,3 +10,4 @@ jobs: - uses: ./actions/node20 with: who-to-greet: 'Mona the Octocat' + - uses: ./actions/node24