トップ «前の日記(2023/03/07 (火) ) 最新 次の日記(2023/03/09 (木) )» 編集 RSS feed

HsbtDiary


2023/03/08 (水) [長年日記]

minitest のアップデート後に Ruby CI が落ちていたのを直した

先週末の土日にかけて、(自分たちは)何もしていないはずなのに Ruby CI がすべて fail するようになってしまった。

http://rubyci.s3.amazonaws.com/debian/ruby-master/log/20230305T003004Z.fail.html.gz

たまたま @k0kubun くんが minitest をインストールするための定義ファイルをアップデートすることで解消したんだけど、そもそもなんで?というのを追いかけてみたら以下のような原因だった。

  • bundled gems をインストールするときは gems/bundled_gems のバージョンとテストのための指定したコミットが示すバージョンが一致してない場合はエラーとなる
  • gems/bundled_gems は 5.17.0 と https://github.com/minitest/minitest/commit/d4fc359899f96944be147609e045b9e921881f19 が指定されていて、それぞれ 5.17.0 なのでエラーは起きないはずだった
  • ところが minitest が 5.18.0 をリリースしたらバージョン不一致が発生して落ちた

ここまではわかるのだが、コミットを指定していたらバージョンが変わるわけはないので、原因を調べていったら minitest は gemspec をリポジトリに置いておらず動的に作成した上でバージョン一致比較をしているのだが、この処理が指定したコミットではなく常にデフォルトブランチのHEAD で実行するというバグが有ったのが原因だった。

https://github.com/ruby/ruby/commit/59905883c42625d039f40306598646853f2cc794

ひとまず git clone したあとに指定したコミットを checkout するようにしたので、今後は起きないだろうけどほんとつらい。

コメントの変更なのに Ruby CI が落ちていたのを直した

また何もしてないのに壊れたネタ。月曜の朝くらいから FreeBSD 12 や OpenBSD, Solaris など規則性がない環境で CI のエラーが発生していてなんじゃこりゃ?というのを Ruby コミッタ複数人総出で調べていて、結局以下の内容が顛末だった。

  • https://github.com/ruby/ruby/commit/1b4c1492c1704407f86af2882efebc047b9c2d26 から落ち始めた
  • net-http.gemspec が version を取り出すために使っている正規表現がミスマッチを起こして version を示す文字列が nil になっているのではないかという仮設を立てたが正規表現は正しそう
  • ko1 さんが常に落ちる環境を手元に用意できたので、具体的に落ちている場所を調べていったら正規表現が問題ではなく、文字エンコーディングの問題でエラーとなっていたのに rescue nil で握りつぶしていたのが問題だった

以上の流れで nil な Gem::Version が生成されてエラーメッセージが出ることで stdout を見るようなテストがボコボコ落ちていた、ってことだった...。環境によって起きたり起きなかったりしていたのは LANG が設定されているかどうか、というオチ付き。

https://github.com/ruby/ruby/commit/62e2b61607c04ff0d2543f0515b2171a24e66b4e

gemspec でバージョンを取り出す処理で utf8 が入っていても問題ないようにはなったけど、とにかくつらい。

アンゴルモア 元寇合戦記 博多編 (7) を読んだ

購読配信で積ん読になっていたのを読んだ。月刊なので進行がものすごくゆっくりなのはしょうがないけど、このキャラ誰だったっけ...ということがあり過去のコミックを引っ張り出しながら読んでいる。

博多に上陸してしまった、というあたりの蒙古襲来の話は知らないのでふむふむ〜と半分学びながら読む、って感じならまあまあ良いかも。


アンゴルモア 元寇合戦記 博多編 (7) (角川コミックス・エース)
たかぎ 七彦
KADOKAWA
¥704