この記事はCI/CD Advent Calendar 2021に参加しています。
先日GitHub ActionsがNodeJS v12のみならずv16でも動くようになりました。
今まではNodeJS v12しかサポートされていませんでしたが、このv12は来年の4月でサポートが切れます。速やかにv16に移行したほうが良さそうですね。必要な作業は actions.yml
の runs.using
を書き換えるだけではありますが、他に必要になるであろう作業もいくつか紹介します。
package.json
の engines.node
を更新
package.json
で実行に利用するNodeJSのバージョンを指定していた場合、それを更新する必要があります。16.13.1
が現在の最新バージョンなので、望ましい設定は以下のようになるでしょう:
"engines": { "node": "^16.13.1" }
tsconfig.json
を更新
NodeJSを12から16に上げると、ES2019ではなくES2021を使えるようになります。TypeScript公式の推奨設定を参考に、compilerOptions
を更新します:
{ "compilerOptions": { "lib": ["ES2021"], "module": "commonjs", "target": "ES2021" } }
TypeScriptを更新
ES2021をサポートしていないTypeScriptを使っている場合、TypeScript自体の更新が必要になります。 npm add -D typescript@^4.5.4
などとして更新しましょう。
なおTypeScript 4.4で、catchされたオブジェクトの型をany
からunknown
に変更されています。トップレベルでエラーをキャッチして core.setFailed()
を呼んでいる場合は修正が必要です:
- core.setFailed(error.message) + if (error instanceof Error) { + core.setFailed(error) + } else { + core.setFailed(JSON.stringify(error)) + }
ESLintを更新
ESLintの現時点での最新は8.5.0です。私が更新した多くのリポジトリではいくつかのプラグインも導入していましたが、そのような場合は
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
などとして同時にアップデートすることが良いと思います。
.eslintrc.json
の更新はESLintのリリースノートに載っているマイグレーションガイド(例えば3.0.0用マイグレーション)に従っても良いですが、特に設定にこだわりがないならば
actions/typescript-action
のデフォルトブランチ から最新の推奨設定を引っ張ってくる方が時間は短縮できます。
GitHub Actions WorkflowでNodeJS v16を使う
GitHub hosted runnersでworkflowを実行し、かつactions/setup-node
を使っていない場合、今月10日ごろから既にv16を使ったビルドが走っています。特に対応不要です。
actions/setup-node
を使っている場合は、node-version
を変更する必要があります。ただ個人的には .nvmrc
や .node-version
に使うバージョンを書いておいて、GitHub Actionsではその値を読むのがメンテ箇所が減るためおすすめです。setup-node
のv2.5.0からnode-version-file
設定がサポートされています:
- uses: actions/setup-node@v2 with: node-version-file: '.nvmrc'
まとめ
以上です。GitHub JavaScript ActionはいつNodeJSのバージョンを上げるんだろう……と不安になっていた方々、やっと来ましたのでバンバン上げていきましょう。私が実際に作成した変更をいくつか並べておきますので、ご参考まで。