Rakefile 8.3 KB
Newer Older
D
Initial  
David Heinemeier Hansson 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rake/gempackagetask'
require 'rake/contrib/rubyforgepublisher'

require 'date'


PKG_BUILD       = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
PKG_NAME        = 'rails'
PKG_VERSION     = '0.8.5' + PKG_BUILD
PKG_FILE_NAME   = "#{PKG_NAME}-#{PKG_VERSION}"
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"

D
David Heinemeier Hansson 已提交
16 17 18 19 20 21 22 23

BASE_DIRS   = %w( app config/environments db doc log lib public script test vendor )
APP_DIRS    = %w( models controllers helpers views views/layouts )
PUBLIC_DIRS = %w( images javascripts stylesheets _doc )
TEST_DIRS   = %w( fixtures unit functional mocks mocks/development mocks/testing )

LOG_FILES    = %w( apache.log development.log test.log production.log )
HTML_FILES   = %w( 404.html 500.html index.html )
24
SCRIPT_FILES = %w( generate )
25
BIN_FILES    = %w( breakpointing envcon )
26
GENERATORS   = %w( controller mailer model scaffold )
D
David Heinemeier Hansson 已提交
27 28 29 30

VENDOR_LIBS = %w( actionpack activerecord actionmailer railties )


D
Initial  
David Heinemeier Hansson 已提交
31 32 33 34
desc "Default Task"
task :default => [ :fresh_rails ]

desc "Generates a fresh Rails package with documentation"
D
David Heinemeier Hansson 已提交
35
task :fresh_rails => [ :clean, :make_dir_structure, :initialize_file_stubs, :copy_vendor_libraries, :copy_ties_content, :generate_documentation ]
D
Initial  
David Heinemeier Hansson 已提交
36 37

desc "Generates a fresh Rails package using GEMs with documentation"
D
David Heinemeier Hansson 已提交
38
task :fresh_gem_rails => [ :clean, :make_dir_structure, :initialize_file_stubs, :copy_ties_content, :copy_gem_environment ]
D
Initial  
David Heinemeier Hansson 已提交
39 40

desc "Generates a fresh Rails package without documentation (faster)"
D
David Heinemeier Hansson 已提交
41
task :fresh_rails_without_docs => [ :clean, :make_dir_structure, :initialize_file_stubs, :copy_vendor_libraries, :copy_ties_content ]
D
Initial  
David Heinemeier Hansson 已提交
42 43 44 45 46 47 48 49

