| 237 | | s.add_dependency('rake', '>= 0.4.15') |
| 238 | | s.add_dependency('activesupport', '= 1.0.2' + PKG_BUILD) |
| 239 | | s.add_dependency('activerecord', '= 1.9.0' + PKG_BUILD) |
| 240 | | s.add_dependency('actionpack', '= 1.6.0' + PKG_BUILD) |
| 241 | | s.add_dependency('actionmailer', '= 0.8.0' + PKG_BUILD) |
| 242 | | s.add_dependency('actionwebservice', '= 0.6.1' + PKG_BUILD) |
| | 253 | s.add_dependency('rake', '>= 0.5.3') |
| | 254 | s.add_dependency('activesupport', '= 1.1.1' + PKG_BUILD) |
| | 255 | s.add_dependency('activerecord', '= 1.11.1' + PKG_BUILD) |
| | 256 | s.add_dependency('actionpack', '= 1.9.1' + PKG_BUILD) |
| | 257 | s.add_dependency('actionmailer', '= 1.0.1' + PKG_BUILD) |
| | 258 | s.add_dependency('actionwebservice', '= 0.8.1' + PKG_BUILD) |
| 266 | | Rake::SshFilePublisher.new("davidhh@comox.textdrive.com", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload |
| 267 | | `ssh davidhh@comox.textdrive.com './gemupdate.sh'` |
| 268 | | end |
| | 283 | Rake::SshFilePublisher.new("davidhh@wrath.rubyonrails.org", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload |
| | 284 | `ssh davidhh@wrath.rubyonrails.org './gemupdate.sh'` |
| | 285 | end |
| | 286 | |
| | 287 | desc "Publish the release files to RubyForge." |
| | 288 | task :release => [:gem] do |
| | 289 | files = ["gem"].map { |ext| "pkg/#{PKG_FILE_NAME}.#{ext}" } |
| | 290 | |
| | 291 | if RUBY_FORGE_PROJECT then |
| | 292 | require 'net/http' |
| | 293 | require 'open-uri' |
| | 294 | |
| | 295 | project_uri = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}/" |
| | 296 | project_data = open(project_uri) { |data| data.read } |
| | 297 | group_id = project_data[/[?&]group_id=(\d+)/, 1] |
| | 298 | raise "Couldn't get group id" unless group_id |
| | 299 | |
| | 300 | # This echos password to shell which is a bit sucky |
| | 301 | if ENV["RUBY_FORGE_PASSWORD"] |
| | 302 | password = ENV["RUBY_FORGE_PASSWORD"] |
| | 303 | else |
| | 304 | print "#{RUBY_FORGE_USER}@rubyforge.org's password: " |
| | 305 | password = STDIN.gets.chomp |
| | 306 | end |
| | 307 | |
| | 308 | login_response = Net::HTTP.start("rubyforge.org", 80) do |http| |
| | 309 | data = [ |
| | 310 | "login=1", |
| | 311 | "form_loginname=#{RUBY_FORGE_USER}", |
| | 312 | "form_pw=#{password}" |
| | 313 | ].join("&") |
| | 314 | http.post("/account/login.php", data) |
| | 315 | end |
| | 316 | |
| | 317 | cookie = login_response["set-cookie"] |
| | 318 | raise "Login failed" unless cookie |
| | 319 | headers = { "Cookie" => cookie } |
| | 320 | |
| | 321 | release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}" |
| | 322 | release_data = open(release_uri, headers) { |data| data.read } |
| | 323 | package_id = release_data[/[?&]package_id=(\d+)/, 1] |
| | 324 | raise "Couldn't get package id" unless package_id |
| | 325 | |
| | 326 | first_file = true |
| | 327 | release_id = "" |
| | 328 | |
| | 329 | files.each do |filename| |
| | 330 | basename = File.basename(filename) |
| | 331 | file_ext = File.extname(filename) |
| | 332 | file_data = File.open(filename, "rb") { |file| file.read } |
| | 333 | |
| | 334 | puts "Releasing #{basename}..." |
| | 335 | |
| | 336 | release_response = Net::HTTP.start("rubyforge.org", 80) do |http| |
| | 337 | release_date = Time.now.strftime("%Y-%m-%d %H:%M") |
| | 338 | type_map = { |
| | 339 | ".zip" => "3000", |
| | 340 | ".tgz" => "3110", |
| | 341 | ".gz" => "3110", |
| | 342 | ".gem" => "1400" |
| | 343 | }; type_map.default = "9999" |
| | 344 | type = type_map[file_ext] |
| | 345 | boundary = "rubyqMY6QN9bp6e4kS21H4y0zxcvoor" |
| | 346 | |
| | 347 | query_hash = if first_file then |
| | 348 | { |
| | 349 | "group_id" => group_id, |
| | 350 | "package_id" => package_id, |
| | 351 | "release_name" => RELEASE_NAME, |
| | 352 | "release_date" => release_date, |
| | 353 | "type_id" => type, |
| | 354 | "processor_id" => "8000", # Any |
| | 355 | "release_notes" => "", |
| | 356 | "release_changes" => "", |
| | 357 | "preformatted" => "1", |
| | 358 | "submit" => "1" |
| | 359 | } |
| | 360 | else |
| | 361 | { |
| | 362 | "group_id" => group_id, |
| | 363 | "release_id" => release_id, |
| | 364 | "package_id" => package_id, |
| | 365 | "step2" => "1", |
| | 366 | "type_id" => type, |
| | 367 | "processor_id" => "8000", # Any |
| | 368 | "submit" => "Add This File" |
| | 369 | } |
| | 370 | end |
| | 371 | |
| | 372 | query = "?" + query_hash.map do |(name, value)| |
| | 373 | [name, URI.encode(value)].join("=") |
| | 374 | end.join("&") |
| | 375 | |
| | 376 | data = [ |
| | 377 | "--" + boundary, |
| | 378 | "Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"", |
| | 379 | "Content-Type: application/octet-stream", |
| | 380 | "Content-Transfer-Encoding: binary", |
| | 381 | "", file_data, "" |
| | 382 | ].join("\x0D\x0A") |
| | 383 | |
| | 384 | release_headers = headers.merge( |
| | 385 | "Content-Type" => "multipart/form-data; boundary=#{boundary}" |
| | 386 | ) |
| | 387 | |
| | 388 | target = first_file ? "/frs/admin/qrs.php" : "/frs/admin/editrelease.php" |
| | 389 | http.post(target + query, data, release_headers) |
| | 390 | end |
| | 391 | |
| | 392 | if first_file then |
| | 393 | release_id = release_response.body[/release_id=(\d+)/, 1] |
| | 394 | raise("Couldn't get release id") unless release_id |
| | 395 | end |
| | 396 | |
| | 397 | first_file = false |
| | 398 | end |
| | 399 | end |
| | 400 | end |