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

root/tags/rel_0-11-1/activerecord/Rakefile

Revision 1026, 7.2 kB (checked in by david, 4 years ago)

Tagged the 0.11.1 release

  • Property svn:executable set to *
Line 
1 require 'rubygems'
2 require 'rake'
3 require 'rake/testtask'
4 require 'rake/rdoctask'
5 require 'rake/packagetask'
6 require 'rake/gempackagetask'
7 require 'rake/contrib/rubyforgepublisher'
8
9 PKG_BUILD     = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
10 PKG_NAME      = 'activerecord'
11 PKG_VERSION   = '1.9.1' + PKG_BUILD
12 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
13
14 RELEASE_NAME  = "REL #{PKG_VERSION}"
15
16 RUBY_FORGE_PROJECT = "activerecord"
17 RUBY_FORGE_USER    = "webster132"
18
19 PKG_FILES = FileList[
20     "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "rakefile"
21 ].exclude(/\bCVS\b|~$/)
22
23
24 desc "Default Task"
25 task :default => [ :test_ruby_mysql, :test_mysql_ruby, :test_sqlite, :test_sqlite3, :test_postgresql ]
26
27 # Run the unit tests
28
29 Rake::TestTask.new("test_ruby_mysql") { |t|
30   t.libs << "test" << "test/connections/native_mysql"
31   t.pattern = 'test/*_test.rb'
32   t.verbose = true
33 }
34
35 Rake::TestTask.new("test_mysql_ruby") { |t|
36   t.libs << "test" << "test/connections/native_mysql"
37   t.pattern = 'test/*_test.rb'
38   t.verbose = true
39 }
40
41 for adapter in %( postgresql sqlite sqlite3 sqlserver db2 oci )
42   Rake::TestTask.new("test_#{adapter}") { |t|
43     t.libs << "test" << "test/connections/native_#{adapter}"
44     t.pattern = 'test/*_test.rb'
45     t.verbose = true
46   }
47 end
48
49
50 # Generate the RDoc documentation
51
52 Rake::RDocTask.new { |rdoc|
53   rdoc.rdoc_dir = 'doc'
54   rdoc.title    = "Active Record -- Object-relation mapping put on rails"
55   rdoc.options << '--line-numbers --inline-source --accessor cattr_accessor=object'
56   rdoc.template = "#{ENV['template']}.rb" if ENV['template']
57   rdoc.rdoc_files.include('README', 'RUNNING_UNIT_TESTS', 'CHANGELOG')
58   rdoc.rdoc_files.include('lib/**/*.rb')
59   rdoc.rdoc_files.exclude('lib/active_record/vendor/*')
60   rdoc.rdoc_files.include('dev-utils/*.rb')
61 }
62
63
64 # Create compressed packages
65
66 dist_dirs = [ "lib", "test", "examples", "dev-utils" ]
67
68 spec = Gem::Specification.new do |s|
69   s.name = PKG_NAME
70   s.version = PKG_VERSION
71   s.summary = "Implements the ActiveRecord pattern for ORM."
72   s.description = %q{Implements the ActiveRecord pattern (Fowler, PoEAA) for ORM. It ties database tables and classes together for business objects, like Customer or Subscription, that can find, save, and destroy themselves without resorting to manual SQL.}
73
74   s.files = [ "rakefile", "install.rb", "README", "RUNNING_UNIT_TESTS", "CHANGELOG" ]
75   dist_dirs.each do |dir|
76     s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
77   end
78  
79   s.add_dependency('activesupport', '= 1.0.3' + PKG_BUILD)
80
81   s.files.delete "test/fixtures/fixture_database.sqlite"
82   s.files.delete "test/fixtures/fixture_database_2.sqlite"
83   s.files.delete "test/fixtures/fixture_database.sqlite3"
84   s.files.delete "test/fixtures/fixture_database_2.sqlite3"
85   s.require_path = 'lib'
86   s.autorequire = 'active_record'
87
88   s.has_rdoc = true
89   s.extra_rdoc_files = %w( README )
90   s.rdoc_options.concat ['--main',  'README']
91  
92   s.author = "David Heinemeier Hansson"
93   s.email = "david@loudthinking.com"
94   s.homepage = "http://www.rubyonrails.org"
95   s.rubyforge_project = "activerecord"
96 end
97  
98 Rake::GemPackageTask.new(spec) do |p|
99   p.gem_spec = spec
100   p.need_tar = true
101   p.need_zip = true
102 end
103
104
105 # Publishing ------------------------------------------------------
106
107 desc "Publish the beta gem"
108 task :pgem => [:package] do
109   Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
110   `ssh davidhh@comox.textdrive.com './gemupdate.sh'`
111 end
112
113 desc "Publish the API documentation"
114 task :pdoc => [:rdoc] do
115   Rake::SshDirPublisher.new("davidhh@comox.textdrive.com", "public_html/ar", "doc").upload
116 end
117
118 desc "Publish the release files to RubyForge."
119 task :release => [:package] do
120   files = ["gem", "tgz", "zip"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
121
122   if RUBY_FORGE_PROJECT then
123     require 'net/http'
124     require 'open-uri'
125
126     project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
127     project_data = open(project_uri) { |data| data.read }
128     group_id = project_data[/[?&]group_id=(\d+)/, 1]
129     raise "Couldn't get group id" unless group_id
130
131     # This echos password to shell which is a bit sucky
132     if ENV["RUBY_FORGE_PASSWORD"]
133       password = ENV["RUBY_FORGE_PASSWORD"]
134     else
135       print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
136       password = STDIN.gets.chomp
137     end
138
139     login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
140       data = [
141         "login=1",
142         "form_loginname=#{RUBY_FORGE_USER}",
143         "form_pw=#{password}"
144       ].join("&")
145       http.post("/account/login.php", data)
146     end
147
148     cookie = login_response["set-cookie"]
149     raise "Login failed" unless cookie
150     headers = { "Cookie" => cookie }
151
152     release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
153     release_data = open(release_uri, headers) { |data| data.read }
154     package_id = release_data[/[?&]package_id=(\d+)/, 1]
155     raise "Couldn't get package id" unless package_id
156
157     first_file = true
158     release_id = ""
159
160     files.each do |filename|
161       basename  = File.basename(filename)
162       file_ext  = File.extname(filename)
163       file_data = File.open(filename, "rb") { |file| file.read }
164
165       puts "Releasing #{basename}..."
166
167       release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
168         release_date = Time.now.strftime("%Y-%m-%d %H:%M")
169         type_map = {
170           ".zip"    => "3000",
171           ".tgz"    => "3110",
172           ".gz"     => "3110",
173           ".gem"    => "1400"
174         }; type_map.default = "9999"
175         type = type_map[file_ext]
176         boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
177
178         query_hash = if first_file then
179           {
180             "group_id" => group_id,
181             "package_id" => package_id,
182             "release_name" => RELEASE_NAME,
183             "release_date" => release_date,
184             "type_id" => type,
185             "processor_id" => "8000", # Any
186             "release_notes" => "",
187             "release_changes" => "",
188             "preformatted" => "1",
189             "submit" => "1"
190           }
191         else
192           {
193             "group_id" => group_id,
194             "release_id" => release_id,
195             "package_id" => package_id,
196             "step2" => "1",
197             "type_id" => type,
198             "processor_id" => "8000", # Any
199             "submit" => "Add This File"
200           }
201         end
202
203         query = "?" + query_hash.map do |(name, value)|
204           [name, URI.encode(value)].join("=")
205         end.join("&")
206
207         data = [
208           "--" + boundary,
209           "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
210           "Content-Type: application/octet-stream",
211           "Content-Transfer-Encoding: binary",
212           "", file_data, ""
213           ].join("\x0D\x0A")
214
215         release_headers = headers.merge(
216           "Content-Type" => "multipart/form-data; boundary=#{boundary}"
217         )
218
219         target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
220         http.post(target + query, data, release_headers)
221       end
222
223       if first_file then
224         release_id = release_response.body[/release_id=(\d+)/, 1]
225         raise("Couldn't get release id") unless release_id
226       end
227
228       first_file = false
229     end
230   end
231 end
Note: See TracBrowser for help on using the browser.