🐡

RenovateでDenoの依存関係をアップデートする

2023/12/08に公開3

この記事はDeno Advent Calendar 2023の8日目の記事です。


TL;DR:

Denoの依存関係をRenovateで管理するためにdeno用のRenovateの設定を書いたよ。

https://github.com/Omochice/renovate-config

Denoは便利

Deno, 便利ですよね。

個人的には下記がイチオシのポイントです。

  • Typescriptを(見た目上)そのまま実行できる
    • tsconfigを頑張って設定する必要がない
  • formatter, linter, language serverなどがランタイムに同梱されている
    • 頑張って設定しなくてもいい感じのコードがすぐ書ける

話は変わりますが、Denoのファイルの依存関係の管理に何を使っていますか?

私が知っている限り、一般的に使われているのは下記のいずれかだと思います。

  • udd

https://deno.land/x/udd@0.8.2

  • denopendabot

https://deno.land/x/denopendabot@0.18.2
https://zenn.dev/hasundue/articles/denopendabot

  • molt

https://deno.land/x/molt@0.14.2

Renovate, Dependabot

Denoに関わらず、色々な言語の依存管理の更新ができるツールとしてRenovateDependabotがあります。

Github actionsなどをこれで管理しているので、Denoの依存管理もこれらに寄せたいというニーズはよくあるものかな、と思います。

特にRenovateはdenoのdatasourceを出してくれているので、denoのプロジェクトにも比較的入れやすように感じます。

(ただし、自分で設定しないと動かない。 denoのサポートのissueは2020年からあるようです。)

先行研究として、npm:specifierなどに対応した↓の記事があったので、他のレジストリにも対応させてshareable-configとして数ヶ月使ってみたところ便利だったので、紹介します。

https://blog.s2n.tech/articles/renovate-deno

https://til.swfz.io/entries/deno_renovate/

Omochice/renovate-config

https://github.com/Omochice/renovate-config

renovate.jsonに下記の記述を追加すると使えます。

{
  "extends": [
    "github>Omochice/renovate-config:deno"
  ]
}

対象のファイルの指定しかないので、すでに動いているRenovateの設定と衝突する可能性は限りなく低いです。

js, ts, jsx, tsxの拡張子のファイルとimport_map.jsondeno.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.0some-library@5のような指定

github usercontentについてはタグが指定されていることが条件になります。

逆に以下のパターンだとうまくバージョン更新ができません。

  • 動的import
    • 正規表現を頑張れば対応できそう?
  • /を含むgitのタグ(raw.githubusercontent.compax.deno.dev

deno.land, npm:は手元で実際に問題なく動いていますが、x.nest.landなどは正規表現のテストぐらいしかしていないので、ライブラリによっては動かないかもしれません。

https://nest.land/gallery をさらっと見てみましたが、Semverでバージョニングされているものが多そうなのでおそらく動くはず...)

Discussion

ChiezoChiezo

拙作まで紹介して頂いてありがとうございます…!
Renovate が Deno に対応したのは知っていたのですが、書かれている通り自力での設定が必要なので誘導しずらかったんですよね。これで心置きなく Renovate も勧められます!

OmochiceOmochice

コメントありがとうございます!

拙作まで紹介して頂いてありがとうございます…!

いえいえ、現状一番の選択肢はdenopendabotかmoltだと思います(書いた本人が言うのもアレですがかなり大変な正規表現になってしまっているので...)

ChiezoChiezo

やっぱり正規表現ベースだと大変ですよね。とはいえ Renovate のエコシステムに乗っかれるのは大きなメリットだと思うので、こっちの路線の方が人気出そうな気がします。