0
@@ -8,10 +8,12 @@ require 'rake/gempackagetask'
0
require 'rake/testtask'
0
require 'rake/contrib/rubyforgepublisher'
0
-PKG_NAME = 'acts_as_versioned'
0
-PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
0
-PROD_HOST = "technoweenie@bidwell.textdrive.com"
0
+PKG_NAME = 'acts_as_versioned'
0
+PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
0
+PROD_HOST = "technoweenie@bidwell.textdrive.com"
0
+RUBY_FORGE_PROJECT = 'ar-versioned'
0
+RUBY_FORGE_USER = 'technoweenie'
0
for adapter in %w( mysql postgresql sqlite sqlite3 sqlserver sqlserver_odbc db2 oci )
0
Rake::TestTask.new("test_#{adapter}") do |t|
0
desc "Publish the API documentation"
0
task :pdoc => [:rdoc] do
0
Rake::SshDirPublisher.new(PROD_HOST, "public_html/code/doc/#{PKG_NAME}", "doc").upload
0
+ Rake::RubyForgePublisher.new(RUBY_FORGE_PROJECT, RUBY_FORGE_USER).upload
0
desc 'Publish the gem and API docs'
0
-task :publish => [:pgem, :pdoc]
0
\ No newline at end of file
0
+task :publish => [:pgem, :pdoc, :rubyforge_upload]
0
+desc "Publish the release files to RubyForge."
0
+task :rubyforge_upload do
0
+ files = %w(gem tgz).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
0
+ if RUBY_FORGE_PROJECT then
0
+ project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
0
+ project_data = open(project_uri) { |data| data.read }
0
+ group_id = project_data[/[?&]group_id=(\d+)/, 1]
0
+ raise "Couldn't get group id" unless group_id
0
+ # This echos password to shell which is a bit sucky
0
+ if ENV["RUBY_FORGE_PASSWORD"]
0
+ password = ENV["RUBY_FORGE_PASSWORD"]
0
+ print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
0
+ password = STDIN.gets.chomp
0
+ login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
0
+ "form_loginname=#{RUBY_FORGE_USER}",
0
+ http.post("/account/login.php", data)
0
+ cookie = login_response["set-cookie"]
0
+ raise "Login failed" unless cookie
0
+ headers = { "Cookie" => cookie }
0
+ release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
0
+ release_data = open(release_uri, headers) { |data| data.read }
0
+ package_id = release_data[/[?&]package_id=(\d+)/, 1]
0
+ raise "Couldn't get package id" unless package_id
0
+ files.each do |filename|
0
+ basename = File.basename(filename)
0
+ file_ext = File.extname(filename)
0
+ file_data = File.open(filename, "rb") { |file| file.read }
0
+ puts "Releasing #{basename}..."
0
+ release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
0
+ release_date = Time.now.strftime("%Y-%m-%d %H:%M")
0
+ }; type_map.default = "9999"
0
+ type = type_map[file_ext]
0
+ boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
0
+ query_hash = if first_file then
0
+ "group_id" => group_id,
0
+ "package_id" => package_id,
0
+ "release_name" => PKG_FILE_NAME,
0
+ "release_date" => release_date,
0
+ "processor_id" => "8000", # Any
0
+ "release_notes" => "",
0
+ "release_changes" => "",
0
+ "preformatted" => "1",
0
+ "group_id" => group_id,
0
+ "release_id" => release_id,
0
+ "package_id" => package_id,
0
+ "processor_id" => "8000", # Any
0
+ "submit" => "Add This File"
0
+ query = "?" + query_hash.map do |(name, value)|
0
+ [name, URI.encode(value)].join("=")
0
+ "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
0
+ "Content-Type: application/octet-stream",
0
+ "Content-Transfer-Encoding: binary",
0
+ release_headers = headers.merge(
0
+ "Content-Type" => "multipart/form-data; boundary=#{boundary}"
0
+ target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
0
+ http.post(target + query, data, release_headers)
0
+ release_id = release_response.body[/release_id=(\d+)/, 1]
0
+ raise("Couldn't get release id") unless release_id
0
\ No newline at end of file
Comments
No one has commented yet.