こんにちは、CX事業本部 Delivery部の若槻です。
npm workspaces を利用すると、複数の npm プロジェクト(workspace)から成るモノリポ環境を容易に管理することができます。
今回は npm workspaces を利用した環境で Dependabot version updates を試してみました。
試してみた
環境準備
npm を初期化します。
npm init -y
workspaces を2つ作成します。
npm init -w ./sub1 -y
npm init -w ./sub2 -y
version updates の機能を試すため、バージョンが最新より低いパッケージをインストールします。
npm i -D esbuild@0.18.16 -w sub1
npm i dayjs@1.11.8 -w sub2
package.json
は各 workspaces に作成されます。一方で node_modules
および package-lock.json
はルートに作成され、各 workspaces から参照されます。
$ tree -L 2
.
├── README.md
├── node_modules
│ ├── @esbuild
│ ├── dayjs
│ ├── esbuild
│ ├── sub1 -> ../sub1
│ └── sub2 -> ../sub2
├── package-lock.json
├── package.json
├── sub1
│ └── package.json
└── sub2
└── package.json
Dependabot version updates
そもそも npm workspaces 環境で Dependabot version updates を利用する場合の情報がドキュメントで見当たらなかったのですが、下記 Issue でのコメントが参考になりました。
構成ファイルを作成します。
mkdir .github
touch .github/dependabot.yml
npm workspaces 環境では次のようにトップレベルを対象にすれば良いようです。
.github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: weekly
変更を GitHub にプッシュします。
Dependabot のチェック対象のファイルにルートおよび各 workspace の package.json
および package-lock.json
が含まれていることが確認できます。
そしてチェックが完了すると、各 workspace に対するバージョンアップデートの Pull Request が自動作成されました。良さそうですね。
Grouped version updates
最近、Dependabot により必要以上に Pull Request が分かれることを防ぐための機能として、Grouped version updates for Dependabot が利用可能となりました。この機能が npm workspaces 環境でも利用できるのか試してみます。
構成ファイルを設定します。
.github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: weekly
groups:
dependencies:
patterns:
- "*"
変更を GitHub にプッシュすると、workspace 横断のバージョンアップデートの Pull Request が作成される挙動となりました。
ただし、Grouped version updates を有効にする以前にオープンされていた既存の Pull Request は、workspace を使用しない場合とは異なり、自動でクローズされる挙動とはならないようです。
おわりに
npm workspaces によるモノリポ環境で Dependabot version updates を試してみました。
はじめはサブプロジェクトごとに update の定義を記述する必要があると考えていましたが、トップレベルだけを記述すれば良いのはとても便利ですね。
以上