e4099b72df2a7c4f2f5c6f85e7b2866d9ab628f3
[zbatery.git] / Rakefile
blobe4099b72df2a7c4f2f5c6f85e7b2866d9ab628f3
1 # -*- encoding: binary -*-
2 autoload :Gem, 'rubygems'
4 cgit_url = "http://bogomips.org/zbatery.git"
5 git_url = 'git://bogomips.org/zbatery.git'
7 desc "read news article from STDIN and post to rubyforge"
8 task :publish_news do
9   require 'rubyforge'
10   spec = Gem::Specification.load('zbatery.gemspec')
11   tmp = Tempfile.new('rf-news')
12   _, subject, body = `git cat-file tag v#{spec.version}`.split(/\n\n/, 3)
13   tmp.puts subject
14   tmp.puts
15   tmp.puts spec.description.strip
16   tmp.puts ""
17   tmp.puts "* #{spec.homepage}"
18   tmp.puts "* #{spec.email}"
19   tmp.puts "* #{git_url}"
20   tmp.print "\nChanges:\n\n"
21   tmp.puts body
22   tmp.flush
23   system(ENV["VISUAL"], tmp.path) or abort "#{ENV["VISUAL"]} failed: #$?"
24   msg = File.readlines(tmp.path)
25   subject = msg.shift
26   blank = msg.shift
27   blank == "\n" or abort "no newline after subject!"
28   subject.strip!
29   body = msg.join("").strip!
31   rf = RubyForge.new.configure
32   rf.login
33   rf.post_news('rainbows', subject, body)
34 end
36 desc "post to RAA"
37 task :raa_update do
38   require 'net/http'
39   require 'net/netrc'
40   rc = Net::Netrc.locate('zbatery-raa') or abort "~/.netrc not found"
41   password = rc.password
43   s = Gem::Specification.load('zbatery.gemspec')
44   desc = [ s.description.strip ]
45   desc << ""
46   desc << "* #{s.email}"
47   desc << "* #{git_url}"
48   desc << "* #{cgit_url}"
49   desc = desc.join("\n")
50   uri = URI.parse('http://raa.ruby-lang.org/regist.rhtml')
51   form = {
52     :name => s.name,
53     :short_description => s.summary,
54     :version => s.version.to_s,
55     :status => 'experimental',
56     :owner => s.authors.first,
57     :email => s.email,
58     :category_major => 'Library',
59     :category_minor => 'Web',
60     :url => s.homepage,
61     :download => "http://rubyforge.org/frs/?group_id=8977",
62     :license => "Ruby's",
63     :description_style => 'Plain',
64     :description => desc,
65     :pass => password,
66     :submit => "Update",
67   }
68   res = Net::HTTP.post_form(uri, form)
69   p res
70   puts res.body
71 end
73 desc "post to FM"
74 task :fm_update do
75   require 'tempfile'
76   require 'net/http'
77   require 'net/netrc'
78   require 'json'
79   version = ENV['VERSION'] or abort "VERSION= needed"
80   uri = URI.parse('http://freshmeat.net/projects/zbatery/releases.json')
81   rc = Net::Netrc.locate('zbatery-fm') or abort "~/.netrc not found"
82   api_token = rc.password
83   _, subject, body = `git cat-file tag v#{version}`.split(/\n\n/, 3)
84   tmp = Tempfile.new('fm-changelog')
85   system(ENV["VISUAL"], tmp.path) or abort "#{ENV["VISUAL"]} failed: #$?"
86   changelog = File.read(tmp.path).strip
88   req = {
89     "auth_code" => api_token,
90     "release" => {
91       "tag_list" => "Stable",
92       "version" => version,
93       "changelog" => changelog,
94     },
95   }.to_json
96   Net::HTTP.start(uri.host, uri.port) do |http|
97     p http.post(uri.path, req, {'Content-Type'=>'application/json'})
98   end
99 end