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
BIN_FILES    = %w( generate breakpointing envcon )
25
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
end


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

# :link_apache_config
desc "Make copies of all the default content of ties"
task :copy_ties_content => [ 
98
  :copy_rootfiles, :copy_dispatches, :copy_html_files, :copy_application,
99
  :copy_configs, :copy_binfiles, :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
end

123 124
task :copy_application do
  cp "helpers/application.rb", "#{PKG_DESTINATION}/app/controllers/application.rb"
D
David Heinemeier Hansson 已提交
125
  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')

142
  GENERATORS.each do |dir|
143
    cp_r File.join('generators', dir), File.join(PKG_DESTINATION, 'script', 'generators', dir)
144
  end
D
Initial  
David Heinemeier Hansson 已提交
145 146
end

147 148 149 150 151 152 153 154
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 已提交
155
task :copy_rootfiles do
D
David Heinemeier Hansson 已提交
156 157
  cp "fresh_rakefile", "#{PKG_DESTINATION}/Rakefile"
  cp "README", "#{PKG_DESTINATION}/README"
D
Initial  
David Heinemeier Hansson 已提交
158 159 160
end

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

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

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

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


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

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

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 已提交
197
  cp "environments/shared_for_gem.rb", "#{PKG_DESTINATION}/config/environment.rb"
198
  cp "bin/breakpointing_for_gem", "#{PKG_DESTINATION}/script/breakpointing"
D
Initial  
David Heinemeier Hansson 已提交
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
end


PKG_FILES = FileList[
  '[a-zA-Z]*',
  'bin/**/*', 
  'configs/**/*', 
  'doc/**/*', 
  'dispatches/**/*', 
  'environments/**/*', 
  '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')

228
  s.files = PKG_FILES.to_a.delete_if {|f| f.include?('.svn')}
D
Initial  
David Heinemeier Hansson 已提交
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
  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 已提交
249
end