1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dependabotのライブラリアップデートのプルリクをまとめてみる

Posted at

Dependabotが自動で作成してくれるライブラリアップデートのプルリクをグループとして複数のライブラリをまとめて作成してくれないかを調べたり試してみたので備忘録として記事にしておきます。

複数のライブラリのプルリクをまとめられないと何が不便なのか

複数のライブラリのプルリクをまとめられないと何が困るのか?という点ですが、それらのライブラリ同士が依存関係として密接に関係している場合に個別に1つずつプルリクをマージしていくとマージの途中で他のライブラリのマージが出来なくなったりすることがあります。

例えばAWSのPython SDKのboto3、boto3の型アノテーション用のboto3-stubs、及びCLI用のawscliなどはお互いに割と依存していたり、アップデートも大体同じタイミングで公開されたり、バージョンの数値がパッチバージョンが一致していたりと基本的にどれかのライブラリバージョンを上げる時には他のライブラリバージョンも合わせて上げた方が無難な形になっています。

一方でDependabotのプルリクは普通に使っていると1つのライブラリに付きアップデート用に1件のプルリクが作られます。そのため個々のプルリクが作られた後に1つ1つマージしていこうとすると一時的な相互のバージョンの依存関係の問題でCIが引っかかったりしてしまうことが割とあります。

また、ものによっては個々のプルリクを1つ1つマージしていると途中でコンフリクトするケースもあります。

複数のライブラリのプルリクをグループとしてまとめることでこれらが解決できないか試します。

事前に情報を軽く調べてみる

Dependabotのリポジトリで以下のissueで色々と議論されています。

issueが追加されたのは2018年ですが、やりとりを追っていってみるとサポートされたのは2023年10月のようで割と最近サポートされた形となっているようです。

公式のドキュメントとしては以下のものになっています。

軽く目を通してみると、どうやらセキュリティ的に問題になっているものに関してはグループではなく単一の形でもプルリクが作成されるケースがあるようです。

設定例としては以下のものが挙げられていました。どうやらgroupsというセクションを設けて、グループ化の条件をpatternsなどのセクションで設定していく形になるようです。

また、以下の記事も読んでいたところ、どうやらこの方はpackage-ecosystemごとにpatternsをアスタリスクにして全てをグループ化する形にしているようです。

確かに考えてみると全部プルリクがまとめられていても私の場合は問題なさそうですしマージの手間も減りそう・・・なので合わせて1つにまとめていってみます。

実際に設定を調整してみる

趣味で書いていっている以下のPythonライブラリで試していってみます。

対象のリポジトリではpipgithub-sctionsnpmの3つのpackage-ecosystemに対してDependabotの設定が以下のようにしてあります。

dependabot.yml
version: 2
updates:
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "weekly"
    ignore:
      - dependency-name: "python"
        versions: ["<=3.7", ">=3.9"]
  - package-ecosystem: 'github-actions'
    directory: '/'
    schedule:
      interval: 'weekly'
  - package-ecosystem: 'npm'
    directory: '/'
    schedule:
      interval: 'weekly'

これにgroupsのセクションを以下のように加えてみます(package-ecosystem単位で全部まとめるようにアスタリスクで条件を設定しています)。

version: 2
updates:
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "weekly"
    ignore:
      - dependency-name: "python"
        versions: ["<=3.7", ">=3.9"]
    groups:
      dependencies:
        patterns:
          - '*'
  - package-ecosystem: 'github-actions'
    directory: '/'
    schedule:
      interval: 'weekly'
    groups:
      dependencies:
        patterns:
          - '*'
  - package-ecosystem: 'npm'
    directory: '/'
    schedule:
      interval: 'weekly'
    groups:
      dependencies:
        patterns:
          - '*'

変更をpushしてしばらくまっていたところ、以下のようなプルリクが作成されていました。

image.png

Bump the dependencies group with 9 updatesというプルリクのタイトルになっていることから分かる通りグループ化の設定が効いており、9個のアップデートが一括で含まれていることが分かります。

プルリクの中身を見てみると以下のように対象となっている各ライブラリのバージョンがいくつからいくつへと変更されるのかであったり各ライブラリごとのRelease notesなども表示できるようになっているようです。

image.png

シンプルな設定で割と効果が高そう(週次とかでのライブラリアップデートのプルリクマージが一層楽に終わりそう)で中々良さそうです。お仕事でも使っていってみようと思います。

参考文献・参考サイトまとめ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?