annotate .svn/pristine/c6/c6b86dc69f620a96ac6d188516e2403c6f257c84.svn-base @ 1519:afce8026aaeb redmine-2.4-integration

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