Renovateでsqlfluffとsqlfluff-templater-dbtは同時にバージョンを上げるようにgroupの設定をする

小ネタです。

依存ライブラリのバージョン管理にRenovateを長いこと使っています。ChangeLogを自分で見に行かなくてよいので、大分楽をさせてもらっています。

別の話題として、SQLのlinter/formatterにsqlfmtsqlfluffを使っています。基本はsqlfmtだけで済むようにして、どうしてもカスタムで入れたいルールだけホワイトリスト形式でsqlfluffを使う運用をしています。sqlfluffのみだとdbtのテンプレートをうまく扱えないので、sqlfluff-templater-dbtも同時にインストールしています。

Renovateでsqlfluffsqlfluff-templater-dbtが対象の場合、個別にバージョンを上げるPRが上がってくるとCIなどがこけることが多いと思います。具体的にはこういうエラーメッセージになっているかと思います。

ERROR: Cannot install -r requirements.txt (line 9) and sqlfluff==2.3.2 because these package versions have conflicting dependencies.

The conflict is caused by:
    The user requested sqlfluff==2.3.2
    sqlfluff-templater-dbt 2.3.3 depends on sqlfluff==2.3.3

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

エラーメッセージの通り、この2つのライブラリは同時にバージョンを上げる必要があります。こういう場合、RenovateではGroupingの設定ができるので、それで解決します。

具体的にはこういう設定を書いてあげるとよいですね。

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ],
  "packageRules": [
    {
      "matchPackageNames": ["sqlfluff", "sqlfluff-templater-dbt"],
      "groupName": "sqlfluff packages"
    }
  ]
}