2019/12/15

今年書いた何か Github Actions

昨日は mackee_w さんの「GitHub AppsでPithubを使うためのモジュールGitHub::Apps::Authと使った黒魔術の紹介」でした。

この記事は Perl Advent Calendar 2019 の15日目です。15日目ということは、今年もあと半月ということです。つまり、半月後は2020年ということですね! 今年やろうと思っていたことをやらないと、どうなると思いますか? そう、やらないで終わるんです!! 私の中で来年のことを考えた時に、来年の自分は何歳かなと、アドベントカレンダーにエントリーしたときから考えてました。アドベントカレンダーは楽しく、クールで、セクシーにね。今のままではいけないと思います。だからこそ、アドベントカレンダーは今のままではいけないと思っている!!

さて、
さて、
今年もいろいろありましたね。今年書いた何か、と言うことで、何か書いてるようで何も書いてない感じを狙いつつ、最近 Github Actions で Perl モジュールの CI をまわしてみたのでそれを紹介してみたいと思います。

Github Actions

というわけで、Github Actions ですが、自分が Travis-CI でやっていたことは 全部 Github Actions でも実現できました。macOS/Windowsまでビルドできて無料でさくさくな印象なので、新規のモジュールはもう Github Actions でいこうかなということでテンプレートもすでに書き換えてしまった。サンプル設定ファイルはここ にあります。 ビルド結果のバッジ画像は設定ファイルごとに配信されるのもあって、自分はOSごとに設定ファイルを分離しています(と言ってmacOSやWindowsのビルド結果はバッジ出してないんですけど)。ここの .github/workflow ディレクトリをまるっとコピーしてもらえれば他の CPAN モジュールでも基本的にそのまま利用できるかと思います。cpanfile で develop とか使ってなければ一部記述が不要だったりしますが。

いくつかポイントを説明しておきます。

ビルドバージョンは限定的に

ubuntu/macOS/Windows とテストを回して、それぞれ当然すべての Perl バージョンやOSのバージョンの組み合わせをテストできるのですが、Github Actions 自体はベータで無料なので、いくらか実行の制限があり、ぶんぶん回そうとするとすぐにビルドがはねられてしまうので、テストする環境はできるだけ絞るようにしました。OS自体は最新のみを利用し、ubuntuで Perl 4 バージョン、macOS と Windows ではデフォルトの Perl でのみ回しています。

このあたりはモジュールが XS を含んでいたり OS ごとに差分のあるような場合は、手広く実行するほうが良いかもしれませんが、Pure Perl なら、それほど多く回すより、さっさとまわってくれた方がありがたいのではないかと思います。なにせわれわれには CPAN Testers がありますからね。

developer テストは ubuntu 最新のみ

cpanfile に以下のように指定しているデベロッパーテスト群は、ubuntu の最新バージョンでのみインストールして実行するようにしています。バージョンによる差分があまりでないのと、ここに入れるテスト自体は、古い Perl がサポートされていなかったりするものもあるので、各OS最新 Perl でのみ実行します。

cpanfile:

on 'develop' => sub {
    requires 'Test::Perl::Critic';
    requires 'Test::Pod::Coverage';
    requires 'Test::Pod';
    requires 'Test::NoTabs';
    requires 'Test::Vars';
    requires 'Test::File::Find::Rule';
};

Gihub Actions YAML:

- name: Install dependencies with develop
  run: curl -sL https://git.io/cpm | perl - install -g --with-recommends --with-test --with-configure --with-develop --show-build-log-on-failure
  if: matrix.perl-version == 'latest'

Coverall

テストカバレッジは Travis-CI のときから変わらず coverall を利用します。Devel::Cover::Report::Coveralls です。

coverall で取得したトークンを github repository の Settings にある Secrets に登録して利用します。

Github Actions YAML:

- name: Run Cover
  env:
    COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
  run: |
      cover -test
      cover -report coveralls
  if: matrix.perl-version == 'latest'

カバレッジの送信も、どれかひとつのビルドでだけ行えばよいと思っているので、ubuntu の最新Perlでのみ行っています。

See Also

というわけで「今年書いた何か Github Actions」でした。

明日は papix さんです!

サイト内検索