community buildのjenkinsのログを見てライブラリを最新のScalaに対応させるという貢献をする方法

最近以下の自分のtweetきっかけで大炎上発生などがありましたが

https://contributors.scala-lang.org/t/coc-compatible-community-builds/3097

それはおいておくとして(えっ)、その流れでtweetした以下

などで普段やっていることを、具体的に書いておくかなぁ、という気分になったので書いておきます。 やり方さえわかれば、場合によっては面倒なだけで難しくはない?というパターンも多々あるので、他の人も貢献したかったらやってみましょう。

そもそもcommunity buildが何かを説明しないといけないですが、最新のScalaのSNAPSHOTで、色々な主要なライブラリをビルドしてみて

  • Scala本体のバグを見つける
  • バグじゃなくてライブラリ側に対応が必要なら、それをはやく知ることができる

みたいな役割でしょうか。

さらにJDK8とJDK11の両方のビルドがあったりします。詳細はJenkinsのjob一覧見てみてください。(ログインしなくても参照はほぼできる)

それらの目的に関しては、そもそも毎回マイルストーンやRCをリリースしているので、ライブラリ側がマイルストーンやRCでビルドしてくれれば、そのタイミングでもわかりますが、そのタイミングよりもっとイテレーション短く、はやくわかるようにする、ということです。

さて、そもそもJenkinsみて頑張る以前にマイルストーンやRCでひたすらビルドすれば良いわけで、それはそれで重要なんですが、そちらの手順の説明は飛ばすとして、今回は表題のことについて説明します。

必要な情報として

の2つを見ます。

流れを説明すると

  1. Jenkinsの最新のログ見て、失敗しているライブラリを探す
  2. なぜ失敗してるのか考える(コンパイラのバグ?Scala側の仕様変更にライブラリが追従する必要がある?依存ライブラリに破壊的変更があった?ライブラリ側はすでに修正済みだがcommunity buildが古いコミットを参照したまま、など)
  3. ライブラリ側に変更が必要なら、(すでに重複したpull reqが出ていないか、関連issueが存在してないか確認してから) pull reqする

みたいな感じでしょうか。各手順での詳細な方法やポイントを説明すると

という感じです。

最初に自分がこういうことやりだしたのがいつからか?はよく覚えてないですが、少なくとも1年以上前からやってる気はするし、これによって気づいて修正pull req出したパターンは、数十回〜百回近くになるかもしれません(記録していたわけではないので、だいぶ適当な記憶にもとづいて言ってますが)

以前、以下のエントリの中でも書きましたが

xuwei-k.hatenablog.com

これはこれで、慣れるまでは謎のスキルが必要ですが、基本的にコンパイラ内部の深い知識が必要になったりはしないので、そういう意味ではハードルが低い可能性がある?というか、Scala言語自体に対する貢献方法は、このように色々あるので、みんなで少しづつ貢献してどんどんScala言語自体がよくなっていくようにしたいですね、というちょっと無理やり平和的な感じで締めくくっておきます。

ゴールデンウイークも、子どもが風邪気味だったりしたので、わりとこれ含めOSS活動して過ごしたりしています。