PureScript packageのアップデートが自動でpackage-setsに反映されるようになってた

プロローグ

2年弱ほど前にv0.14.x対応をしてからしばらくPureScriptから離れていたが、急にやる気が出てv0.15.xを対応していた。 しばらく離れていたのでおそらくv0.15.xで動かなくなったのであろうライブラリが全てpackage-setsからいなくなっていて、 あ〜、もっかい追加しなきゃな〜めんどくさいなぁと思っていた。 (注: 現在主流のspagoというパッケージ管理兼ビルドツールでデフォで使えるライブラリにするには素手でpackage-setsで管理されてるdhallに変更を加えてPRを送る必要があった)

そんな気持ちでアップデート作業をしていたところ、なんか勝手にpackage-setsに反映されていることに気づいた。

Registry

purescript/registryというものがつくられ、そこを中央registryにしような!みたいな流れがありつつ、そのregistryによって何かが動作するみたいなことは長い間何もなかったものの、時を経て、どうやら現在は以下のように動いているようである。

  • 新しくライブラリつくった時はregistryに情報を追加してね
  • そうしといてくれれば、ドキュメントのpursuitへのもアップロードしとくし、package-setsにライブラリを追加しといてあげるよ
  • 一度registryに登録しといてくれれば、タグのリリースあったら勝手に諸々更新されるよ

purescript/registryからはライブラリは消えてなかったので、 確かになんもしてなくても勝手にpursuitへのアップロードはされてて、package-setsにも追加されていた。 非常に少しずつではあるが便利にはなってきてはいるな〜という感じではあった。

ただ、なんだかよくわからないけど、package-setsへの追加だけ失敗しているライブラリが一部あった。 追加されてないライブラリを見ると、direct dependenciesが全て入ってないライブラリ(要するに任意のライブラリに依存Aがあり、Aは依存a', b'をもつ時に、任意のライブラリがa'を直接参照していたら、依存にAが入っていれば問題なくビルドはできるけど、a'も直接実装で参照されてるからa'も依存としていれろ的なアレである。現在のspagoとかはそれをいれないとエラーになる。)が追加されてなかったので、そういう理由かと思ったが、後日見ると、direct dependenciesが全て入ってなくてもpackage-setsに追加されていたので、 結果的になにが理由だったのかは謎だった。 なんにせよ、v0.15.x対応がされているのにpackage-setsに入ってないものはありそうだなぁという感じだった。 というか実際に他人がオーナーのライブラリでもそういうのがあったので、対応した。

定期実行はpurescript/registrygithub actionを通して、purescript/registry-devのコードを実行していたので、それを読めば謎はわかるだろうが、めんどくさいから読んでいない。

package-sets

元々使われていたpurescript/package-setsは今も生きているが、purescript/registryにもpackage-setsというディレクトリができていてそこで管理がなされているので、そのうち、完全に移行がされるような雰囲気がある。(ちなみに、文中のpackage-setsに追加されてないライブラリが一部ある、みたいなトラブルが起こったのは前者の昔からある方である。)

現状のspagoはpurescript/package-setsのほうを使っている。

エピローグ

ゆっくりではあるものの、esmodule対応とか、パッケージ周りの整備が知らない間に結構進んだなという小学生並みの感想を残してフィニッシュです。