mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Made ready for better release automation
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1021 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
5cd38ca25d
commit
065cb2a08d
8 changed files with 754 additions and 104 deletions
|
@ -11,11 +11,15 @@ PKG_NAME = 'actionmailer'
|
||||||
PKG_VERSION = '0.8.0' + PKG_BUILD
|
PKG_VERSION = '0.8.0' + PKG_BUILD
|
||||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||||
|
|
||||||
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||||
|
|
||||||
|
RUBY_FORGE_PROJECT = "actionmailer"
|
||||||
|
RUBY_FORGE_USER = "webster132"
|
||||||
|
|
||||||
desc "Default Task"
|
desc "Default Task"
|
||||||
task :default => [ :test ]
|
task :default => [ :test ]
|
||||||
|
|
||||||
# Run the unit tests
|
# Run the unit tests
|
||||||
|
|
||||||
Rake::TestTask.new { |t|
|
Rake::TestTask.new { |t|
|
||||||
t.libs << "test"
|
t.libs << "test"
|
||||||
t.pattern = 'test/*_test.rb'
|
t.pattern = 'test/*_test.rb'
|
||||||
|
@ -24,7 +28,6 @@ Rake::TestTask.new { |t|
|
||||||
|
|
||||||
|
|
||||||
# Genereate the RDoc documentation
|
# Genereate the RDoc documentation
|
||||||
|
|
||||||
Rake::RDocTask.new { |rdoc|
|
Rake::RDocTask.new { |rdoc|
|
||||||
rdoc.rdoc_dir = 'doc'
|
rdoc.rdoc_dir = 'doc'
|
||||||
rdoc.title = "Action Mailer -- Easy email delivery and testing"
|
rdoc.title = "Action Mailer -- Easy email delivery and testing"
|
||||||
|
@ -36,8 +39,6 @@ Rake::RDocTask.new { |rdoc|
|
||||||
|
|
||||||
|
|
||||||
# Create compressed packages
|
# Create compressed packages
|
||||||
|
|
||||||
|
|
||||||
spec = Gem::Specification.new do |s|
|
spec = Gem::Specification.new do |s|
|
||||||
s.platform = Gem::Platform::RUBY
|
s.platform = Gem::Platform::RUBY
|
||||||
s.name = PKG_NAME
|
s.name = PKG_NAME
|
||||||
|
@ -69,39 +70,127 @@ Rake::GemPackageTask.new(spec) do |p|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# Publish beta gem
|
|
||||||
desc "Publish the API documentation"
|
desc "Publish the API documentation"
|
||||||
task :pgem => [:package] do
|
task :pgem => [:package] do
|
||||||
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
||||||
end
|
end
|
||||||
|
|
||||||
# Publish documentation
|
|
||||||
desc "Publish the API documentation"
|
desc "Publish the API documentation"
|
||||||
task :pdoc => [:rdoc] do
|
task :pdoc => [:rdoc] do
|
||||||
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/am", "doc").upload
|
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/am", "doc").upload
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Publish to RubyForge"
|
desc "Publish the release files to RubyForge."
|
||||||
task :rubyforge do
|
task :release => [:package] do
|
||||||
Rake::RubyForgePublisher.new('actionmailer', 'webster132').upload
|
files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
|
||||||
end
|
|
||||||
|
|
||||||
|
if RUBY_FORGE_PROJECT then
|
||||||
|
require 'net/http'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
desc "Count lines in the main rake file"
|
project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
|
||||||
task :lines do
|
project_data = open(project_uri) { |data| data.read }
|
||||||
lines = 0
|
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
||||||
codelines = 0
|
raise "Couldn't get group id" unless group_id
|
||||||
Dir.foreach("lib/action_mailer") { |file_name|
|
|
||||||
next unless file_name =~ /.*rb/
|
|
||||||
|
|
||||||
f = File.open("lib/action_mailer/" + file_name)
|
# This echos password to shell which is a bit sucky
|
||||||
|
if ENV["RUBY_FORGE_PASSWORD"]
|
||||||
while line = f.gets
|
password = ENV["RUBY_FORGE_PASSWORD"]
|
||||||
lines += 1
|
else
|
||||||
next if line =~ /^\s*$/
|
print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
|
||||||
next if line =~ /^\s*#/
|
password = STDIN.gets.chomp
|
||||||
codelines += 1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
data = [
|
||||||
|
"login=1",
|
||||||
|
"form_loginname=#{RUBY_FORGE_USER}",
|
||||||
|
"form_pw=#{password}"
|
||||||
|
].join("&")
|
||||||
|
http.post("/account/login.php", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
cookie = login_response["set-cookie"]
|
||||||
|
raise "Login failed" unless cookie
|
||||||
|
headers = { "Cookie" => cookie }
|
||||||
|
|
||||||
|
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
||||||
|
release_data = open(release_uri, headers) { |data| data.read }
|
||||||
|
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get package id" unless package_id
|
||||||
|
|
||||||
|
first_file = true
|
||||||
|
release_id = ""
|
||||||
|
|
||||||
|
files.each do |filename|
|
||||||
|
basename = File.basename(filename)
|
||||||
|
file_ext = File.extname(filename)
|
||||||
|
file_data = File.open(filename, "rb") { |file| file.read }
|
||||||
|
|
||||||
|
puts "Releasing #{basename}..."
|
||||||
|
|
||||||
|
release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
release_date = Time.now.strftime("%Y-%m-%d %H:%M")
|
||||||
|
type_map = {
|
||||||
|
".zip" => "3000",
|
||||||
|
".tgz" => "3110",
|
||||||
|
".gz" => "3110",
|
||||||
|
".gem" => "1400"
|
||||||
|
}; type_map.default = "9999"
|
||||||
|
type = type_map[file_ext]
|
||||||
|
boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
|
||||||
|
|
||||||
|
query_hash = if first_file then
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"release_name" => RELEASE_NAME,
|
||||||
|
"release_date" => release_date,
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"release_notes" => "",
|
||||||
|
"release_changes" => "",
|
||||||
|
"preformatted" => "1",
|
||||||
|
"submit" => "1"
|
||||||
}
|
}
|
||||||
puts "Lines #{lines}, LOC #{codelines}"
|
else
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"release_id" => release_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"step2" => "1",
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"submit" => "Add This File"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
query = "?" + query_hash.map do |(name, value)|
|
||||||
|
[name, URI.encode(value)].join("=")
|
||||||
|
end.join("&")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
"--" + boundary,
|
||||||
|
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
||||||
|
"Content-Type: application/octet-stream",
|
||||||
|
"Content-Transfer-Encoding: binary",
|
||||||
|
"", file_data, ""
|
||||||
|
].join("\x0D\x0A")
|
||||||
|
|
||||||
|
release_headers = headers.merge(
|
||||||
|
"Content-Type" => "multipart/form-data; boundary=#{boundary}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
|
||||||
|
http.post(target + query, data, release_headers)
|
||||||
|
end
|
||||||
|
|
||||||
|
if first_file then
|
||||||
|
release_id = release_response.body[/release_id=(\d+)/, 1]
|
||||||
|
raise("Couldn't get release id") unless release_id
|
||||||
|
end
|
||||||
|
|
||||||
|
first_file = false
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -11,6 +11,11 @@ PKG_NAME = 'actionpack'
|
||||||
PKG_VERSION = '1.6.0' + PKG_BUILD
|
PKG_VERSION = '1.6.0' + PKG_BUILD
|
||||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||||
|
|
||||||
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||||
|
|
||||||
|
RUBY_FORGE_PROJECT = "actionpack"
|
||||||
|
RUBY_FORGE_USER = "webster132"
|
||||||
|
|
||||||
desc "Default Task"
|
desc "Default Task"
|
||||||
task :default => [ :test ]
|
task :default => [ :test ]
|
||||||
|
|
||||||
|
@ -38,8 +43,6 @@ Rake::RDocTask.new { |rdoc|
|
||||||
|
|
||||||
|
|
||||||
# Create compressed packages
|
# Create compressed packages
|
||||||
|
|
||||||
|
|
||||||
dist_dirs = [ "lib", "test", "examples" ]
|
dist_dirs = [ "lib", "test", "examples" ]
|
||||||
|
|
||||||
spec = Gem::Specification.new do |s|
|
spec = Gem::Specification.new do |s|
|
||||||
|
@ -77,35 +80,130 @@ Rake::GemPackageTask.new(spec) do |p|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# Publish beta gem
|
# Publishing ------------------------------------------------------
|
||||||
|
|
||||||
desc "Publish the API documentation"
|
desc "Publish the API documentation"
|
||||||
task :pgem => [:package] do
|
task :pgem => [:package] do
|
||||||
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
||||||
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
||||||
end
|
end
|
||||||
|
|
||||||
# Publish documentation
|
|
||||||
desc "Publish the API documentation"
|
desc "Publish the API documentation"
|
||||||
task :pdoc => [:rdoc] do
|
task :pdoc => [:rdoc] do
|
||||||
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/ap", "doc").upload
|
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/ap", "doc").upload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Publish the release files to RubyForge."
|
||||||
|
task :release => [:package] do
|
||||||
|
files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
|
||||||
|
|
||||||
desc "Count lines in the main rake file"
|
if RUBY_FORGE_PROJECT then
|
||||||
task :lines do
|
require 'net/http'
|
||||||
lines = 0
|
require 'open-uri'
|
||||||
codelines = 0
|
|
||||||
Dir.foreach("lib/action_controller") { |file_name|
|
|
||||||
next unless file_name =~ /.*rb/
|
|
||||||
|
|
||||||
f = File.open("lib/action_controller/" + file_name)
|
project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
|
||||||
|
project_data = open(project_uri) { |data| data.read }
|
||||||
|
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get group id" unless group_id
|
||||||
|
|
||||||
while line = f.gets
|
# This echos password to shell which is a bit sucky
|
||||||
lines += 1
|
if ENV["RUBY_FORGE_PASSWORD"]
|
||||||
next if line =~ /^\s*$/
|
password = ENV["RUBY_FORGE_PASSWORD"]
|
||||||
next if line =~ /^\s*#/
|
else
|
||||||
codelines += 1
|
print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
|
||||||
|
password = STDIN.gets.chomp
|
||||||
end
|
end
|
||||||
|
|
||||||
|
login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
data = [
|
||||||
|
"login=1",
|
||||||
|
"form_loginname=#{RUBY_FORGE_USER}",
|
||||||
|
"form_pw=#{password}"
|
||||||
|
].join("&")
|
||||||
|
http.post("/account/login.php", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
cookie = login_response["set-cookie"]
|
||||||
|
raise "Login failed" unless cookie
|
||||||
|
headers = { "Cookie" => cookie }
|
||||||
|
|
||||||
|
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
||||||
|
release_data = open(release_uri, headers) { |data| data.read }
|
||||||
|
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get package id" unless package_id
|
||||||
|
|
||||||
|
first_file = true
|
||||||
|
release_id = ""
|
||||||
|
|
||||||
|
files.each do |filename|
|
||||||
|
basename = File.basename(filename)
|
||||||
|
file_ext = File.extname(filename)
|
||||||
|
file_data = File.open(filename, "rb") { |file| file.read }
|
||||||
|
|
||||||
|
puts "Releasing #{basename}..."
|
||||||
|
|
||||||
|
release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
release_date = Time.now.strftime("%Y-%m-%d %H:%M")
|
||||||
|
type_map = {
|
||||||
|
".zip" => "3000",
|
||||||
|
".tgz" => "3110",
|
||||||
|
".gz" => "3110",
|
||||||
|
".gem" => "1400"
|
||||||
|
}; type_map.default = "9999"
|
||||||
|
type = type_map[file_ext]
|
||||||
|
boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
|
||||||
|
|
||||||
|
query_hash = if first_file then
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"release_name" => RELEASE_NAME,
|
||||||
|
"release_date" => release_date,
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"release_notes" => "",
|
||||||
|
"release_changes" => "",
|
||||||
|
"preformatted" => "1",
|
||||||
|
"submit" => "1"
|
||||||
}
|
}
|
||||||
puts "Lines #{lines}, LOC #{codelines}"
|
else
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"release_id" => release_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"step2" => "1",
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"submit" => "Add This File"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
query = "?" + query_hash.map do |(name, value)|
|
||||||
|
[name, URI.encode(value)].join("=")
|
||||||
|
end.join("&")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
"--" + boundary,
|
||||||
|
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
||||||
|
"Content-Type: application/octet-stream",
|
||||||
|
"Content-Transfer-Encoding: binary",
|
||||||
|
"", file_data, ""
|
||||||
|
].join("\x0D\x0A")
|
||||||
|
|
||||||
|
release_headers = headers.merge(
|
||||||
|
"Content-Type" => "multipart/form-data; boundary=#{boundary}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
|
||||||
|
http.post(target + query, data, release_headers)
|
||||||
|
end
|
||||||
|
|
||||||
|
if first_file then
|
||||||
|
release_id = release_response.body[/release_id=(\d+)/, 1]
|
||||||
|
raise("Couldn't get release id") unless release_id
|
||||||
|
end
|
||||||
|
|
||||||
|
first_file = false
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -13,6 +13,11 @@ PKG_VERSION = '0.6.1' + PKG_BUILD
|
||||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||||
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
|
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
|
||||||
|
|
||||||
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||||
|
|
||||||
|
RUBY_FORGE_PROJECT = "aws"
|
||||||
|
RUBY_FORGE_USER = "webster132"
|
||||||
|
|
||||||
desc "Default Task"
|
desc "Default Task"
|
||||||
task :default => [ :test ]
|
task :default => [ :test ]
|
||||||
|
|
||||||
|
@ -144,3 +149,118 @@ task :lines do
|
||||||
puts "Total:"
|
puts "Total:"
|
||||||
puts " Lines #{total_lines}, LOC #{total_loc}"
|
puts " Lines #{total_lines}, LOC #{total_loc}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Publish the release files to RubyForge."
|
||||||
|
task :release => [:package] do
|
||||||
|
files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
|
||||||
|
|
||||||
|
if RUBY_FORGE_PROJECT then
|
||||||
|
require 'net/http'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
|
||||||
|
project_data = open(project_uri) { |data| data.read }
|
||||||
|
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get group id" unless group_id
|
||||||
|
|
||||||
|
# This echos password to shell which is a bit sucky
|
||||||
|
if ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
password = ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
else
|
||||||
|
print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
|
||||||
|
password = STDIN.gets.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
data = [
|
||||||
|
"login=1",
|
||||||
|
"form_loginname=#{RUBY_FORGE_USER}",
|
||||||
|
"form_pw=#{password}"
|
||||||
|
].join("&")
|
||||||
|
http.post("/account/login.php", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
cookie = login_response["set-cookie"]
|
||||||
|
raise "Login failed" unless cookie
|
||||||
|
headers = { "Cookie" => cookie }
|
||||||
|
|
||||||
|
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
||||||
|
release_data = open(release_uri, headers) { |data| data.read }
|
||||||
|
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get package id" unless package_id
|
||||||
|
|
||||||
|
first_file = true
|
||||||
|
release_id = ""
|
||||||
|
|
||||||
|
files.each do |filename|
|
||||||
|
basename = File.basename(filename)
|
||||||
|
file_ext = File.extname(filename)
|
||||||
|
file_data = File.open(filename, "rb") { |file| file.read }
|
||||||
|
|
||||||
|
puts "Releasing #{basename}..."
|
||||||
|
|
||||||
|
release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
release_date = Time.now.strftime("%Y-%m-%d %H:%M")
|
||||||
|
type_map = {
|
||||||
|
".zip" => "3000",
|
||||||
|
".tgz" => "3110",
|
||||||
|
".gz" => "3110",
|
||||||
|
".gem" => "1400"
|
||||||
|
}; type_map.default = "9999"
|
||||||
|
type = type_map[file_ext]
|
||||||
|
boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
|
||||||
|
|
||||||
|
query_hash = if first_file then
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"release_name" => RELEASE_NAME,
|
||||||
|
"release_date" => release_date,
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"release_notes" => "",
|
||||||
|
"release_changes" => "",
|
||||||
|
"preformatted" => "1",
|
||||||
|
"submit" => "1"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"release_id" => release_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"step2" => "1",
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"submit" => "Add This File"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
query = "?" + query_hash.map do |(name, value)|
|
||||||
|
[name, URI.encode(value)].join("=")
|
||||||
|
end.join("&")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
"--" + boundary,
|
||||||
|
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
||||||
|
"Content-Type: application/octet-stream",
|
||||||
|
"Content-Transfer-Encoding: binary",
|
||||||
|
"", file_data, ""
|
||||||
|
].join("\x0D\x0A")
|
||||||
|
|
||||||
|
release_headers = headers.merge(
|
||||||
|
"Content-Type" => "multipart/form-data; boundary=#{boundary}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
|
||||||
|
http.post(target + query, data, release_headers)
|
||||||
|
end
|
||||||
|
|
||||||
|
if first_file then
|
||||||
|
release_id = release_response.body[/release_id=(\d+)/, 1]
|
||||||
|
raise("Couldn't get release id") unless release_id
|
||||||
|
end
|
||||||
|
|
||||||
|
first_file = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,6 +11,11 @@ PKG_NAME = 'activerecord'
|
||||||
PKG_VERSION = '1.9.0' + PKG_BUILD
|
PKG_VERSION = '1.9.0' + PKG_BUILD
|
||||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||||
|
|
||||||
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||||
|
|
||||||
|
RUBY_FORGE_PROJECT = "activerecord"
|
||||||
|
RUBY_FORGE_USER = "webster132"
|
||||||
|
|
||||||
PKG_FILES = FileList[
|
PKG_FILES = FileList[
|
||||||
"lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "rakefile"
|
"lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "rakefile"
|
||||||
].exclude(/\bCVS\b|~$/)
|
].exclude(/\bCVS\b|~$/)
|
||||||
|
@ -88,20 +93,6 @@ Rake::RDocTask.new { |rdoc|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Publish beta gem
|
|
||||||
desc "Publish the beta gem"
|
|
||||||
task :pgem => [:package] do
|
|
||||||
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
|
||||||
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
|
||||||
end
|
|
||||||
|
|
||||||
# Publish documentation
|
|
||||||
desc "Publish the API documentation"
|
|
||||||
task :pdoc => [:rdoc] do
|
|
||||||
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/ar", "doc").upload
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# Create compressed packages
|
# Create compressed packages
|
||||||
|
|
||||||
dist_dirs = [ "lib", "test", "examples", "dev-utils" ]
|
dist_dirs = [ "lib", "test", "examples", "dev-utils" ]
|
||||||
|
@ -143,20 +134,130 @@ Rake::GemPackageTask.new(spec) do |p|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
task :lines do
|
# Publishing ------------------------------------------------------
|
||||||
lines = 0
|
|
||||||
codelines = 0
|
|
||||||
Dir.foreach("lib/active_record") { |file_name|
|
|
||||||
next unless file_name =~ /.*rb/
|
|
||||||
|
|
||||||
f = File.open("lib/active_record/" + file_name)
|
desc "Publish the beta gem"
|
||||||
|
task :pgem => [:package] do
|
||||||
while line = f.gets
|
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
||||||
lines += 1
|
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
||||||
next if line =~ /^\s*$/
|
end
|
||||||
next if line =~ /^\s*#/
|
|
||||||
codelines += 1
|
desc "Publish the API documentation"
|
||||||
end
|
task :pdoc => [:rdoc] do
|
||||||
}
|
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/ar", "doc").upload
|
||||||
puts "Lines #{lines}, LOC #{codelines}"
|
end
|
||||||
|
|
||||||
|
desc "Publish the release files to RubyForge."
|
||||||
|
task :release => [:package] do
|
||||||
|
files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
|
||||||
|
|
||||||
|
if RUBY_FORGE_PROJECT then
|
||||||
|
require 'net/http'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
|
||||||
|
project_data = open(project_uri) { |data| data.read }
|
||||||
|
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get group id" unless group_id
|
||||||
|
|
||||||
|
# This echos password to shell which is a bit sucky
|
||||||
|
if ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
password = ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
else
|
||||||
|
print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
|
||||||
|
password = STDIN.gets.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
data = [
|
||||||
|
"login=1",
|
||||||
|
"form_loginname=#{RUBY_FORGE_USER}",
|
||||||
|
"form_pw=#{password}"
|
||||||
|
].join("&")
|
||||||
|
http.post("/account/login.php", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
cookie = login_response["set-cookie"]
|
||||||
|
raise "Login failed" unless cookie
|
||||||
|
headers = { "Cookie" => cookie }
|
||||||
|
|
||||||
|
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
||||||
|
release_data = open(release_uri, headers) { |data| data.read }
|
||||||
|
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get package id" unless package_id
|
||||||
|
|
||||||
|
first_file = true
|
||||||
|
release_id = ""
|
||||||
|
|
||||||
|
files.each do |filename|
|
||||||
|
basename = File.basename(filename)
|
||||||
|
file_ext = File.extname(filename)
|
||||||
|
file_data = File.open(filename, "rb") { |file| file.read }
|
||||||
|
|
||||||
|
puts "Releasing #{basename}..."
|
||||||
|
|
||||||
|
release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
release_date = Time.now.strftime("%Y-%m-%d %H:%M")
|
||||||
|
type_map = {
|
||||||
|
".zip" => "3000",
|
||||||
|
".tgz" => "3110",
|
||||||
|
".gz" => "3110",
|
||||||
|
".gem" => "1400"
|
||||||
|
}; type_map.default = "9999"
|
||||||
|
type = type_map[file_ext]
|
||||||
|
boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
|
||||||
|
|
||||||
|
query_hash = if first_file then
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"release_name" => RELEASE_NAME,
|
||||||
|
"release_date" => release_date,
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"release_notes" => "",
|
||||||
|
"release_changes" => "",
|
||||||
|
"preformatted" => "1",
|
||||||
|
"submit" => "1"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"release_id" => release_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"step2" => "1",
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"submit" => "Add This File"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
query = "?" + query_hash.map do |(name, value)|
|
||||||
|
[name, URI.encode(value)].join("=")
|
||||||
|
end.join("&")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
"--" + boundary,
|
||||||
|
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
||||||
|
"Content-Type: application/octet-stream",
|
||||||
|
"Content-Transfer-Encoding: binary",
|
||||||
|
"", file_data, ""
|
||||||
|
].join("\x0D\x0A")
|
||||||
|
|
||||||
|
release_headers = headers.merge(
|
||||||
|
"Content-Type" => "multipart/form-data; boundary=#{boundary}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
|
||||||
|
http.post(target + query, data, release_headers)
|
||||||
|
end
|
||||||
|
|
||||||
|
if first_file then
|
||||||
|
release_id = release_response.body[/release_id=(\d+)/, 1]
|
||||||
|
raise("Couldn't get release id") unless release_id
|
||||||
|
end
|
||||||
|
|
||||||
|
first_file = false
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -8,6 +8,11 @@ PKG_NAME = 'activesupport'
|
||||||
PKG_VERSION = '1.0.2' + PKG_BUILD
|
PKG_VERSION = '1.0.2' + PKG_BUILD
|
||||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||||
|
|
||||||
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||||
|
|
||||||
|
RUBY_FORGE_PROJECT = "activesupport"
|
||||||
|
RUBY_FORGE_USER = "webster132"
|
||||||
|
|
||||||
task :default => :test
|
task :default => :test
|
||||||
Rake::TestTask.new { |t|
|
Rake::TestTask.new { |t|
|
||||||
t.pattern = 'test/**/*_test.rb'
|
t.pattern = 'test/**/*_test.rb'
|
||||||
|
@ -50,15 +55,128 @@ Rake::GemPackageTask.new(spec) do |p|
|
||||||
p.need_zip = true
|
p.need_zip = true
|
||||||
end
|
end
|
||||||
|
|
||||||
# Publish beta gem
|
|
||||||
desc "Publish the beta gem"
|
desc "Publish the beta gem"
|
||||||
task :pgem => [:package] do
|
task :pgem => [:package] do
|
||||||
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
||||||
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
||||||
end
|
end
|
||||||
|
|
||||||
# Publish documentation
|
|
||||||
desc "Publish the API documentation"
|
desc "Publish the API documentation"
|
||||||
task :pdoc => [:rdoc] do
|
task :pdoc => [:rdoc] do
|
||||||
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/as", "doc").upload
|
Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/as", "doc").upload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Publish the release files to RubyForge."
|
||||||
|
task :release => [:package] do
|
||||||
|
files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
|
||||||
|
|
||||||
|
if RUBY_FORGE_PROJECT then
|
||||||
|
require 'net/http'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
|
||||||
|
project_data = open(project_uri) { |data| data.read }
|
||||||
|
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get group id" unless group_id
|
||||||
|
|
||||||
|
# This echos password to shell which is a bit sucky
|
||||||
|
if ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
password = ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
else
|
||||||
|
print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
|
||||||
|
password = STDIN.gets.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
data = [
|
||||||
|
"login=1",
|
||||||
|
"form_loginname=#{RUBY_FORGE_USER}",
|
||||||
|
"form_pw=#{password}"
|
||||||
|
].join("&")
|
||||||
|
http.post("/account/login.php", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
cookie = login_response["set-cookie"]
|
||||||
|
raise "Login failed" unless cookie
|
||||||
|
headers = { "Cookie" => cookie }
|
||||||
|
|
||||||
|
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
||||||
|
release_data = open(release_uri, headers) { |data| data.read }
|
||||||
|
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get package id" unless package_id
|
||||||
|
|
||||||
|
first_file = true
|
||||||
|
release_id = ""
|
||||||
|
|
||||||
|
files.each do |filename|
|
||||||
|
basename = File.basename(filename)
|
||||||
|
file_ext = File.extname(filename)
|
||||||
|
file_data = File.open(filename, "rb") { |file| file.read }
|
||||||
|
|
||||||
|
puts "Releasing #{basename}..."
|
||||||
|
|
||||||
|
release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
release_date = Time.now.strftime("%Y-%m-%d %H:%M")
|
||||||
|
type_map = {
|
||||||
|
".zip" => "3000",
|
||||||
|
".tgz" => "3110",
|
||||||
|
".gz" => "3110",
|
||||||
|
".gem" => "1400"
|
||||||
|
}; type_map.default = "9999"
|
||||||
|
type = type_map[file_ext]
|
||||||
|
boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
|
||||||
|
|
||||||
|
query_hash = if first_file then
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"release_name" => RELEASE_NAME,
|
||||||
|
"release_date" => release_date,
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"release_notes" => "",
|
||||||
|
"release_changes" => "",
|
||||||
|
"preformatted" => "1",
|
||||||
|
"submit" => "1"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"release_id" => release_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"step2" => "1",
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"submit" => "Add This File"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
query = "?" + query_hash.map do |(name, value)|
|
||||||
|
[name, URI.encode(value)].join("=")
|
||||||
|
end.join("&")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
"--" + boundary,
|
||||||
|
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
||||||
|
"Content-Type: application/octet-stream",
|
||||||
|
"Content-Transfer-Encoding: binary",
|
||||||
|
"", file_data, ""
|
||||||
|
].join("\x0D\x0A")
|
||||||
|
|
||||||
|
release_headers = headers.merge(
|
||||||
|
"Content-Type" => "multipart/form-data; boundary=#{boundary}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
|
||||||
|
http.post(target + query, data, release_headers)
|
||||||
|
end
|
||||||
|
|
||||||
|
if first_file then
|
||||||
|
release_id = release_response.body[/release_id=(\d+)/, 1]
|
||||||
|
raise("Couldn't get release id") unless release_id
|
||||||
|
end
|
||||||
|
|
||||||
|
first_file = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -67,19 +67,19 @@ goes through FCGI (or mod_ruby) that requires restart to show changes.
|
||||||
|
|
||||||
== Example for lighttpd conf (with FastCGI)
|
== Example for lighttpd conf (with FastCGI)
|
||||||
|
|
||||||
server.port = 8080
|
server.port = 8080
|
||||||
server.bind = "127.0.0.1"
|
server.bind = "127.0.0.1"
|
||||||
# server.event-handler = "freebsd-kqueue" # needed on OS X
|
# server.event-handler = "freebsd-kqueue" # needed on OS X
|
||||||
|
|
||||||
server.modules = ( "mod_rewrite", "mod_fastcgi" )
|
server.modules = ( "mod_rewrite", "mod_fastcgi" )
|
||||||
|
|
||||||
url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )
|
url.rewrite = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )
|
||||||
server.error-handler-404 = "/dispatch.fcgi"
|
server.error-handler-404 = "/dispatch.fcgi"
|
||||||
|
|
||||||
server.document-root = "/path/application/public"
|
server.document-root = "/path/application/public"
|
||||||
server.errorlog = "/path/application/log/server.log"
|
server.errorlog = "/path/application/log/server.log"
|
||||||
|
|
||||||
fastcgi.server = ( ".fcgi" =>
|
fastcgi.server = ( ".fcgi" =>
|
||||||
( "localhost" =>
|
( "localhost" =>
|
||||||
(
|
(
|
||||||
"min-procs" => 1,
|
"min-procs" => 1,
|
||||||
|
@ -89,7 +89,7 @@ fastcgi.server = ( ".fcgi" =>
|
||||||
"bin-environment" => ( "RAILS_ENV" => "development" )
|
"bin-environment" => ( "RAILS_ENV" => "development" )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
== Debugging Rails
|
== Debugging Rails
|
||||||
|
@ -139,7 +139,8 @@ Finally, when you're ready to resume execution, you press CTRL-D
|
||||||
You can interact with the domain model by starting the console through script/console.
|
You can interact with the domain model by starting the console through script/console.
|
||||||
Here you'll have all parts of the application configured, just like it is when the
|
Here you'll have all parts of the application configured, just like it is when the
|
||||||
application is running. You can inspect domain models, change values, and save to the
|
application is running. You can inspect domain models, change values, and save to the
|
||||||
database. Start the script without arguments to see the options.
|
database. Start the script without arguments will launch it in the development environment.
|
||||||
|
Passing an argument will specify a different environment, like <tt>console production</tt>.
|
||||||
|
|
||||||
|
|
||||||
== Description of contents
|
== Description of contents
|
||||||
|
|
|
@ -13,6 +13,11 @@ PKG_VERSION = '0.11.0' + PKG_BUILD
|
||||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||||
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
|
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
|
||||||
|
|
||||||
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||||
|
|
||||||
|
RUBY_FORGE_PROJECT = "rails"
|
||||||
|
RUBY_FORGE_USER = "webster132"
|
||||||
|
|
||||||
|
|
||||||
BASE_DIRS = %w( app config/environments components db doc log lib public script test vendor )
|
BASE_DIRS = %w( app config/environments components db doc log lib public script test vendor )
|
||||||
APP_DIRS = %w( apis models controllers helpers views views/layouts )
|
APP_DIRS = %w( apis models controllers helpers views views/layouts )
|
||||||
|
@ -233,7 +238,7 @@ spec = Gem::Specification.new do |s|
|
||||||
on top of either MySQL, PostgreSQL, or SQLite with eRuby-based templates.
|
on top of either MySQL, PostgreSQL, or SQLite with eRuby-based templates.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
s.add_dependency('rake', '>= 0.4.15')
|
s.add_dependency('rake', '>= 0.5.0')
|
||||||
s.add_dependency('activesupport', '= 1.0.2' + PKG_BUILD)
|
s.add_dependency('activesupport', '= 1.0.2' + PKG_BUILD)
|
||||||
s.add_dependency('activerecord', '= 1.9.0' + PKG_BUILD)
|
s.add_dependency('activerecord', '= 1.9.0' + PKG_BUILD)
|
||||||
s.add_dependency('actionpack', '= 1.6.0' + PKG_BUILD)
|
s.add_dependency('actionpack', '= 1.6.0' + PKG_BUILD)
|
||||||
|
@ -259,9 +264,125 @@ end
|
||||||
Rake::GemPackageTask.new(spec) do |pkg|
|
Rake::GemPackageTask.new(spec) do |pkg|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Publish beta gem
|
|
||||||
|
# Publishing -------------------------------------------------------
|
||||||
desc "Publish the API documentation"
|
desc "Publish the API documentation"
|
||||||
task :pgem => [:gem] do
|
task :pgem => [:gem] do
|
||||||
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
||||||
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
`ssh davidhh@comox.textdrive.com './gemupdate.sh'`
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Publish the release files to RubyForge."
|
||||||
|
task :release => [:package] do
|
||||||
|
files = ["gem"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
|
||||||
|
|
||||||
|
if RUBY_FORGE_PROJECT then
|
||||||
|
require 'net/http'
|
||||||
|
require 'open-uri'
|
||||||
|
|
||||||
|
project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
|
||||||
|
project_data = open(project_uri) { |data| data.read }
|
||||||
|
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get group id" unless group_id
|
||||||
|
|
||||||
|
# This echos password to shell which is a bit sucky
|
||||||
|
if ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
password = ENV["RUBY_FORGE_PASSWORD"]
|
||||||
|
else
|
||||||
|
print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
|
||||||
|
password = STDIN.gets.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
data = [
|
||||||
|
"login=1",
|
||||||
|
"form_loginname=#{RUBY_FORGE_USER}",
|
||||||
|
"form_pw=#{password}"
|
||||||
|
].join("&")
|
||||||
|
http.post("/account/login.php", data)
|
||||||
|
end
|
||||||
|
|
||||||
|
cookie = login_response["set-cookie"]
|
||||||
|
raise "Login failed" unless cookie
|
||||||
|
headers = { "Cookie" => cookie }
|
||||||
|
|
||||||
|
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
||||||
|
release_data = open(release_uri, headers) { |data| data.read }
|
||||||
|
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
||||||
|
raise "Couldn't get package id" unless package_id
|
||||||
|
|
||||||
|
first_file = true
|
||||||
|
release_id = ""
|
||||||
|
|
||||||
|
files.each do |filename|
|
||||||
|
basename = File.basename(filename)
|
||||||
|
file_ext = File.extname(filename)
|
||||||
|
file_data = File.open(filename, "rb") { |file| file.read }
|
||||||
|
|
||||||
|
puts "Releasing #{basename}..."
|
||||||
|
|
||||||
|
release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
|
||||||
|
release_date = Time.now.strftime("%Y-%m-%d %H:%M")
|
||||||
|
type_map = {
|
||||||
|
".zip" => "3000",
|
||||||
|
".tgz" => "3110",
|
||||||
|
".gz" => "3110",
|
||||||
|
".gem" => "1400"
|
||||||
|
}; type_map.default = "9999"
|
||||||
|
type = type_map[file_ext]
|
||||||
|
boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
|
||||||
|
|
||||||
|
query_hash = if first_file then
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"release_name" => RELEASE_NAME,
|
||||||
|
"release_date" => release_date,
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"release_notes" => "",
|
||||||
|
"release_changes" => "",
|
||||||
|
"preformatted" => "1",
|
||||||
|
"submit" => "1"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
"group_id" => group_id,
|
||||||
|
"release_id" => release_id,
|
||||||
|
"package_id" => package_id,
|
||||||
|
"step2" => "1",
|
||||||
|
"type_id" => type,
|
||||||
|
"processor_id" => "8000", # Any
|
||||||
|
"submit" => "Add This File"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
query = "?" + query_hash.map do |(name, value)|
|
||||||
|
[name, URI.encode(value)].join("=")
|
||||||
|
end.join("&")
|
||||||
|
|
||||||
|
data = [
|
||||||
|
"--" + boundary,
|
||||||
|
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
||||||
|
"Content-Type: application/octet-stream",
|
||||||
|
"Content-Transfer-Encoding: binary",
|
||||||
|
"", file_data, ""
|
||||||
|
].join("\x0D\x0A")
|
||||||
|
|
||||||
|
release_headers = headers.merge(
|
||||||
|
"Content-Type" => "multipart/form-data; boundary=#{boundary}"
|
||||||
|
)
|
||||||
|
|
||||||
|
target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
|
||||||
|
http.post(target + query, data, release_headers)
|
||||||
|
end
|
||||||
|
|
||||||
|
if first_file then
|
||||||
|
release_id = release_response.body[/release_id=(\d+)/, 1]
|
||||||
|
raise("Couldn't get release id") unless release_id
|
||||||
|
end
|
||||||
|
|
||||||
|
first_file = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -71,6 +71,7 @@ Rake::RDocTask.new("appdoc") { |rdoc|
|
||||||
desc "Generate documentation for the Rails framework"
|
desc "Generate documentation for the Rails framework"
|
||||||
Rake::RDocTask.new("apidoc") { |rdoc|
|
Rake::RDocTask.new("apidoc") { |rdoc|
|
||||||
rdoc.rdoc_dir = 'doc/api'
|
rdoc.rdoc_dir = 'doc/api'
|
||||||
|
rdoc.template = 'jamis.rb' if ENV['template'] == 'jamis'
|
||||||
rdoc.title = "Rails Framework Documentation"
|
rdoc.title = "Rails Framework Documentation"
|
||||||
rdoc.options << '--line-numbers --inline-source'
|
rdoc.options << '--line-numbers --inline-source'
|
||||||
rdoc.rdoc_files.include('README')
|
rdoc.rdoc_files.include('README')
|
||||||
|
@ -89,7 +90,7 @@ Rake::RDocTask.new("apidoc") { |rdoc|
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionmailer/CHANGELOG')
|
rdoc.rdoc_files.include('vendor/rails/actionmailer/CHANGELOG')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionmailer/lib/action_mailer/base.rb')
|
rdoc.rdoc_files.include('vendor/rails/actionmailer/lib/action_mailer/base.rb')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/README')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/README')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/ChangeLog')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/CHANGELOG')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service.rb')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service.rb')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/*.rb')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/*.rb')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/api/*.rb')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/api/*.rb')
|
||||||
|
@ -99,6 +100,7 @@ Rake::RDocTask.new("apidoc") { |rdoc|
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/protocol/*.rb')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/protocol/*.rb')
|
||||||
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/support/*.rb')
|
rdoc.rdoc_files.include('vendor/rails/actionwebservice/lib/action_web_service/support/*.rb')
|
||||||
rdoc.rdoc_files.include('vendor/rails/activesupport/README')
|
rdoc.rdoc_files.include('vendor/rails/activesupport/README')
|
||||||
|
rdoc.rdoc_files.include('vendor/rails/activesupport/CHANGELOG')
|
||||||
rdoc.rdoc_files.include('vendor/rails/activesupport/lib/active_support/**/*.rb')
|
rdoc.rdoc_files.include('vendor/rails/activesupport/lib/active_support/**/*.rb')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue