comparison vendor/plugins/acts_as_versioned/Rakefile @ 0:513646585e45

* Import Redmine trunk SVN rev 3859
author Chris Cannam
date Fri, 23 Jul 2010 15:52:44 +0100
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:513646585e45
1 require 'rubygems'
2
3 Gem::manage_gems
4
5 require 'rake/rdoctask'
6 require 'rake/packagetask'
7 require 'rake/gempackagetask'
8 require 'rake/testtask'
9 require 'rake/contrib/rubyforgepublisher'
10
11 PKG_NAME = 'acts_as_versioned'
12 PKG_VERSION = '0.3.1'
13 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
14 PROD_HOST = "technoweenie@bidwell.textdrive.com"
15 RUBY_FORGE_PROJECT = 'ar-versioned'
16 RUBY_FORGE_USER = 'technoweenie'
17
18 desc 'Default: run unit tests.'
19 task :default => :test
20
21 desc 'Test the calculations plugin.'
22 Rake::TestTask.new(:test) do |t|
23 t.libs << 'lib'
24 t.pattern = 'test/**/*_test.rb'
25 t.verbose = true
26 end
27
28 desc 'Generate documentation for the calculations plugin.'
29 Rake::RDocTask.new(:rdoc) do |rdoc|
30 rdoc.rdoc_dir = 'rdoc'
31 rdoc.title = "#{PKG_NAME} -- Simple versioning with active record models"
32 rdoc.options << '--line-numbers --inline-source'
33 rdoc.rdoc_files.include('README', 'CHANGELOG', 'RUNNING_UNIT_TESTS')
34 rdoc.rdoc_files.include('lib/**/*.rb')
35 end
36
37 spec = Gem::Specification.new do |s|
38 s.name = PKG_NAME
39 s.version = PKG_VERSION
40 s.platform = Gem::Platform::RUBY
41 s.summary = "Simple versioning with active record models"
42 s.files = FileList["{lib,test}/**/*"].to_a + %w(README MIT-LICENSE CHANGELOG RUNNING_UNIT_TESTS)
43 s.files.delete "acts_as_versioned_plugin.sqlite.db"
44 s.files.delete "acts_as_versioned_plugin.sqlite3.db"
45 s.files.delete "test/debug.log"
46 s.require_path = 'lib'
47 s.autorequire = 'acts_as_versioned'
48 s.has_rdoc = true
49 s.test_files = Dir['test/**/*_test.rb']
50 s.add_dependency 'activerecord', '>= 1.10.1'
51 s.add_dependency 'activesupport', '>= 1.1.1'
52 s.author = "Rick Olson"
53 s.email = "technoweenie@gmail.com"
54 s.homepage = "http://techno-weenie.net"
55 end
56
57 Rake::GemPackageTask.new(spec) do |pkg|
58 pkg.need_tar = true
59 end
60
61 desc "Publish the API documentation"
62 task :pdoc => [:rdoc] do
63 Rake::RubyForgePublisher.new(RUBY_FORGE_PROJECT, RUBY_FORGE_USER).upload
64 end
65
66 desc 'Publish the gem and API docs'
67 task :publish => [:pdoc, :rubyforge_upload]
68
69 desc "Publish the release files to RubyForge."
70 task :rubyforge_upload => :package do
71 files = %w(gem tgz).map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" }
72
73 if RUBY_FORGE_PROJECT then
74 require 'net/http'
75 require 'open-uri'
76
77 project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/"
78 project_data = open(project_uri) { |data| data.read }
79 group_id = project_data[/[?&]group_id=(\d+)/, 1]
80 raise "Couldn't get group id" unless group_id
81
82 # This echos password to shell which is a bit sucky
83 if ENV["RUBY_FORGE_PASSWORD"]
84 password = ENV["RUBY_FORGE_PASSWORD"]
85 else
86 print "#{RUBY_FORGE_USER}@rubyforge.org's password: "
87 password = STDIN.gets.chomp
88 end
89
90 login_response = Net::HTTP.start("rubyforge.org", 80) do |http|
91 data = [
92 "login=1",
93 "form_loginname=#{RUBY_FORGE_USER}",
94 "form_pw=#{password}"
95 ].join("&")
96 http.post("/account/login.php", data)
97 end
98
99 cookie = login_response["set-cookie"]
100 raise "Login failed" unless cookie
101 headers = { "Cookie" => cookie }
102
103 release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
104 release_data = open(release_uri, headers) { |data| data.read }
105 package_id = release_data[/[?&]package_id=(\d+)/, 1]
106 raise "Couldn't get package id" unless package_id
107
108 first_file = true
109 release_id = ""
110
111 files.each do |filename|
112 basename = File.basename(filename)
113 file_ext = File.extname(filename)
114 file_data = File.open(filename, "rb") { |file| file.read }
115
116 puts "Releasing #{basename}..."
117
118 release_response = Net::HTTP.start("rubyforge.org", 80) do |http|
119 release_date = Time.now.strftime("%Y-%m-%d %H:%M")
120 type_map = {
121 ".zip" => "3000",
122 ".tgz" => "3110",
123 ".gz" => "3110",
124 ".gem" => "1400"
125 }; type_map.default = "9999"
126 type = type_map[file_ext]
127 boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor"
128
129 query_hash = if first_file then
130 {
131 "group_id" => group_id,
132 "package_id" => package_id,
133 "release_name" => PKG_FILE_NAME,
134 "release_date" => release_date,
135 "type_id" => type,
136 "processor_id" => "8000", # Any
137 "release_notes" => "",
138 "release_changes" => "",
139 "preformatted" => "1",
140 "submit" => "1"
141 }
142 else
143 {
144 "group_id" => group_id,
145 "release_id" => release_id,
146 "package_id" => package_id,
147 "step2" => "1",
148 "type_id" => type,
149 "processor_id" => "8000", # Any
150 "submit" => "Add This File"
151 }
152 end
153
154 query = "?" + query_hash.map do |(name, value)|
155 [name, URI.encode(value)].join("=")
156 end.join("&")
157
158 data = [
159 "--" + boundary,
160 "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
161 "Content-Type: application/octet-stream",
162 "Content-Transfer-Encoding: binary",
163 "", file_data, ""
164 ].join("\x0D\x0A")
165
166 release_headers = headers.merge(
167 "Content-Type" => "multipart/form-data; boundary=#{boundary}"
168 )
169
170 target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php"
171 http.post(target + query, data, release_headers)
172 end
173
174 if first_file then
175 release_id = release_response.body[/release_id=(\d+)/, 1]
176 raise("Couldn't get release id") unless release_id
177 end
178
179 first_file = false
180 end
181 end
182 end