Lucene/Solr開発の更新内容を検知したい

Lucene/Solrの開発状況を把握して非推奨機能や廃止機能を追いたかったので、いくつか有用そうなソースを調べた。
LuceneとSolrのリポジトリは何年か前に統合されていたが、SolrがASFのTLPになるのに合わせて再度分割された。
詳細は [こちらのWiki](https://cwiki.apache.org/confluence/display/LUCENE/Solr+TLP+needed+changes) にまとまっている。

git pullしたら、さっきまでmasterブランチにあった全てのコードが消えて「さよなら〜」みたいなREADMEだけになったので超びっくりした。

# Git

2021-03-11 時点の状態。
SolrのTLP化に伴って、SolrとLuceneのリポジトリが分離された。

- 9系の開発だけ移行し、8系以前の開発は lucene-solr リポジトリで行われるっぽい
- defaultブランチはmasterでなくmainになった。
- その他の運用規則の変更や大きなディレクトリ構成の変更はなさそう。
- SolrとLuceneのバージョニングが今後も同一になるのかはまだ調べてない

## ブランチ

各ブランチはそれぞれ独立して伸びていく。

| ブランチ名 | 説明 |
|:-:|:--|
| (solr,lucene) main | 最新メジャーバージョンの開発ブランチ <br> ここからリリースはされない<br>現状(2021-03-11)は9.x.x系の開発ブランチ<br>9.0.0がリリースされたら10.x.x系の開発に利用される |
| (lucene-solr) branch_8x | 8.x.x系の開発ブランチ<br>現状(2021-03-11)、8.9.0の開発に利用されている<br>9.0.0がリリースされたらbranch_9xブランチが作られる |
| (lucene-solr) branch_8_8 | 8.8.x系の開発ブランチ<br>現状(2021-03-11)、8.8.2の開発に利用されている<br>リリース時にタグが打たれる(releases/lucene-solr/8.8.0)<br>9.0.0がリリースされたらbranch_9_0ブランチが作られる |

例えば、9.0.0で廃止される機能のコードはmainに反映され、branch_8xにdeprecatedとして注意喚起としてだけ反映されたりはしてた。
逆に、branch_8xに取り込まれた修正情報は、main＝9.0.0にも反映されるが、別のコミットとしてそれぞれのブランチに反映されてた模様。

## CHANGES.txt

### Solr

[Solrリポジトリ](https://github.com/apache/solr) のsolr/CHANGES.txtにまとめられている。
上述のブランチごと＝マイナーバージョンごとに亜種が存在するので注意。

### Lucene

[Luceneリポジトリ](https://github.com/apache/lucene) のlucene/CHANGES.txtにまとめられている。
他の点はSolrと同じ。

### 運用

SolrはJIRAのチケットごとに開発が行われており、コミットはチケット番号ごとに行われる。
コミット時にCHANGES.txtにも追記される。
ただし、deprecatedになった情報はCHANGES.txtではなく、リファレンスガイドに追記される模様。

## 変更箇所の検知に利用する

CHANGES.txtから変更点を検知するには、バージョンごとのブランチをすべて監視する必要がある。

例えば、利用中のSolrのバージョンが8.6.3で、開発中の9.0.0までの変更点を検知したい場合、branch_8_6、branch_8_7、branch_8_8、branch_8x、main のCHANGES.txtを監視する必要がある。
8.9.0と9.0.0がリリースされてしまうと、branch_8_6、branch_8_7、branch_8_8、branch_8_9、branch_8x、branch_9_0、branch_9x、main が監視対象になってしまう。

# リファレンスガイド

バージョンごとの Solr Upgrade Notes に Removed Contribs や Deprecations の項目があり、非推奨や廃止になった機能について言及されている。
例えば、9.0.0で廃止になる機能についてコードがmainに取り込まれた後、branch_8_7のリファレンスガイドには非推奨の記述だけ追記されたりする。

## 変更箇所の検知に利用する

`/solr/solr-ref-guide/src/solr-upgrade-notes.adoc` の変更を検知すれば非推奨機能を追えるかもしれないが、人間向きの記述なので自動化は難しい。

# GitHub

ASFのGitBox(?)はGitHubと同期している。
PRも横行しておりGitHub上で開発できる模様。

## 変更箇所の検知に利用する

Slack用の GitHubアプリ を使ってアクティビティを通知できる。
通知対象の機能は下記の通り。結構頻繁に追加されてる気がする。
https://github.com/integrations/slack から抜粋。

### デフォルトの通知対象機能

| 機能 | 説明 |
|:-:|:--|
| issues | Opened or closed issues |
| pulls | New or merged pull requests, as well as draft pull requests marked "Ready for Review" |
| statuses | Statuses on pull requests |
| commits | New commits on the default branch (usually master) |
| deployments | Updated status on deployments |
| public | A repository switching from private to public |
| releases | Published releases |

### 追加設定可能な通知対象機能

| 機能 | 説明 |
|:-:|:--|
| reviews | Pull request reviews |
| comments | New comments on issues and pull requests |
| branches | Created or deleted branches |
| commits:all | All commits pushed to any branch |
| +label:"your label" | Filter issues, pull-requests and comments based on their labels |

通知設定と解除はスラッシュコマンドで行う。
通知先のチャンネルにGitHubアプリを招待しておく必要がある。

```
/github subscribe owner/repo branches commits:all
/github unsubscribe owner/repo issues deployments
```

# JIRA

開発単位はJIRAで管理されている。
チケットには Fix Version(s) という項目があり、どのバージョンに反映されるか大体分かるようになっているが、時々間違っているのであまり当てにならない。

## 変更箇所の検知に利用する

ASF JIRAの検索結果をRSSとして取得できるが、Slackに通知しようとするとサイズが大きすぎて通知登録できない。
Fix Versionごとに分ければ登録できる。
最新バージョンは、それだけで大きすぎるので件数を100件まで落とせば登録できる。

正直、通知内容も見れたもんではないので使えそうにない。

# まとめ

コードの変更を全て追うコストは払えないとはいえ、地道にCHANGES.txtを追ったほうがよさそう。