🐙

GitHub Actions のワークフローで npm package を利用する

2023/10/23に公開

ワークフローを書いていて、あの 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.jsonpackage-lock.json は不要なので --no-save オプションを指定
    • 別にあってもよいけど一応

のようにしている。

ちなみにどの Node のバージョンで動くかということについては actions/github-script に依存すると思われる(現 v6 の場合は 16)。なのでローカルでデバッグ等をする場合は package は当然ながら Node のバージョンも揃えておいた方がよさそう。

任意の npm package ができることで、例えば qrcode で QR コードを作ったり、AWS SDK を使えたりなど、ワークフローでできることの幅が広がると思われる。

追記

上記のように動的に install するのではなくて、下記のリポジトリの実装のようにバンドルしておくのも手。

https://github.com/yumemi-inc/changed-files

Discussion