GithubActionsのnodeバージョンをpackage.jsonから取得する
はじめに
GithubActionsのsetup-node v3.5.0で、nodeバージョンをpackage.jsonから取得できるようになりました。
しかもvoltaやenginesにも対応済みなので嬉しいです。
何が嬉しいの?
従来は以下のようにGithubActionsのymlファイルでnode-versionで指定する必要がありました。
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm ci
- run: npm test
プロジェクトのnodeバージョンを上げたタイミングでGithubActionsのnodeバージョンも上げたいですが、その都度node-versionを変更するのは手間です。
大きいプロジェクトだと使用しているGithubActionsのファイル数も多く、修正もれが出てくる可能性も高くなります。
その点、package.jsonからnodeバージョンを取得できれば一括で管理できるので、GithubActionsのnode-versionを意識しなくてよくなります。
使い方
node-versionの代わりにnode-version-fileを指定して、読み込みたいファイルを指定す流だけです。
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version-file: 'package.json'
- run: npm ci
- run: npm test
tips
node-versionとnode-version-fileが両方記載されている場合
この場合はnode-versionが優先されます。
voltaとenginesが両方記載されている場合
voltaとenginesに対応していますが、両方書かれている場合はvoltaが優先されるようなので注意が必要です。
例えばpackage.jsonが以下の場合はenginesが先に記載されていますが、voltaのnodeバージョンが優先されます。
{
"engines": {
"node": ">=16.0.0"
},
"volta": {
"node": "16.0.0"
}
}
node-version-fileについて
node-version-fileは元々、プロジェクトのNode.jsのバージョン管理しているファイルへのパスを記載すれば、そのファイルからnodeのバージョンを取得できます。
なのでnvmを使用している場合は以下の指定でnodeバージョンを指定できます。
node-version-file: '.nvmrc'
おわりに
GithubActionsで微妙に歯痒かったnode-versionがこれで一括管理できるようになって便利になりました!
過去にはvoltaのバージョンからnodeバージョンを引っ張ってくるアクションを作成された方もいるくらいなので、本当に便利になりました。
https://qiita.com/kt15/items/b567a7faf79a183d6d31
参考記事
https://blog.lacolaco.net/2022/10/github-actions-setup-node-engines/
Discussion