1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHub Actions で apt/perl/node/python/ruby ツールをインストールしてキャッシュする

Last updated at Posted at 2022-01-21

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-toolsuse-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

aptperl のツールを一度に指定できるようにしたもの。各ツール固有のパラメータを指定することはできないけど、普通はそんな必要はないはず。

- 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

メモ

  • hashFiles には複数のパスが指定できる。
  • 文字列を連結するには formatを使う。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?