🛠️
[Flutter] flutterプロジェクトにDependabotを導入したときのメモ
GitHubの設定から有効にして、dependabot.yml置いたら終わりかと思ったら予想外にPRが全然作られなかったりしたので発生した問題と対策を覚書しておきます。
ちなみにまだ1回もPR届いてません。
基本構成
dependabot.yml
version: 2
registries:
private-registry:
type: git
url: https://github.com
username: yourname
password: ${{secrets.PERSONAL_TOKEN}}
updates:
- package-ecosystem: "pub"
directory: "/"
# 毎日、日本時間の10時に更新をチェックする
schedule:
interval: "daily"
timezone: Asia/Tokyo
time: "10:00"
open-pull-requests-limit: 10
versioning-strategy: increase
reviewers:
- "YourName"
registries:
- private-registry
Dependabotを有効にする
Settings > Code security からDependabotを有効にする
- Dependency graph
- 有効にすることで、Insights > Dependency graphが確認できるようになる
- Dependabot alerts
- 依存関係に影響する脆弱性に関するアラートを受信できるようになる
- Dependabot security updates
- アラートを受信したあとに、それを解決するpull requestを自動で作成することを許可する
- Dependabot version updates
- 新しいバージョンが利用可能になったとき、依存関係を最新にするPRを自動で作成することを許可する
- dependabot.ymlファイルで指定する
- Dependabot on Actions runners
- GitHub Actions上でDependabotを実行する。今後はこれがデフォルトになるから設定項目自体が消えるかも。
プライベートレジストリを参照する
pubspec.yaml
で読み込んでいるライブラリの中にプライベートレジストリの内容が含まれていた場合、registriesの設定が必要です。
dependabot.yml
registries:
private-registry:
type: git
url: https://github.com
username: yourname
password: ${{secrets.PERSONAL_TOKEN}}
:
updates:
- package-ecosystem: "pub"
:
registries:
- private-registry
例えばこのうち、private-registry
がpubspec.yaml
で指定しているレジストリの名前です。
(例えばcupertino_icons
をプライベートレジストリでforkしていたら、cupertino_icons
)
githubの場合、passwordの代わりにpersonal access token
が利用できます。
生パスワードを使うより、ちゃんと適用範囲を制限したpersonal access tokenを発行して設定するのが良いです。
versioning-strategy
本気でわかりにくい
パラメータ | 説明 |
---|---|
auto | 未指定の場合もこれ。pubの場合はwiden。 |
increase | 新しいバージョンと一致するように、最低バージョン要件を追加します。 範囲が既に存在する場合は通常、下限を増やすだけです。 |
increase-if-necessary | 必要な場合のみバージョンを上げます(例:セキュリティアップデートや互換性の問題がある場合) |
widen | 可能であれば、許可されるバージョンの要件を広げて、新旧両方のバージョンを含めます。 |
lockfile-only | ロックファイルを更新する pull request のみを作成します |
ライブラリの場合はwiden、アプリの場合はincreaseが推奨されてるぽい。
例えば以下のようになるとは公式ドキュメントに書かれているんだけど、全くPRが作成されないのでまだ試行錯誤中。
現在のバージョンが1.0.0
であり、現在の制約が^1.0.0
の場合
新しいバージョン 1.2.0
パラメータ | 新しい制約 |
---|---|
increase | ^1.2.0 |
increase-if-necessary | ^1.0.0 |
widen | ^1.0.0 |
新しいバージョン 2.0.0
パラメータ | 新しい制約 |
---|---|
increase | ^2.0.0 |
increase-if-necessary | ^2.0.0 |
widen | >=1.0.0 <3.0.0 |
version updatesによるPRが作成されない
依存関係がany指定されている
- anyはバージョン指定がないため、Dependabotが更新対象として正常に認識できないことがある
- そもそもanyは非推奨
- 1回
flutter pub upgrade
を実行して、pubspec.lockからバージョン番号を取得して再設定
pubspec.yaml
- firebase_core: any
+ firebase_core: ^3.10.0
- firebase_messaging: any
+ firebase_messaging: ^15.2.0
- firebase_analytics: any
+ firebase_analytics: ^11.4.0
dependency_overridesの影響
-
dependency_overrides
が設定されているとDependabotが正常に更新対象を認識できないことがある。 - 私の環境だとこれが原因だった場合、dependency_overridesを外すのが相当大変なので困ったことになる。
- pub: No PRs created if there are conflicts overridden by dependency_overrides #8356
Discussion