RenovateでDenoの依存関係をアップデートする
この記事はDeno Advent Calendar 2023の8日目の記事です。
TL;DR:
Denoの依存関係をRenovateで管理するためにdeno用のRenovateの設定を書いたよ。
Denoは便利
Deno, 便利ですよね。
個人的には下記がイチオシのポイントです。
- Typescriptを(見た目上)そのまま実行できる
- tsconfigを頑張って設定する必要がない
- formatter, linter, language serverなどがランタイムに同梱されている
- 頑張って設定しなくてもいい感じのコードがすぐ書ける
話は変わりますが、Denoのファイルの依存関係の管理に何を使っていますか?
私が知っている限り、一般的に使われているのは下記のいずれかだと思います。
- udd
- denopendabot
- molt
Renovate, Dependabot
Denoに関わらず、色々な言語の依存管理の更新ができるツールとしてRenovateやDependabotがあります。
Github actionsなどをこれで管理しているので、Denoの依存管理もこれらに寄せたいというニーズはよくあるものかな、と思います。
特にRenovateはdenoのdatasourceを出してくれているので、denoのプロジェクトにも比較的入れやすように感じます。
(ただし、自分で設定しないと動かない。 denoのサポートのissueは2020年からあるようです。)
先行研究として、npm:
specifierなどに対応した↓の記事があったので、他のレジストリにも対応させてshareable-configとして数ヶ月使ってみたところ便利だったので、紹介します。
Omochice/renovate-config
renovate.json
に下記の記述を追加すると使えます。
{
"extends": [
"github>Omochice/renovate-config:deno"
]
}
対象のファイルの指定しかないので、すでに動いているRenovateの設定と衝突する可能性は限りなく低いです。
js
, ts
, jsx
, tsx
の拡張子のファイルとimport_map.json
やdeno.jsonc
などがライブラリ更新のターゲットになります。
現状、下記のレジストリに対応しています。
- Deno系
https://deno.land/std
https://deno.land/x
- npm系
-
npm:
specifier https://esm.sh
https://unpkg.com
https://cdn.skypack.dev
-
- github usercontent系
https://raw.githubusercontent.com
https://pax.deno.dev
- その他
https://x.nest.land
github usercontent以外のレジストリについては以下のようなバージョン指定に対応しています。
-
Semverを満たすもの
- Semverと同じ形式の範囲内であればCalVerでバージョニングされていても動きます
- Semverの先頭に
v
がついたもの - majorやminorまでしか指定されていないバージョン
-
some-library@5.0
やsome-library@5
のような指定
-
github usercontentについてはタグが指定されていることが条件になります。
逆に以下のパターンだとうまくバージョン更新ができません。
- 動的import
- 正規表現を頑張れば対応できそう?
-
/
を含むgitのタグ(raw.githubusercontent.com
とpax.deno.dev
)
deno.land
, npm:
は手元で実際に問題なく動いていますが、x.nest.land
などは正規表現のテストぐらいしかしていないので、ライブラリによっては動かないかもしれません。
(https://nest.land/gallery をさらっと見てみましたが、Semverでバージョニングされているものが多そうなのでおそらく動くはず...)
Discussion
拙作まで紹介して頂いてありがとうございます…!
Renovate が Deno に対応したのは知っていたのですが、書かれている通り自力での設定が必要なので誘導しずらかったんですよね。これで心置きなく Renovate も勧められます!
コメントありがとうございます!
いえいえ、現状一番の選択肢はdenopendabotかmoltだと思います(書いた本人が言うのもアレですがかなり大変な正規表現になってしまっているので...)
やっぱり正規表現ベースだと大変ですよね。とはいえ Renovate のエコシステムに乗っかれるのは大きなメリットだと思うので、こっちの路線の方が人気出そうな気がします。