https://bugs.ruby-lang.org/issues/19747 にあるように yarp に取り組んでいる kevin と jemma が Ruby コミッタになってもよい、と Matz から approval が出たので各種アカウントの設定をして Ruby コミッタにする業をしていた。
とはいえ、ほとんどがコードにより自動化されているので、ここに pull-request を出して、と依頼したのをマージすれば技術的なところはほぼ終わってしまって、あとは Web からポチポチするのをいくつか、というレベルにまで省力化してるので、あとは GitHub や Redmine を API 使って勝手にやるようにしたらほぼ終わってしまう気がしなくもない。
そろそろ真面目に RubyGems の Resolver を PubGrub にしていこうと思い、現状の Molinillo の使い方と Bundler の PubGrub の使い方の2つをにらめっこしながら構造の理解をしていた。
https://github.com/rubygems/rubygems/blob/master/lib/rubygems/resolver.rb
ちょっと面白かったのが、RubyGems も Bundler も両方とも Resolver クラスに Molinillo や PubGrub の Resolution のために必要な基底 module を include した上で、Resolution Engine だけでは解釈することができない、特有の処理を実装した上で self
で Resolver に自分自身を渡しているところだった。
これ、ちゃんと処理をするためのメソッドを用意したクラスを別途作って渡して処理した方が密結合にならなくていいんじゃないの、と思い試してみたら、logger 用途のための基底クラスは簡単に剥がすことはできたものの、Resolution 本体の方は Resolver クラスの外であちこちから呼ばれるようなデータがあってちょっと難しそうだった。なるほどなあ。これは密結合だ。
https://github.com/rubygems/rubygems/pull/6766
コードリーディングしている過程で、これいらなくね?という箇所を見つけたので上のように直しつつ、構造は理解したけど、PubGrub に切り替えるに当たって、基底モジュールに用意する必要があるメソッド郡は何をしているのか、を理解するのが次かなあ。
Ruby の URI に ReDoS の脆弱性があるという CVE-2023-36617 のハンドラーをしていた。報告から、パッチ作成などなど、については Ruby フルタイムコミッタの仕事報告 2023年Q1 - ANDPAD Tech Blogを読んでください。
で、別にもうこなれているのでちゃちゃっとやるぞ〜と思い修正したバージョンの公開(gem push/git push)をしてから、アナウンスを出すぞ、と思ったら GitHub Actions で以下のような見慣れない表示がでて全くデプロイが進まず「なんだよこれ〜」と右往左往していた。
deploy is waiting for github-pages deployment approval
検索してみたら、deployment を使う時に admin なりの approve を必要とする機能らしく、そんなもの設定した記憶はないものの、GitHub は知らないところで進化することがあるので、機能が変わったのか?などひたすら調べてみたものの、ヘルプにあるようなページには飛ぶことができず、こっちはもう脆弱性の修正コードを公開してるんだから勘弁してくれよ...とめちゃくちゃフラストレーションだった。
https://www.githubstatus.com/incidents/ws2l6203cs7g
結局これは上にあるように8時間くらいに渡る障害だったらしく、本当に最悪な日にセキュリティ対応をしたのがついてないという結論になってしまった。本当に辛い。
脆弱性の方はアナウンスである https://www.ruby-lang.org/en/news/2023/06/29/redos-in-uri-CVE-2023-36617/ を見てもらうとして、GitHub Actions + GitHub Pages のこの長時間の障害は、ガチで公開時間が求められるようなサイト(適時開示など)には GitHub Pages を使ってはいけないなという教訓になった。GitHub がんばれ。