Rakefile で shipit ぽいの
require "shipit"
Rake::ShipitTask.new do |s|
s.Ask
s.Step.new {
puts "prepare phase"
}.and {
puts "run phase"
}
s.Twitter "Notice to twitter"
end
Rake::ShipitTask.new do |s|
s.Ask
s.Task :test
s.ChangeVersion
s.Commit
s.Task :clean, :package
s.RubyForge
s.Step.new {
}.and {
}
s.Twitter
endみたいに書けるやつは書いてみた ( http://coderepos.org/share/browser/lang/ruby/misc/shipit.rb )。gem にするか悩む
Rakefile つかう場合、基本的にはタスクをつくって、依存関係まとめて、だけでも問題ないんだけど、それだと途中で例外が発生したときに哀しいことになりやすいので、準備のフェーズと実行のフェーズ (外部への副作用がある処理) を分離するようにしてみた (もちろん完全に例外が発生しないようにはできない)。例えば twitter や rubyforge のアカウント設定が正しいか、とかを準備の段階でチェックしておけば、バージョン変更してコミットするまえにわかるので、別の環境で「アカウント設定しわすれてたー」「あーこっちもー」みたいなのはなくなる。
s. かくのがめんどいけど (instance_eval つかっても先頭が大文字なので定数あつかいになる)、 Rakefile は普通コピペでつくるので (cutagem とか new なんとかとか)、多少冗長でもいいし、リリースの順序なんて一回かいたらそんなに更新しないので、ちょっとめんどうくさい、ぐらいならいいかなぁ。
もっと簡単に
namespace :shipit do task :twitter do end task :twitter_prepare do end end
みたいにして、命名規則で依存関係を自動でつくる、みたいなののほうがいいかなぁ……
あーだめだ。これだと引数をわたしにくい……
コピペビリティ重要 (処理がまとまっている)