🐙
GitHub Actions のワークフローで npm package を利用する
ワークフローを書いていて、あの npm の package が使えればな、と思うことがよくある。そのような場合、自前で JavaScript のカスタム action を作ればよいのだが、次のようにすると手軽に npm package を利用することができる。
minimatch を利用する例:
- name: Install minimatch
run: cd /home/runner/work && npm install --no-save minimatch@v9.0.3
- name: Use minimatch
uses: actions/github-script@v6
with:
script: |
const { minimatch } = require('minimatch');
console.log(minimatch('bar.foo', '*.foo'));
actions/github-script の README にも書かれている内容ではある、が、README の内容そのままではなく
- 作業ディレクトリを汚さないよう
/home/runner/work
へインストール- もっとよい場所はあるかもしれないが、少なくともここは
require
で探索される模様 -
npm install -g
の場合は探索されなかった
- もっとよい場所はあるかもしれないが、少なくともここは
- 挙動が変わってしまわないよう、インストールする package のバージョンを固定
-
package.json
とpackage-lock.json
は不要なので--no-save
オプションを指定- 別にあってもよいけど一応
のようにしている。
ちなみにどの Node のバージョンで動くかということについては actions/github-script に依存すると思われる(現 v6
の場合は 16)。なのでローカルでデバッグ等をする場合は package は当然ながら Node のバージョンも揃えておいた方がよさそう。
任意の npm package ができることで、例えば qrcode で QR コードを作ったり、AWS SDK を使えたりなど、ワークフローでできることの幅が広がると思われる。
追記
上記のように動的に install するのではなくて、下記のリポジトリの実装のようにバンドルしておくのも手。
Discussion