Rakefile 8.1 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 25
SCRIPT_FILES = %w( generate )
GENERATORS   = %w( controller mailer model scaffold )
D
David Heinemeier Hansson 已提交
26 27 28 29

VENDOR_LIBS = %w( actionpack activerecord actionmailer railties )


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

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

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

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

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 已提交
49
  rm_rf PKG_DESTINATION
D
Initial  
David Heinemeier Hansson 已提交
50 51 52 53 54
end


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

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

D
David Heinemeier Hansson 已提交
59 60
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 已提交
61

D
David Heinemeier Hansson 已提交
62 63 64 65
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 已提交
66 67 68 69 70


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

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

task :initialize_log_files do
D
David Heinemeier Hansson 已提交
74 75 76 77 78 79 80
  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 已提交
81 82 83 84 85 86
end


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

desc "Copy in all the Rails packages to vendor"
D
David Heinemeier Hansson 已提交
87 88 89
task :copy_vendor_libraries do
  cp_r VENDOR_LIBS.map { |dir| File.join('..', dir) },
       File.join(PKG_DESTINATION, 'vendor')
D
Initial  
David Heinemeier Hansson 已提交
90 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,
  :copy_configs, :copy_generators, :copy_test_helpers, :copy_docs_in_public,
D
David Heinemeier Hansson 已提交
100
  :copy_app_doc_readme ]
D
Initial  
David Heinemeier Hansson 已提交
101 102

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

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

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

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

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

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

task :copy_abstract_application do
D
David Heinemeier Hansson 已提交
124 125
  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 已提交
126 127 128
end

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

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

D
David Heinemeier Hansson 已提交
133 134 135 136
  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 已提交
137 138 139
end

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

D
David Heinemeier Hansson 已提交
142 143 144 145 146
  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
147 148

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

task :copy_rootfiles do
D
David Heinemeier Hansson 已提交
154 155
  cp "fresh_rakefile", "#{PKG_DESTINATION}/Rakefile"
  cp "README", "#{PKG_DESTINATION}/README"
D
Initial  
David Heinemeier Hansson 已提交
156 157 158
end

task :copy_test_helpers do
D
David Heinemeier Hansson 已提交
159
  cp "helpers/test_helper.rb", "#{PKG_DESTINATION}/test/test_helper.rb"
D
Initial  
David Heinemeier Hansson 已提交
160 161 162
end

task :copy_docs_in_public do
D
David Heinemeier Hansson 已提交
163
  cp "doc/index.html", "#{PKG_DESTINATION}/public/_doc/index.html"
D
Initial  
David Heinemeier Hansson 已提交
164 165 166
end

task :copy_app_doc_readme do
D
David Heinemeier Hansson 已提交
167
  cp "doc/README_FOR_APP", "#{PKG_DESTINATION}/doc/README_FOR_APP"
D
Initial  
David Heinemeier Hansson 已提交
168 169 170
end

task :link_apache_config do
D
David Heinemeier Hansson 已提交
171 172 173
  chdir(File.join(PKG_DESTINATION, 'config')) {
    ln_s "../public/.htaccess", "apache.conf"
  }
D
Initial  
David Heinemeier Hansson 已提交
174 175 176 177 178 179
end


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

desc "Generate documentation for the framework and for the empty application"
D
David Heinemeier Hansson 已提交
180
task :generate_documentation => [ :generate_app_doc, :generate_rails_framework_doc ]
D
Initial  
David Heinemeier Hansson 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194

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 已提交
195
  cp "environments/shared_for_gem.rb", "#{PKG_DESTINATION}/config/environment.rb"
D
Initial  
David Heinemeier Hansson 已提交
196 197 198 199 200 201 202 203 204 205 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
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.add_dependency('dev-utils', '>= 1.0.1')

  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 已提交
248
end