desc "Packages the fresh Rails package with documentation"
task :package => [ :clean, :fresh_rails ] do
  system %{cd ..; tar -czvf #{PKG_NAME}-#{PKG_VERSION}.tgz #{PKG_NAME}}
  system %{cd ..; zip -r #{PKG_NAME}-#{PKG_VERSION}.zip #{PKG_NAME}}
end

task :clean do
D
David Heinemeier Hansson 已提交
50
  rm_rf PKG_DESTINATION
D
Initial  
David Heinemeier Hansson 已提交
51 52 53 54 55
end


# Make directory structure ----------------------------------------------------------------

D
David Heinemeier Hansson 已提交
56 57
def make_dest_dirs(dirs, path = nil)
  mkdir_p dirs.map { |dir| File.join(PKG_DESTINATION, path, dir) }
D
Initial  
David Heinemeier Hansson 已提交
58 59
end

D
David Heinemeier Hansson 已提交
60 61
desc "Make the directory structure for the new Rails application"
task :make_dir_structure => [ :make_base_dirs, :make_app_dirs, :make_public_dirs, :make_test_dirs ]
D
Initial  
David Heinemeier Hansson 已提交
62

D
David Heinemeier Hansson 已提交
63 64 65 66
task(:make_base_dirs)   { make_dest_dirs BASE_DIRS              }
task(:make_app_dirs)    { make_dest_dirs APP_DIRS,    'app'     }
task(:make_public_dirs) { make_dest_dirs PUBLIC_DIRS, 'public'  }
task(:make_test_dirs)   { make_dest_dirs TEST_DIRS,   'test'    }
D
Initial  
David Heinemeier Hansson 已提交
67 68 69 70 71


# Initialize file stubs -------------------------------------------------------------------

desc "Initialize empty file stubs (such as for logging)"
D
David Heinemeier Hansson 已提交
72
task :initialize_file_stubs => [ :initialize_log_files ]
D
Initial  
David Heinemeier Hansson 已提交
73 74

task :initialize_log_files do
D
David Heinemeier Hansson 已提交
75 76 77 78 79 80 81
  log_dir = File.join(PKG_DESTINATION, 'log')
  chmod 0777, log_dir
  LOG_FILES.each do |log_file|
    log_path = File.join(log_dir, log_file)
    touch log_path
    chmod 0777, log_path
  end
D
Initial  
David Heinemeier Hansson 已提交
82 83 84 85 86 87
end


# Copy Vendors ----------------------------------------------------------------------------

desc "Copy in all the Rails packages to vendor"
D
David Heinemeier Hansson 已提交
88 89 90
task :copy_vendor_libraries do
  cp_r VENDOR_LIBS.map { |dir| File.join('..', dir) },
       File.join(PKG_DESTINATION, 'vendor')
D
Initial  
David Heinemeier Hansson 已提交
91 92 93 94 95 96 97 98 99
end


# Copy Ties Content -----------------------------------------------------------------------

# :link_apache_config
desc "Make copies of all the default content of ties"
task :copy_ties_content => [ 
  :copy_rootfiles, :copy_dispatches, :copy_html_files, :copy_abstract_application,
100
  :copy_configs, :copy_generators, :copy_binfiles, :copy_test_helpers, :copy_docs_in_public,
D
David Heinemeier Hansson 已提交
101
  :copy_app_doc_readme ]
D
Initial  
David Heinemeier Hansson 已提交
102 103

task :copy_dispatches do
D
David Heinemeier Hansson 已提交
104
  cp "dispatches/dispatch.rb", "#{PKG_DESTINATION}/public/dispatch.rb"
D
Initial  
David Heinemeier Hansson 已提交
105 106
  chmod 0755, "#{PKG_DESTINATION}/public/dispatch.rb"

D
David Heinemeier Hansson 已提交
107
  cp "dispatches/dispatch.rb", "#{PKG_DESTINATION}/public/dispatch.cgi"
D
Initial  
David Heinemeier Hansson 已提交
108 109
  chmod 0755, "#{PKG_DESTINATION}/public/dispatch.cgi"

D
David Heinemeier Hansson 已提交
110
  cp "dispatches/dispatch.fcgi", "#{PKG_DESTINATION}/public/dispatch.fcgi"
D
Initial  
David Heinemeier Hansson 已提交
111 112
  chmod 0755, "#{PKG_DESTINATION}/public/dispatch.fcgi"

D
David Heinemeier Hansson 已提交
113
  cp "dispatches/dispatch.servlet", "#{PKG_DESTINATION}/public/dispatch.servlet"
D
Initial  
David Heinemeier Hansson 已提交
114

115 116
  cp "bin/envcon", "#{PKG_DESTINATION}/script/envcon"
  chmod 0755, "#{PKG_DESTINATION}/script/envcon"
D
Initial  
David Heinemeier Hansson 已提交
117 118 119
end

task :copy_html_files do
D
David Heinemeier Hansson 已提交
120 121
  cp HTML_FILES.map { |dir| File.join('html', dir) },
     File.join(PKG_DESTINATION, 'public')
D
Initial  
David Heinemeier Hansson 已提交
122 123 124
end

task :copy_abstract_application do
D
David Heinemeier Hansson 已提交
125 126
  cp "helpers/abstract_application.rb", "#{PKG_DESTINATION}/app/controllers/abstract_application.rb"
  cp "helpers/application_helper.rb", "#{PKG_DESTINATION}/app/helpers/application_helper.rb"
D
Initial  
David Heinemeier Hansson 已提交
127 128 129
end

task :copy_configs do
D
David Heinemeier Hansson 已提交
130
  cp "configs/database.yml", "#{PKG_DESTINATION}/config/database.yml"
D
Initial  
David Heinemeier Hansson 已提交
131

D
David Heinemeier Hansson 已提交
132
  cp "configs/apache.conf", "#{PKG_DESTINATION}/public/.htaccess"
D
Initial  
David Heinemeier Hansson 已提交
133

D
David Heinemeier Hansson 已提交
134 135 136 137
  cp "environments/shared.rb", "#{PKG_DESTINATION}/config/environment.rb"
  cp "environments/production.rb", "#{PKG_DESTINATION}/config/environments/production.rb"
  cp "environments/development.rb", "#{PKG_DESTINATION}/config/environments/development.rb"
  cp "environments/test.rb", "#{PKG_DESTINATION}/config/environments/test.rb"
D
Initial  
David Heinemeier Hansson 已提交
138 139 140
end

task :copy_generators do
141 142
  mkdir_p File.join(PKG_DESTINATION, 'script/generators')

D
David Heinemeier Hansson 已提交
143 144 145 146 147
  SCRIPT_FILES.each do |file|
    dest_file = File.join(PKG_DESTINATION, 'script', file)
    cp File.join('generators', "#{file}.rb"), dest_file
    chmod 0755, dest_file
  end
148 149

  GENERATORS.each do |dir|
150
    cp_r File.join('generators', dir), File.join(PKG_DESTINATION, 'script', 'generators', dir)
151
  end
D
Initial  
David Heinemeier Hansson 已提交
152 153
end

154 155 156 157 158 159 160 161
task :copy_binfiles do
  BIN_FILES.each do |file|
    dest_file = File.join(PKG_DESTINATION, 'script', file)
    cp File.join('bin', file), dest_file
    chmod 0755, dest_file
  end
end

D
Initial  
David Heinemeier Hansson 已提交
162
task :copy_rootfiles do
D
David Heinemeier Hansson 已提交
163 164
  cp "fresh_rakefile", "#{PKG_DESTINATION}/Rakefile"
  cp "README", "#{PKG_DESTINATION}/README"
D
Initial  
David Heinemeier Hansson 已提交
165 166 167
end

task :copy_test_helpers do
D
David Heinemeier Hansson 已提交
168
  cp "helpers/test_helper.rb", "#{PKG_DESTINATION}/test/test_helper.rb"
D
Initial  
David Heinemeier Hansson 已提交
169 170 171
end

task :copy_docs_in_public do
D
David Heinemeier Hansson 已提交
172
  cp "doc/index.html", "#{PKG_DESTINATION}/public/_doc/index.html"
D
Initial  
David Heinemeier Hansson 已提交
173 174 175
end

task :copy_app_doc_readme do
D
David Heinemeier Hansson 已提交
176
  cp "doc/README_FOR_APP", "#{PKG_DESTINATION}/doc/README_FOR_APP"
D
Initial  
David Heinemeier Hansson 已提交
177 178 179
end

task :link_apache_config do
D
David Heinemeier Hansson 已提交
180 181 182
  chdir(File.join(PKG_DESTINATION, 'config')) {
    ln_s "../public/.htaccess", "apache.conf"
  }
D
Initial  
David Heinemeier Hansson 已提交
183 184 185 186 187 188
end


# Generate documentation ------------------------------------------------------------------

desc "Generate documentation for the framework and for the empty application"
D
David Heinemeier Hansson 已提交
189
task :generate_documentation => [ :generate_app_doc, :generate_rails_framework_doc ]
D
Initial  
David Heinemeier Hansson 已提交
190 191 192 193 194 195 196 197 198 199 200 201 202 203

task :generate_rails_framework_doc do
  system %{cd #{PKG_DESTINATION}; rake apidoc}
end

task :generate_app_doc do
  File.cp "doc/README_FOR_APP", "#{PKG_DESTINATION}/doc/README_FOR_APP"
  system %{cd #{PKG_DESTINATION}; rake appdoc}
end


# Generate GEM ----------------------------------------------------------------------------

task :copy_gem_environment do
D
David Heinemeier Hansson 已提交
204
  cp "environments/shared_for_gem.rb", "#{PKG_DESTINATION}/config/environment.rb"
205
  cp "bin/breakpointing_for_gem", "#{PKG_DESTINATION}/script/breakpointing"
D
Initial  
David Heinemeier Hansson 已提交
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
end


PKG_FILES = FileList[
  '[a-zA-Z]*',
  'bin/**/*', 
  'configs/**/*', 
  'doc/**/*', 
  'dispatches/**/*', 
  'environments/**/*', 
  'generators/**/*', 
  'helpers/**/*', 
  'html/**/*', 
  'lib/**/*'
]

spec = Gem::Specification.new do |s|
  s.name = 'rails'
  s.version = PKG_VERSION
  s.summary = "Web-application framework with template engine, control-flow layer, and ORM."
  s.description = <<-EOF
    Rails is a framework for building web-application using CGI, FCGI, mod_ruby, or WEBrick
    on top of either MySQL, PostgreSQL, or SQLite with eRuby-based templates.
  EOF

  s.add_dependency('rake', '>= 0.4.11')
  s.add_dependency('activerecord', '>= 1.1.0')
  s.add_dependency('actionpack', '>= 0.9.5')
  s.add_dependency('actionmailer', '>= 0.4.0')

  s.files = PKG_FILES.to_a
  s.require_path = 'lib'

  s.bindir = "bin"                               # Use these for applications.
  s.executables = ["rails"]
  s.default_executable = "rails"

  s.author = "David Heinemeier Hansson"
  s.email = "david@loudthinking.com"
  s.homepage = "http://www.rubyonrails.org"
  s.rubyforge_project = "rails"
end

Rake::GemPackageTask.new(spec) do |pkg|
end

# Publish beta gem
desc "Publish the API documentation"
task :pgem => [:gem] do 
  Rake::SshFilePublisher.new("davidhh@one.textdrive.com", "domains/rubyonrails.org/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
  `ssh davidhh@one.textdrive.com './gemupdate.sh'`
D
David Heinemeier Hansson 已提交
257
end