TL;DR
Scala Steward Github Action を使いましょう。
Scala では Dependabot が使えない
以前 Scala で作った Web アプリを Dockerize して動かす(令和最新版) という記事を書いたのですが、執筆から1年以上がすぎ紹介している各ライブラリのバージョンが古くなっていました。これでは令和最新版じゃありません。当該記事ではサンプルリポジトリを作っていましたので、そこで依存ライブラリのアップデート検証をすることにしました。
まずは検証が楽なように ScalaTest で自動テストを書き、GitHub Actions で走らせました。せっかくなので sbt-scoverage で生成したカバレッジレポートを upload-artifact で Actions の完了画面にアップロードさせてみるなどしました。
さぁ次は依存ライブラリのアップデートだ、dependabot.yml
を書くぞ、というところでハタと気づきます。他の Scala プロジェクトで Dependabot が動いているところを見たことがありません。GitHub のドキュメントでも、サポート対象のパッケージマネージャとして記載されていません。
Scala Steward について
Scala Steward は依存ライブラリ、sbt プラグイン、および Scala と sbt のバージョンアップを行う PR を自動作成してくれる OSS です。おおよそ Dependabot と同じ事をしてくれますね。Akka や Play Framework 、Slick といった著名な Scala プロジェクトでも採用されていますから、それらの PR やコミットログで動きを確認できます。Scala Steward が紹介された Scala Blog の記事が2019年7月で、Dependabot が GitHub に買収されて無料で使えるようになったのが2019年の5月です。このあたりで依存アップデート自動化の波が来ていたことがわかります1。
Scala Steward 自体はサービスではなくソフトウェアなので実行するためのホストが必要です。かつては開発者でもある @fthomas さんが無償利用できる環境を提供していましたが、現在は VirtusLab 社がその役割を引き継いでいます。
Scala Steward を GitHub Actions で使う
Scala Steward Github Action はそんな Scala Steward を GitHub Actions で走らせるための Action です。VirtusLab 社の環境を使わせてもらってもいいのですが、GitHub Actions なら独自の環境をお手軽に用意できるメリットがあります。
セットアップ方法については、README.md にかなり詳細なチュートリアルが掲載されているので、そう迷うことはないはずです(私が試した際に迷ったポイントは PR を投げて修正させてもらいました)2。
セットアップに成功すると、このようにかなり詳細な PR を作成してくれます。ネコちゃん執事のアイコンが可愛いですね。
参考リンク
- Scala Steward
- Scala Steward Github Action
- KEEP YOUR PROJECTS UP-TO-DATE WITH SCALA STEWARD
- My public Scala Steward instance is not running anymore. I've turned it off to focus my attention and energy on other matters.
- Configuration options for the dependabot.yml file
-
ちなみに dependabot-core の初期リリースは2017年4月で、そのベースとなった gocardless/bump の Initial Commit は2015年10月です。scala-steward の初期リリースが2019年2月なので、dependabot のほうが歴史あるプロジェクトとなります。一方、renovate の Initial Commit は2016年12月でした。なお renovate は v16.9.0 から sbt をサポートしていますから、renovate の GitHub Actions を使う手もあります。 ↩
-
GitHub の仕様変更がない限り。 ↩