Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

root/tags/rel_0-14-2/activesupport/Rakefile

Revision 2763, 5.8 kB (checked in by david, 3 years ago)

Authentic 0.14.2 tag

Line 
1 require 'rake/testtask'
2 require 'rake/rdoctask'
3 require 'rake/gempackagetask'
4 require 'rake/contrib/rubyforgepublisher'
5 require File.join(File.dirname(__FILE__), 'lib', 'active_support', 'version')
6
7 PKG_BUILD     = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
8 PKG_NAME      = 'activesupport'
9 PKG_VERSION   = ActiveSupport::Version::STRING + PKG_BUILD
10 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
11
12 RELEASE_NAME  = "REL #{PKG_VERSION}"
13
14 RUBY_FORGE_PROJECT = "activesupport"
15 RUBY_FORGE_USER    = "webster132"
16
17 task :default => :test
18 Rake::TestTask.new { |t|
19   t.pattern = 'test/**/*_test.rb'
20 }
21
22 # Create compressed packages
23 dist_dirs = [ "lib", "test"]
24
25 # Genereate the RDoc documentation
26
27 Rake::RDocTask.new { |rdoc|
28   rdoc.rdoc_dir = 'doc'
29   rdoc.title    = "Active Support -- Utility classes and standard library extensions from Rails"
30   rdoc.options << '--line-numbers --inline-source --main README'
31   rdoc.template = "#{ENV['template']}.rb" if ENV['template']
32   rdoc.rdoc_files.include('README', 'CHANGELOG')
33   rdoc.rdoc_files.include('lib/active_support.rb')
34   rdoc.rdoc_files.include('lib/active_support/*.rb')
35   rdoc.rdoc_files.include('lib/active_support/**/*.rb')
36 }
37
38 spec = Gem::Specification.new do |s|
39   s.name = PKG_NAME
40   s.version = PKG_VERSION
41   s.summary = "Support and utility classes used by the Rails framework."
42   s.description = %q{Utility library which carries commonly used classes and goodies from the Rails framework}
43
44   s.files = [ "CHANGELOG" ] + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
45   s.require_path = 'lib'
46   s.has_rdoc = true
47
48   s.author = "David Heinemeier Hansson"
49   s.email = "david@loudthinking.com"
50   s.homepage = "http://www.rubyonrails.org"
51   s.rubyforge_project = "activesupport"
52 end
53
54 Rake::GemPackageTask.new(spec) do |p|
55   p.gem_spec = spec
56   p.need_tar = true
57   p.need_zip = true
58 end
59
60 desc "Publish the beta gem"
61 task :pgem => [:package] do
62   Rake::SshFilePublisher.new("davidhh@wrath.rubyonrails.org", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
63   `ssh davidhh@wrath.rubyonrails.org './gemupdate.sh'`
64 end
65
66 desc "Publish the API documentation"
67 task :pdoc => [:rdoc] do
68   Rake::SshDirPublisher.new("davidhh@wrath.rubyonrails.org", "public_html/as", "doc").upload
69 end
70
71 desc "Publish the release files to RubyForge."
72 task :release => [:package] do
73   files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
74
75   if RUBY_FORGE_PROJECT then
76     require 'net/http'
77     require 'open-uri'
78
79     project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
80     project_data = open(project_uri) { |data| data.read }
81     group_id = project_data[/[?&]group_id=(\d+)/, 1]
82     raise "Couldn't get group id" unless group_id
83
84     # This echos password to shell which is a bit sucky
85     if ENV["RUBY_FORGE_PASSWORD"]
86       password = ENV["RUBY_FORGE_PASSWORD"]
87     else
88       print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
89       password = STDIN.gets.chomp
90     end
91
92     login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
93       data = [
94         "login=1",
95         "form_loginname=#{RUBY_FORGE_USER}",
96         "form_pw=#{password}"
97       ].join("&")
98       http.post("/account/login.php", data)
99     end
100
101     cookie = login_response["set-cookie"]
102     raise "Login failed" unless cookie
103     headers = { "Cookie" => cookie }
104
105     release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
106     release_data = open(release_uri, headers) { |data| data.read }
107     package_id = release_data[/[?&]package_id=(\d+)/, 1]
108     raise "Couldn't get package id" unless package_id
109
110     first_file = true
111     release_id = ""
112
113     files.each do |filename|
114       basename  = File.basename(filename)
115       file_ext  = File.extname(filename)
116       file_data = File.open(filename, "rb") { |file| file.read }
117
118       puts "Releasing #{basename}..."
119
120       release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
121         release_date = Time.now.strftime("%Y-%m-%d %H:%M")
122         type_map = {
123           ".zip"    => "3000",
124           ".tgz"    => "3110",
125           ".gz"     => "3110",
126           ".gem"    => "1400"
127         }; type_map.default = "9999"
128         type = type_map[file_ext]
129         boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
130
131         query_hash = if first_file then
132           {
133             "group_id" => group_id,
134             "package_id" => package_id,
135             "release_name" => RELEASE_NAME,
136             "release_date" => release_date,
137             "type_id" => type,
138             "processor_id" => "8000", # Any
139             "release_notes" => "",
140             "release_changes" => "",
141             "preformatted" => "1",
142             "submit" => "1"
143           }
144         else
145           {
146             "group_id" => group_id,
147             "release_id" => release_id,
148             "package_id" => package_id,
149             "step2" => "1",
150             "type_id" => type,
151             "processor_id" => "8000", # Any
152             "submit" => "Add This File"
153           }
154         end
155
156         query = "?" + query_hash.map do |(name, value)|
157           [name, URI.encode(value)].join("=")
158         end.join("&")
159
160         data = [
161           "--" + boundary,
162           "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
163           "Content-Type: application/octet-stream",
164           "Content-Transfer-Encoding: binary",
165           "", file_data, ""
166           ].join("\x0D\x0A")
167
168         release_headers = headers.merge(
169           "Content-Type" => "multipart/form-data; boundary=#{boundary}"
170         )
171
172         target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
173         http.post(target + query, data, release_headers)
174       end
175
176       if first_file then
177         release_id = release_response.body[/release_id=(\d+)/, 1]
178         raise("Couldn't get release id") unless release_id
179       end
180
181       first_file = false
182     end
183   end
184 end
Note: See TracBrowser for help on using the browser.