トップ «前の日記(2017/07/26 (水) ) 最新 次の日記(2017/07/28 (金) )» 編集 RSS feed

HsbtDiary


2017/07/27 (木) [長年日記]

ruby-build v20170726 をリリースした

https://github.com/rbenv/ruby-build/releases/tag/v20170726 に書いてある通りなんですが、definitions が前回のリリースから結構溜まったのでリリースしときました。

High Sierra でもビルドできるようになってると思うので、ビルドできない〜という状況にぶつかっていた人はアップグレードして試してみてください。

bundler の rspec examples を ruby trunk でビルドしたバイナリで実行できるようにしてみた

だいぶ前にとりあえず lib/bundler 入れて rubygems/rubygems の HEAD でもテスト実行できるようにしてみたというやつをもう少し進めた。

https://github.com/ruby/ruby/pull/1536

まず、ruby のソースに make test-bundler というタスクを追加して、これを実行すると bundler/bundler をクローンして、isolated な環境でビルドして出来立てホヤホヤのバイナリで rspec を使って bundler のテストを実行するというもの。ひとまず nmake では絶対動かなそうな task はこちらです。

https://github.com/ruby/ruby/pull/1536/files#diff-7e056ddc530791272d363e50c1f25647R488

これ、$(srcdir) が相対ディレクトリになっていたり、ビルドディレクトリをフルパスでとる方法が見つからなくてこんな感じになってるので、シュッとする方法があれば教えてください。

んでもって、bundler のテストもなかなか厳しくて、まずインストール済みである Ruby 、つまり ruby バイナリがどこかにポンとあってそれを使ってテストするという方法にはなってない箇所がちらほら合った。具体的には

  • C 拡張な gem を bundle install でビルドできることというテストが、Gem.ruby としてインストール済みの Ruby を見つけることができずに死ぬ
  • インストール前の Ruby でテストを実行するので default gems が存在することを期待しているテストが死ぬ
  • bundler でインストールした gem のコマンド、例えば rack/rails などの shebang がインストール済みの ruby を期待しているのでテストが死ぬ
  • bundler のヘルプファイルは groff で man を作成しているので ruby 本体からは作ることができないプラットフォームもあって無理
  • そもそも bundler/bundler のディレクトリ構造に密結合しているテストがあって死ぬ

というあたりはどうしようもないのでとりあえず skip することにした。テストを実行するために当てるパッチはこちらです。

https://github.com/hsbt/ruby/blob/e16f39690e2e7843690f691e9f68e3371aba96f3/spec/bundler.patch

幸いにして、上のパッチを当ててどうしようもないテストを除外した後だと

2269 examples, 0 failures, 3 pending

という感じで、除外した 40 examples を加えた総数 2300 くらいのうち 95% 以上のテストはこれで実行できてテストも通っているので、意外といいんでは?という感触なのがいまここの状況。

もうちょいコード整頓して、bundler 本体ともネゴれば ruby の stdlib として bundler を同梱できるかなあ、RubyKaigi までに何かしらの進捗を出せるといいんだけど。ご期待ください。