kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

Dependabot の config.yml に「Automatic PR merging」を設定する

Dependabot を使うと「依存パッケージ」の更新を自動化できる.対応言語も幅広く,個人的には JavaScript / Ruby / Python / Docker をよく使っている.最高に便利なんだけど,例えば JavaScript などはリリース頻度が高く,すぐにプルリクエストが溜まってしまう(プルリクエスト数の制限はできる).最近は「Automatic PR merging(プルリクエスト自動マージ機能)」を使うことも多く,設定例を紹介する.

dependabot.com

Dependabot 設定画面

「Automatic PR merging」をすぐに試すなら設定画面を使う.true or false という単純な設定ではなく「ランタイム依存」「開発依存」に対してアップデートレベルを設定できる.さらに特定のパッケージをホワイトリスト形式で設定することもできる.

  • Runtime dependency PRs to merge automatically(ランタイム依存)
    • None
    • Patch updates (security only)
    • Patch updates (all)
    • Minor updates
    • All updates
  • Development dependency PRs to merge automatically(開発依存)
    • None
    • Patch updates (security only)
    • Patch updates (all)
    • Minor updates
    • All updates
  • Whitelisted dependencies to merge automatically (all versions)

参考までに設定画面を載せておく.

f:id:kakku22:20200608102430p:plain

Dependabot config files

Dependabot には「config files」の仕組みもあり,リポジトリに .dependabot/config.yml を置いておくと設定ファイルを GitHub で管理できる.設定ファイルに「Automatic PR merging」を設定する場合は automerged_updates を使う.詳しくは以下の設定項目から選べる.

  • automerged_updates
    • dependency_type
      • development
      • production
      • all
    • update_type
      • security:patch
      • semver:patch
      • semver:minor
      • in_range
      • all
    • dependency_name

dependabot.com

設定例 1 : 全てのプルリクエストを自動マージする

サンドボックス環境など,全てのプルリクエストを自動マージしても大丈夫な場合は dependency_typeupdate_typeall を設定する.今回は JavaScript を前提にする.

version: 1
update_configs:
  - package_manager: javascript
    directory: /
    update_schedule: daily
    automerged_updates:
      - match:
          dependency_type: all
          update_type: all

設定例 2 : マイナーバージョンアップまではプルリクエストを自動マージする

基本的に「メジャーバージョンアップ」だと非互換な更新を含む可能性もあるため,例えば「マイナーバージョンアップまで」ならプルリクエストを自動マージするという戦略もある.その場合は update_typesemver:minor を設定する.

version: 1
update_configs:
  - package_manager: javascript
    directory: /
    update_schedule: daily
    automerged_updates:
      - match:
          dependency_type: all
          update_type: semver:minor

設定例 3 : 特定のパッケージに限定して自動マージする

例えば axiosreact* など,特定のパッケージに限定して自動マージする場合は dependency_name にパッケージ名を設定する.ワイルドカードも使えるため,記述量を減らすこともできる.

version: 1
update_configs:
  - package_manager: javascript
    directory: /
    update_schedule: daily
    automerged_updates:
      - match:
          dependency_name: axios
      - match:
          dependency_name: react*
          update_type: semver:minor

まとめ

Dependabot「Automatic PR merging」を使うとプルリクエストを自動マージできる.今回は「config files」の設定例を紹介した.

なお,自動テストがエラーになった場合にプルリクエストが自動マージされてしまうと困る.ドキュメントに書いてある通り,自動テストを設定している場合は,ステータスを確認する仕組みになっている.実際に CircleCI を使って,一時的に自動テストがエラーになるようにしても自動マージはされなかった.Dependabot will still automatically merge this pull request if you amend it and your tests pass. というコメントもある通り,自動テストを修正すればマージされる.今回は master ブランチ側でテストを直して,プルリクエストに @dependabot rebase とコメントしたらマージされた.

Dependabot will wait until all your status checks pass before merging.

f:id:kakku22:20200604113841p:plain

Dependabot 関連記事

kakakakakku.hatenablog.com