Permalink
Fetching contributors…
Cannot retrieve contributors at this time
83 lines (70 sloc) 2.56 KB
begin
gem 'rubyforge', '~> 1.0.1'
require 'rubyforge'
rescue Exception
nil
end
CLEAN.include('email.txt')
if defined?(RubyForge) then
if defined?(GEM_SPEC) then
desc 'Create news email file and post to RubyForge.'
task :announce do |t|
ver = ENV['VERSION'] or fail "Must supply VERSION (rake announce VERSION=x.y.z)."
# compare versions to avoid mistakes
unless ver == GEM_SPEC.version.to_s then
fail "Version mismatch (supplied and specification versions differ)."
end
# no homepage? why announce it then?!
if GEM_SPEC.homepage == 'TODO' or GEM_SPEC.homepage.nil? then
fail "Must define homepage in your gem specification."
end
# no rubyforge project? no release for you!
if GEM_SPEC.rubyforge_project == 'TODO' or GEM_SPEC.rubyforge_project.nil? then
fail "Must define rubyforge_project in your gem specification."
end
# instantiate a RubyForge object
rf = RubyForge.new.configure
# read project info and overview
notes = begin
r = File.read("README.rdoc")
r.split(/^(=+ .*)/)[1..4].join.strip
rescue
warn "Missing README.rdoc"
''
end
# read changes
changes = begin
h = File.read("History.txt")
h.split(/^(===+ .*)/)[1..2].join.strip
rescue
warn "Missing History.txt"
''
end
# standard fields
subject = "#{GEM_SPEC.name} #{GEM_SPEC.version} Released"
title = "#{GEM_SPEC.name} version #{GEM_SPEC.version} has been released!"
body = "#{notes}\n\nChanges:\n\n#{changes}"
urls = [GEM_SPEC.homepage, "http://rubyforge.org/projects/#{GEM_SPEC.rubyforge_project}"].map { |u| "* <#{u.strip}>" }.join("\n")
puts "Logging in RubyForge..."
rf.login
puts "Generating email.txt..."
File.open("email.txt", "w") do |mail|
mail.puts "Subject: [ANN] #{subject}"
mail.puts
mail.puts title
mail.puts
mail.puts urls
mail.puts
mail.puts body
end
puts "Created email.txt"
puts "Posting news for #{GEM_SPEC.name} version #{GEM_SPEC.version}..."
rf.post_news GEM_SPEC.rubyforge_project, subject, "#{title}\n\n#{body}"
puts "Done."
end
else
warn "no GEM_SPEC is found or defined. 'announce' task cannot work without it."
end
else
warn "rubyforge gem is required to generate announces, please install it (gem install rubyforge)."
end