GitHub Dependabotのtarget-branchオプション指定時の動作を確認してみた
こんにちは、CX事業本部 IoT事業部の若槻です。
GitHub Dependabotのドキュメントを見ているとtarget-branch
というオプションを見つけました。
By default, Dependabot checks for manifest files on the default branch and raises pull requests for version updates against this branch. Use target-branch to specify a different branch for manifest files and for pull requests. When you use this option, the settings for this package manager will no longer affect any pull requests raised for security updates.
(日本語訳)
デフォルトでは、Dependabot はデフォルト ブランチのマニフェスト ファイルをチェックし、このブランチに対してバージョン更新のプル リクエストを発行します。マニフェスト ファイルとプル リクエストに別のブランチを指定するには、target-branch を使用します。このオプションを使用すると、このパッケージ マネージャーの設定は、セキュリティ アップデートのために発生したプル リクエストに影響しなくなります。
この記述だけだと私はtarget-branch
の指定により何ができるのか分かりそうで分かりませんでした。
そこで次の観点を確認するために実際に動作を確認してみました。
- デフォルト以外のブランチ上のマニフェストファイルをアップデートの検出対象に指定できる?
- 自動作成されるPull Requestのマージ先に任意のブランチを指定できる?
- alertおよびsecurity updatesの動作はどうなる?
確認してみた
デフォルトブランチのみがスキャン対象となる
まず前提として、Dependabotではデフォルトブランチのみがスキャン対象となる仕様を確認してみます。
GitHubででRepositoryを新規作成してローカルにCloneします。
脆弱性を含んだバージョンのnpmライブラリをインストールします。
# 重要性criticalの脆弱性が検出されている $ npm url-parse@0.0.0 added 1 package, and audited 2 packages in 885ms 1 critical severity vulnerability To address all issues (including breaking changes), run: npm audit fix --force Run `npm audit` for details. # gitignore touch .gitignore echo /node_modules > .gitignore
Dependabotのコンフィグを作成します。この時点ではtarget-branch
は未指定とします。
mkdir .github touch .github/dependabot.yml
version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "daily" open-pull-requests-limit: 1
main
ブランチをコミットしてプッシュします。
git add . && git commit -m "init" && git push origin HEAD
次にmain
からチェックアウトしたdevelop
ブランチを操作します。
git checkout -b develop
脆弱性を含まないバージョンのnpmライブラリをインストールします。
$ npm i url-parse@latest
develop
ブランチをコミットしてプッシュします。
git add . && git commit -m "init develop" && git push origin HEAD
デフォルトブランチをmain
からdevelop
に変更します。
Security Updatesを有効化します。
この時点でalertsは発生していません。
これで、Dependabotではデフォルトブランチのみがスキャン対象となる仕様を確認できました。
デフォルト以外のブランチでalertsが発生するか確認してみた(発生しなかった)
続いて、target-branch
にデフォルト以外のブランチを指定時にalertsが発生するか確認してみます。
main
およびdevelop
ブランチの両方で、コンフィグファイルでtarget-branch
にデフォルトでないブランチmain
を指定します。
version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "daily" open-pull-requests-limit: 1 target-branch: "main"
上記変更をプッシュしましたが、alertsは発生しませんでした。
どうやらtarget-branch
を指定してもデフォルト以外のブランチ上のマニフェストファイルをアップデートの検出対象に指定できるわけではないようです。
自動作成されたPRのマージ先を指定できるのか確認してみた(指定できなかった)
続いて、自動作成されたPRのマージ先をtarget-branch
で指定できるのか確認してみます。
デフォルトブランチをmain
に変更します。
するとalertsが発生し、メール通知も来ました。
自動で作成されたPull Requestを見てみると、この時点ではマージ先がmain
となっています。
ここで、main
ブランチのコンフィグファイルでtarget-branch
にdevelop
を指定します。
version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "daily" open-pull-requests-limit: 1 target-branch: "develop"
脆弱性を含んだバージョンのnpmライブラリをインストールします。
$ npm i axios@0.21.1 added 2 packages, removed 2 packages, changed 1 package, and audited 4 packages in 1s 1 package is looking for funding run `npm fund` for details 2 vulnerabilities (1 high, 1 critical)
変更をプッシュすると、alertsが発生しました。
自動作成されたPRを見るとマージ先はmain
となっています。
target-branch
を指定しても自動作成されるPull Requestのマージ先に任意のブランチを指定できる動作とはなりませんでした。
おわりに
GitHub Dependabotのtarget-branchオプション指定時の動作を確認してみました。
target-branch
オプションを指定すれば、デフォルトとしている開発ブランチではなく、リリースブランチでもsecurity updatesによる脆弱性検出ができることを期待していたのですが、残念ながらそのような動作は確認できませんでした。
target-branch
の正しい使い方や仕様をご存知の方がいたら教えて頂ければと思います。
参考
以上