NodeJS v16 を JavaScript アクションのランタイムとして使用する


今月は GitHub supported NodeJS v16 as runtime for JavaScript actions .また、supported by GitHub Enterprise Servers (GHES) 3.0 以降です.

NodeJS v16 を使用する動機



The end-of-life of NodeJS v12 is the end of next April.そのため、独自の JavaScript アクションを維持する場合は、ランタイムを NodeJS v16 に移行することをお勧めします.

プロジェクトの更新方法



updating run.using in the actions.yml file までに最小限の移行を完了できます.以下のようないくつかの追加の更新が必要になる場合があります.

package.json の engine.node を更新する


package.json で使用する NodeJS のバージョンを指定した場合は、それを更新する必要があります.16.13.1 は現在の最新バージョンであるため、推奨される構成は次のようになります.

  "engines": {
    "node": "^16.13.1"
  }


tsconfig.json を更新する



NodeJS v16 では、ES2021 を使用できます. official TSConfig settings recommendation for NodeJS v16 に基づいて、次のように compilerOptions を更新します.

  "compilerOptions": {
    "lib": ["ES2021"],
    "module": "commonjs",
    "target": "ES2021"
  }


TypeScript を更新する



TypeScript が古すぎて ES2021 を使用できない場合は、更新することをお勧めします.

TypeScript v4.4 changed the type of caught error from any to unknown by default に注意してください.
したがって、アクションがエラーをキャッチして core.setFailed() メソッドを呼び出す場合、実行時にキャッチされたオブジェクトのタイプを確認する必要があります.

-     core.setFailed(error)
+     if (error instanceof Error) {
+       core.setFailed(error)
+     } else {
+       core.setFailed(JSON.stringify(error))
+     }


ESLint の更新



TypeScript を更新した場合は、ESLint も更新する必要があります. official template project に基づいてプロジェクトを作成した場合は、次のコマンドを実行して、ESLint とそのプラグインをバッチでアップグレードできます.

$ 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 


ESLint 側の変更が原因で lint の失敗が見つかった場合は、 default .eslintrc.json from the template project をコピーするか、その GitHub Releases に記載されている ESLint の移行ガイドに従ってください.

NodeJS v16 を使用するように GitHub Actions ワークフローを更新する



PATH でデフォルトの NodeJS を使用する場合は、GitHub hosted runners use NodeJS v16 by default since this Dec/10th のため、何もする必要はありません.
actions/setup-node を使用して NodeJS のバージョンを指定する場合は、ワークフロー定義で node-version 構成を更新する必要があります.
または、 .node-version.nvmrc のような構成ファイルがある場合は、 node-version-file config supported from v2.5.0 を使用できます.

要約



NodeJS v12 はまもなくサポート終了になります. NodeJS で実行されているすべてのシステムを移行する必要があり、GitHub JavaScript アクションもターゲットに含まれています.

移行プロセスは非常に簡単です.メタデータを更新し、NodeJS v16 でビルドを実行するだけです.例として my PR for gradle/wrapper-validation-action を参照してください.楽しみ!