36. GitHub Actions で自動テストを走らせてみた
競技プログラミングを C# で始めたのですが、調べていくうちに C++ では一般的に使われているデータ構造で C# に存在しないものがあると知りました。
例えば、優先度付きキューは .NET 6(2021年11月リリース)で初めて実装されました。これ以前のフレームワークには存在しないということになります。
.NET 6 は LTS なのでそのうち対応されるとは思いますが、現状 AtCoder で提出できるのは .NET Core 3.1 のコードです。そのため、優先度付きキューを使いたければライブラリに頼るか、自分で実装するしか無いです。競技プログラミングという特殊な性質を考えると、自分で実装しておいた方が良さそうです。
というわけで、.NET Core 3.1 に存在していないデータ構造やアルゴリズムを、プライベートリポジトリでチマチマと実装しています。
ライブラリということで、実装にバグが無いかしっかりテストを作っておきたいです。何故か答えが合わないと思ったらライブラリにバグがあった…という状況は悲しいです。
Visual Studio 上で毎回手動実行しても良いのですが、いずれ面倒になりそうです。というわけで、GitHub Actions を使って自動テストを走らせるようにしました。
GitHub Actions で main ブランチ更新ごとにテストを走らせる
GitHub Actions ですが、public リポジトリでは無制限で利用できて、private リポジトリでは月に2000分までの稼働なら無料のようです。それなりの規模でアプリケーションを開発するなら引っかかりそうですが、今回のようなレベルであればまず問題ないと思います。
リポジトリで「Actions」を選択します。
「New workflow」ボタンをクリックすると、workflow 選択画面に遷移します。この時点で何らかのコードを push していれば、言語に合わせて workflow をサジェストしてくれます。今回は .NET が良いです。
これで「.github/workflows/dotnet.yml」というファイルが作成されます。あとは、実行された workflow のエラーログを見つつ、yml を適切に修正していきます。私の場合、dotnet のフレームワークバージョンや working-directory の修正が必要でした。
ちゃんと通るテストが書けていれば、設定が適切になった時点で緑になります。これでOKです。
あとは、main ブランチに変更が入るたびにテストが自動実行されます。ここで失敗するテストが出てくるようになれば、ステータスが赤くなります。
気付きやすくなるように、README.md にバッジを埋め込んでおきます。「Create status badge」メニューからマークダウンが出力されます。これをコピペすれば良いだけです。
README ではこのように表示されます。テストが失敗していれば赤くなります。これで、リポジトリを見れば実装に問題があるかすぐ分かるようになりました。