42
Use NodeJS v16 as runtime for JavaScript actions
This month GitHub supported NodeJS v16 as runtime for JavaScript actions. It is also supported by GitHub Enterprise Servers (GHES) 3.0 and later.
We can complete the minimal migration by updating run.using
in the actions.yml
file. We may need several additional updates like below:
If you have specified the version of NodeJS to use in package.json
, you will need to update it.
16.13.1
is the current latest version, so the preferred configuration would be as follows:
"engines": {
"node": "^16.13.1"
}
NodeJS v16 lets us use ES2021. Based on the official TSConfig settings recommendation for NodeJS v16, update the compilerOptions
as follows:
"compilerOptions": {
"lib": ["ES2021"],
"module": "commonjs",
"target": "ES2021"
}
If your TypeScript is too old to use ES2021, it is suggested to update.
Note that TypeScript v4.4 changed the type of caught error from any
to unknown
by default.
So if your action catches error to invoke core.setFailed()
method, you need to check the type of caught object in runtime:
- core.setFailed(error)
+ if (error instanceof Error) {
+ core.setFailed(error)
+ } else {
+ core.setFailed(JSON.stringify(error))
+ }
If you've updated your TypeScript, it is necessary to update ESLint too. If you've created projects based on the official template project, you can run the following command to upgrade ESLint and its plugins in batch:
$ npm add -D eslint@^8.5.0 @typescript-eslint/parser@^5.8.0 eslint-plugin-github@^4.3.5 eslint-plugin-jest@^25.3.0
If you found lint failure caused by changes on the ESLint side, copy the default .eslintrc.json
from the template project, or follow ESLint's migration guide documented in its GitHub Releases.
If you use the default NodeJS on the PATH, you need no action because GitHub hosted runners use NodeJS v16 by default since this Dec/10th.
If you use actions/setup-node
to specify the version of NodeJS, you need to update the node-version
config in the workflow definitions.
Or if you have a configuration file like .node-version
and .nvmrc
, you can use the node-version-file
config supported from v2.5.0
.
NodeJS v12 will reach its end-of-life soon. All system running on NodeJS needs to be migrated, and GitHub JavaScript Actions are also in the target.
The migration process is quite simple, just update metadata and run the build with NodeJS v16. You may refer to my PR for gradle/wrapper-validation-action as example. Enjoy!
42