Summary
This is an article about GitHub action to automate apt/perl/node tool installation. Installed files are cached for later use. use-apt-tools
and use-perl-tools
are for apt/perl tools. use-any-tools
is for both. install-node-modules
is for node package installation and cache all node_modules
under the specified directory. Read each repository's README. Visit https://github.com/tecolicom/actions.
必要なツールを簡単にインストールしたい
ある作業で GitHub Actions を使おうとしていて、その中で apt と perl と node のツールが必要になったので、とりあえず bash action で工夫してみたという話。結論としては、こんな action を書くだけで、必要なツールがすべて使えるようにしました。最初の実行にはインストールのための時間がかかるけど、2回目からはキャッシュが効くので数秒で終わります。
追記: その後、Homebrew、Python、Ruby のツールをインストールするアクションを追加しています。また、use-x-tools
は use-any-tools
という名前に変えました。
- uses: tecolicom/actions-use-any-tools@v1
with:
apt-tools: bmake
perl-tools: App::Greple App::optex::textconv
node については、作業ディレクトリ以下に lock ファイルがあると、そこでインストールコマンドを実行して node_modules
ディレクトリをキャッシュします。
- uses: tecolicom/actions-install-node-modules@v1
with:
root: Script/lib/node
actions-use-apt-tools
tools
に使いたいツール名を書くだけ。
- uses: tecolicom/actions-use-apt-tools@v1
with:
tools: bmake
actions-use-perl-tools
同じく tools
に、CPAN モジュールを並べるだけ。
- uses: tecolicom/actions-use-perl-tools@v1
with:
tools: App::Greple App::optex::textconv App::sdif
actions-use-any-tools
apt
と perl
のツールを一度に指定できるようにしたもの。各ツール固有のパラメータを指定することはできないけど、普通はそんな必要はないはず。
- uses: tecolicom/actions-use-any-tools@v1
with:
apt-tools: >-
bmake
perl-tools: >-
App::Greple
App::optex::textconv
App::sdif
actions-install-node-modules
node のツールは、作業ディレクトリにあるので、lock
ファイルを探して、発見したらでパッケージをインストールします。使っているのは package-lock.json
だけなんですが、見様見真似で yarn.lock
にも対応してあります。root
パラメータを指定すればそのディレクトリを対象にして、指定がなければカレントディレクトリの下をすべて検索します。
- uses: tecolicom/actions-install-node-modules@v1
with:
root: Script/lib/node
諸々
- Docker イメージ作れよという意見はあると思います。
- ubuntu-latest でしか試してません。
- 処理系はシステム標準のものを使います。特別なバージョンが必要な場合には、別途インストールします。一度、バージョンを指定するパラメータを入れたけど、無駄なので抜きました。
- 実用目的で、マトリックステストみたいのは想定していませんが、環境毎にキャッシュは有効になるはずです。
- 環境や対象ツールが変わった場合には、全部インストールしなおします。
- 再インストールを強制するためには
cache-gen
という世代番号を更新します。 - キャッシュヒットした場合の挙動はツールによって違います。perl は、キャッシュがあっても cpanm を実行するので、より新しいバージョンがあればインストールして、キャッシュを更新します。apt は更新しません。
-
cache: no
と指定すればキャッシュしません。だったらあまり使う必要ないけど。 -
cache: workflow
と指定すると、ワークフロー内のみでキャッシュが有効になります。テスト用です。 - perl のツールは
~/perl5
にインストールします。install-base:
で変更できます。PATH
とかそういうのはよろしく設定します。 - node は、ほとんど知りません。改善点などあればご提案ください。
- GitHub Actions も、はじめて使ったのでよくわかってません。変なところがあったら教えてください。
- はじめて、個人ではなく会社のリポジトリで公開してみました。社員一人ですがw