rubyforgeでのリリースがうまくいかない→解決

Ruby 1.8だと「require 'rubygems'」が糞重いのでgem作成とか正直興味なかった。おまけに「ruby -rubygems -rGEMNAME」と指定できない糞仕様*1。インストールが手軽というメリットよりも俺的にはデメリットの方が上回っていた。
Ruby 1.9だとデフォルトでgemが使える状態なのでオーバーヘッドがほとんどなくなった。というわけで俄然gem作成に興味が出てきた。Ruby 1.9時代になってやっとgemが実用的に使えるようになったと思う。
gemのリリースにはrubyforgegithubが使えることは知っている。リリースを自動化するツールを探していると、id:keita_yamaguchiさんによるRTaskというgem作成からrubyforgeリリースまでを自動化するツールを発見した。rubyforgeでもgitが使えるし、githubリリースの予定をrubyforgeリリースに変更した。プロジェクト名「rubikitch.rb」で申請し、承認された。小粒なツールやライブラリをいろいろ置いておく予定。

http://rubikitchrb.rubyforge.org/

w3m-autopagerizeがとりあえず使える形になったのでrubikitch.rbというプロジェクト内でリリースしようと思っている。gem作成は「rtask」コマンドのgem editorであっさり作成。楽チンである。こういうのを待っていた。
しかし、リリース時に問題が…

# 正直、rtask -r内でrubyforge loginしてくれると嬉しい。
$ rubyforge login

$ rtask -r
WARNING:  RDoc will not be generated (has_rdoc == false)
  Successfully built RubyGem
  Name: w3m-autopagerize
  Version: 1.0.0
  File: w3m-autopagerize-1.0.0.gem
tar -T Manifest.txt -c -z -f w3m-autopagerize-1.0.0.tgz
rake aborted!
no <group_id> configured for <rubikitchrb>
/pkgs/ruby18/lib/ruby/gems/1.8/gems/rubyforge-1.0.1/lib/rubyforge.rb:396:in `lookup'
(See full trace by running task with --trace)
zsh: exit 1     rtask -r

# あれー?rubikitchrbのgroup_idがない?
# しょうがない、rubyforge configしてみる。
# 正直RTaskがこのへんやってほしいところ。
# 「rubyforge_project」に入力しているのだからわかるはずだし。
$ rubyforge config rubikitchrb

$ rtask -r
WARNING:  RDoc will not be generated (has_rdoc == false)
  Successfully built RubyGem
  Name: w3m-autopagerize
  Version: 1.0.0
  File: w3m-autopagerize-1.0.0.gem
tar -T Manifest.txt -c -z -f w3m-autopagerize-1.0.0.tgz
rake aborted!
no <package_id> configured for <w3m-autopagerize>
/pkgs/ruby18/lib/ruby/gems/1.8/gems/rubyforge-1.0.1/lib/rubyforge.rb:396:in `lookup'
(See full trace by running task with --trace)
zsh: exit 1     rtask -r

# あれ?今度はpackage_idがない?
# いちいちブラウザ経由でパッケージ編集しないといけない?
# これも「name」で指定してるから自動でやってほしいのだが。
# New Package Name:にw3m-autopagerizeと書いてポチ。
# 不要なのかもしれないが念の為rubyforge configしてみる。
$ rubyforge config rubikitchrb
Updating rubikitchrb

$ rtask -r
WARNING:  RDoc will not be generated (has_rdoc == false)
  Successfully built RubyGem
  Name: w3m-autopagerize
  Version: 1.0.0
  File: w3m-autopagerize-1.0.0.gem
tar -T Manifest.txt -c -z -f w3m-autopagerize-1.0.0.tgz
rake aborted!
no <processor_id> configured for <Any>
/pkgs/ruby18/lib/ruby/gems/1.8/gems/rubyforge-1.0.1/lib/rubyforge.rb:396:in `lookup'
(See full trace by running task with --trace)
zsh: exit 1     rtask -r

# あれー?今度はprocessor_idがない??
# 昔使っていた ~/.rubyforge/config.yml を見てみるとAnyは8000だとわかったので
# ~/.rubyforge/auto-config.yml に追記。
# こんなのrubyforge configとかがやるべきじゃないの?もしやバグ??
$ rtask -r
WARNING:  RDoc will not be generated (has_rdoc == false)
  Successfully built RubyGem
  Name: w3m-autopagerize
  Version: 1.0.0
  File: w3m-autopagerize-1.0.0.gem
tar -T Manifest.txt -c -z -f w3m-autopagerize-1.0.0.tgz
rake aborted!
Couldn't get release_id, upload failed?
/pkgs/ruby18/lib/ruby/gems/1.8/gems/rubyforge-1.0.1/lib/rubyforge.rb:303:in `add_release'
(See full trace by running task with --trace)
zsh: exit 1     rtask -r

# あー、もうわけわからん。

rubyforgeコマンドは開発当初(0.1.0か0.2.0)から知っていたのだが、使い勝手がよくないという印象だった。いったいなぜconfig.ymlのusernameとpassword以外の部分を手編集しないといけないのだ?たしか昔はいろいろなidを手で入力しないといけなかった。そんなのscrapeしてくれよ、やってられんよということでしばらく距離を置いていた。History.txtを読んでみたらauto-config.yml導入によりそこそこ自動化されてるっぽいけど…→手編集不要だった。
俺の場合、rtaskを使う前にナニかが足りないのかもしれない。RTaskはこのへんも面倒見てくれると初めての人もハマらなくて済むと思う。

はじめの一歩さえ踏み出せたらいいのだが…

追記

よくわからんので .rubyforge を削除してもう一度作りなおしたらあっさり成功。rubyforgeコマンドもいつのまにか手編集不要になってて嬉しい。これで安心してrubyforgeを使うことができる。

$ rm -rf ~/.rubyforge
$ rubyforge setup
$ rubyforge config
$ rtask -r
WARNING:  RDoc will not be generated (has_rdoc == false)
  Successfully built RubyGem
  Name: w3m-autopagerize
  Version: 1.0.0
  File: w3m-autopagerize-1.0.0.gem
tar -T Manifest.txt -c -z -f w3m-autopagerize-1.0.0.tgz
Released w3m-autopagerize-1.0.0.gem, w3m-autopagerize-1.0.0.tgz, and w3m-autopagerize-1.0.0.zip

念の為一度パッケージを削除してやりなおしてみた。以下のコマンドを実行する必要があった。これも面倒見てほしいな。YAMLを読むだけなんだから。

$ rubyforge create_package rubikitchrb w3m-autopagerize

追記[2009/02/01]

ぼやいていても始まらないので、とりあえず消極的なRTaskのパッチを書いて送った。

  • 古いconfig.ymlがあったら「消して再度 rubyforge config しろ」とメッセージを出して終了する。
  • 「no configured for 〜」な場合は「rubyforge create_package しろ」とメッセージを出して終了する。

簡単にリリースできたので感動した。

*1:まあrugemというコマンドはあるけど。