ruby-build のパッケージ定義ファイルを生成する

Ruby の処理系がリリースされた際に rbenv/ruby-build に PR を開いている定義ファイルを生成するスクリプトを upstream に提案した。既に ruby-build には PR を開いていて統合済み。

github.com

過去の PR と見る人が見れば分かる定義ファイルだが、既に自動化されていたTruffleRuby 向けと Rubinius 向けを参考に CRuby 向けと JRuby 向けも自動化した。

頭の中のチェックメモはあって基本的な部分を含めて記すと以下になる。

  • 公式サイトでのリリースアナウンスをソースとする
  • CRuby と JRuby のいずれもダウンロードできるパッケージがいくつか公開されているので、それぞれ適したものを入手する
  • CRuby の場合は公式サイトで SHA256 が書かれているので一致を確認する (していない場合はどこかに問題がある場合があり公式サイトの値が違っていたことがある)
  • CRuby の場合は openssl のバージョンを他の定義ファイルと突き合わせる
  • JRuby の場合は require_java のバージョンを他の定義ファイルと突き合わせる
  • PR を開くことになる定義ファイルでインストールと Hello, world くらいが成功することを確認する

このあたりいくらか職人の温かみのあるセルフレビューの必要が残っているものの update-truffleruby と同様にスクリプトの実行で定義ファイルが作れる。

以下を ~Downloads ディレクトリにパッケージをダウンロード済みである状態で実行する。

# Ruby 2.7.0 の定義ファイルを生成する場合
% cd path/to/rbenv/ruby-build
% script/update-cruby 2.7.0 ~/Downloads

# JRuby 9.2.11.0 の定義ファイルを生成する場合
% script/update-jruby 9.2.11.0 ~/Downloads

注意点としては macOS を使っている人は SHA256 のコマンドが gsha256sumshasum -a 256 なんかだと思うので、sha256sum を symlink しておくなどのハックがいると思う。このあたり rbenv は type コマンドでうまいこと解決しているが、ベースの update-truffleruby の実装に合わせていることや利用者がその周辺で限定されているものだったのであえて対応せずコンパクトな形にしている。

RVM にもこういったのがあると便利だと以前から思っていはいるので、そのうち用意したいところ。