GitHub Actions 上で Node.js をインストールする場合、バージョンを指定しますよね。
そこでバージョン番号をベタ書きしてしまうと、プロジェクトで使う Node.js のバージョンが上がった際にいちいち書き換えないといけないので、ちょっと面倒です。
ところで nodenv などを使っているメンバーがいるプロジェクトでは、 .node-version
というファイルが存在すると思います。
GitHub Actions が実行される際に .node-version
ファイルの中身を読んで、それに従って Node.js をインストールしてくれたら、後々楽ができそうです。
一番最初に試してみたのは以下の実装です。
xargs
を使うのがミソですね。
(アドバイスをくださったチームメンバーの H さんに感謝します。)
steps:
- uses: actions/checkout@v2
- name: Set NODE_VERSION
run: cat .node-version | xargs -I {value} echo "NODE_VERSION={value}" >> $GITHUB_ENV
- uses: actions/setup-node@v2
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'yarn'
- run: yarn install
- run: yarn test
次に試したのは、 $()
を使った実装です。
こっちの方が記述量が少ないですね。
(コメントをくださった @ushjp さんに感謝します。)
steps:
- uses: actions/checkout@v2
- name: Set NODE_VERSION
run: echo "NODE_VERSION=$(cat .node-version)" >> $GITHUB_ENV
- uses: actions/setup-node@v2
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'yarn'
- run: yarn install
- run: yarn test
ここまで試したところで、そもそも actions/setup-node@v2
自体にその機能があることが判明しました。
実は node-version-file
を指定するだけで良かったんですね。
(コメントをくださった @kmkm さんに感謝します。)
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version-file: '.node-version'
cache: 'yarn'
- run: yarn install
- run: yarn test
というわけで、一番下のやり方がベストだと思われます。
皆様のご参考になれば幸いです。
蛇足
ruby/setup-ruby@v1
は .ruby-version
ファイルを勝手に読んでくれるし、 bundler-cache: true
を指定すれば bundle install
もやってくれるらしいです。
便利ですね。