先週末の土日にかけて、(自分たちは)何もしていないはずなのに Ruby CI がすべて fail するようになってしまった。
http://rubyci.s3.amazonaws.com/debian/ruby-master/log/20230305T003004Z.fail.html.gz
たまたま @k0kubun くんが minitest をインストールするための定義ファイルをアップデートすることで解消したんだけど、そもそもなんで?というのを追いかけてみたら以下のような原因だった。
gems/bundled_gems
のバージョンとテストのための指定したコミットが示すバージョンが一致してない場合はエラーとなるgems/bundled_gems
は 5.17.0 と https://github.com/minitest/minitest/commit/d4fc359899f96944be147609e045b9e921881f19 が指定されていて、それぞれ 5.17.0 なのでエラーは起きないはずだったここまではわかるのだが、コミットを指定していたらバージョンが変わるわけはないので、原因を調べていったら minitest は gemspec をリポジトリに置いておらず動的に作成した上でバージョン一致比較をしているのだが、この処理が指定したコミットではなく常にデフォルトブランチのHEAD で実行するというバグが有ったのが原因だった。
https://github.com/ruby/ruby/commit/59905883c42625d039f40306598646853f2cc794
ひとまず git clone したあとに指定したコミットを checkout するようにしたので、今後は起きないだろうけどほんとつらい。
また何もしてないのに壊れたネタ。月曜の朝くらいから FreeBSD 12 や OpenBSD, Solaris など規則性がない環境で CI のエラーが発生していてなんじゃこりゃ?というのを Ruby コミッタ複数人総出で調べていて、結局以下の内容が顛末だった。
version
を取り出すために使っている正規表現がミスマッチを起こして version を示す文字列が nil になっているのではないかという仮設を立てたが正規表現は正しそうrescue nil
で握りつぶしていたのが問題だった以上の流れで nil な Gem::Version
が生成されてエラーメッセージが出ることで stdout を見るようなテストがボコボコ落ちていた、ってことだった...。環境によって起きたり起きなかったりしていたのは LANG が設定されているかどうか、というオチ付き。
https://github.com/ruby/ruby/commit/62e2b61607c04ff0d2543f0515b2171a24e66b4e
gemspec でバージョンを取り出す処理で utf8 が入っていても問題ないようにはなったけど、とにかくつらい。
購読配信で積ん読になっていたのを読んだ。月刊なので進行がものすごくゆっくりなのはしょうがないけど、このキャラ誰だったっけ...ということがあり過去のコミックを引っ張り出しながら読んでいる。
博多に上陸してしまった、というあたりの蒙古襲来の話は知らないのでふむふむ〜と半分学びながら読む、って感じならまあまあ良いかも。