annotate lib/plugins/acts_as_versioned/Rakefile @ 1628:9c5f8e24dadc live tip

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