Accompanistの開発版のバージョニングが独特で、Renovateと相性が悪い

Accompanistとは

Google公式の、Jetpack Composeを補完する拡張ライブラリーです。

Accompanistの開発版のバージョニング

直近の0.24系の開発版が次のようになっている。

  1. v0.24.0-alpha
  2. v0.24.1-alpha
  3. v0.24.2-alpha
  4. v0.24.3-alpha
  5. v0.24.4-alpha
  6. v0.24.5-alpha
  7. v0.24.6-alpha
  8. v0.24.7-alpha
  9. v0.24.8-beta(ここからbetaに変わった)
  10. v0.24.9-beta
  11. v0.24.10-beta

SemVer的に見ると、v0.24.z のz部分はmajor・minor・patchのpatch部分に見えるが、Accompanistは現状SemVer(のpatch)を使ったバージョニングではなさそうで、z部分は開発版として何番目のリリースか、という数字でしかないようである。alphaの中で何番目、betaの中で何番目、という情報はなく、開発版全体として何番目で、その時の状態がalphaかbetaなのかが最後に付く、となっている。

SemVerなら

  1. v0.24-alpha.1
  2. v0.24-alpha.2
  3. v0.24-alpha.3
  4. v0.24-alpha.4
  5. v0.24-alpha.5
  6. v0.24-alpha.6
  7. v0.24-alpha.7
  8. v0.24-alpha.8
  9. v0.24-beta.1
  10. v0.24-beta.2
  11. v0.24-beta.3

という付け方になるであろう。

Renovateでの開発版のバージョンへの更新

RenovateはデフォルトでignoreUnstableという設定がオンになっていて、安定版から開発版(非安定版)への更新がされないようになっている。ただし例外があって、現在使用中のバージョンが安定版ではなく開発版であり、更新対象となる最新版とmajor・minor・patchが一致する場合は(SemVerでいうところのpre-release version以降だけが更新されたら)更新してくれる。

By default, Renovate won't update any package versions to unstable versions (e.g. 4.0.0-rc3) unless the current version has the same major.minor.patch and was already unstable (e.g. it was already on 4.0.0-rc2).

ここでAccompanistの開発版のバージョニングに戻ってみると、SemVerの観点では毎回patch部分が更新されていることになる。従って先述の条件を満たさず、例えば v0.24.8-beta から v0.24.10-beta への更新のPRは用意されないことになっている。この、ある開発版から、major・minor・patchが一致しない別の開発版への更新が起きないことはドキュメントにも明記されている。

Renovate will also not "jump" unstable versions automatically, e.g. if you are on 4.0.0-rc2 and newer versions 4.0.0 and 4.1.0-alpha.1 exist then Renovate will update you to 4.0.0 only.

ということで、このようなバージョニングでも開発版に追従していきたい時*1ignoreUnstable を明示的にオフ(false)にしましょう。

  "packageRules": [
    {
      "matchPackagePatterns": ["^com\\.google\\.accompanist:"],
      "ignoreUnstable": false
    }
  ]

*1:Jetpack Composeの開発版を使う時は、Accompanistも対応する開発版を使うことになる