mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
8ff310aef4
* rails is now a metagem (gem install rails works as it does now) * railties includes the glue layer, so you can easily declare dependencies on railties, actionpack, and actionmailer and not get ActiveRecord's rake tasks, initializers, etc.
178 lines
6.2 KiB
Ruby
178 lines
6.2 KiB
Ruby
require 'rake'
|
|
require 'rake/testtask'
|
|
require 'rake/rdoctask'
|
|
require 'rake/gempackagetask'
|
|
|
|
require 'date'
|
|
require 'rbconfig'
|
|
|
|
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/lib"
|
|
require 'rails/version'
|
|
|
|
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
|
PKG_NAME = ENV['PKG_NAME'] || 'railties'
|
|
PKG_VERSION = Rails::VERSION::STRING + PKG_BUILD
|
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
|
PKG_DESTINATION = ENV["RAILS_PKG_DESTINATION"] || "../#{PKG_NAME}"
|
|
|
|
RELEASE_NAME = "REL #{PKG_VERSION}"
|
|
|
|
RUBY_FORGE_PROJECT = "rails"
|
|
RUBY_FORGE_USER = "webster132"
|
|
|
|
|
|
task :default => :test
|
|
task :test => 'test:isolated'
|
|
|
|
## This is required until the regular test task
|
|
## below passes. It's not ideal, but at least
|
|
## we can see the failures
|
|
namespace :test do
|
|
task :isolated do
|
|
dir = ENV["TEST_DIR"] || "**"
|
|
Dir["test/#{dir}/*_test.rb"].all? do |file|
|
|
next true if file.include?("fixtures")
|
|
ruby = File.join(*RbConfig::CONFIG.values_at('bindir', 'RUBY_INSTALL_NAME'))
|
|
system(ruby, '-Itest', "-I#{File.dirname(__FILE__)}/../activesupport/lib", file)
|
|
end or raise "Failures"
|
|
end
|
|
end
|
|
|
|
Rake::TestTask.new('test:regular') do |t|
|
|
t.libs << 'test' << "#{File.dirname(__FILE__)}/../activesupport/lib"
|
|
t.pattern = 'test/**/*_test.rb'
|
|
t.warning = true
|
|
t.verbose = true
|
|
end
|
|
|
|
VENDOR_LIBS = %w( actionpack activerecord actionmailer activesupport activeresource railties )
|
|
|
|
desc "Generates a fresh Rails package with documentation"
|
|
task :fresh_rails => [ :clean, :create_rails, :copy_vendor_libraries, :generate_documentation ]
|
|
|
|
desc "Generates a fresh Rails package using GEMs with documentation"
|
|
task :fresh_gem_rails => [ :clean, :create_rails ]
|
|
|
|
desc "Generates a fresh Rails package without documentation (faster)"
|
|
task :fresh_rails_without_docs => [ :clean, :create_rails, :copy_vendor_libraries ]
|
|
|
|
desc "Generates a fresh Rails package without documentation using links (faster)"
|
|
task :fresh_rails_without_docs_using_links => [ :clean, :create_rails, :link_vendor_libraries ]
|
|
|
|
desc "Generates minimal Rails package using symlinks"
|
|
task :dev => [ :clean, :create_rails, :link_vendor_libraries ]
|
|
|
|
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
|
|
rm_rf PKG_DESTINATION
|
|
end
|
|
|
|
# Update spinoffs -------------------------------------------------------------------
|
|
|
|
desc "Updates application README to the latest version Railties README"
|
|
task :update_readme do
|
|
readme = "lib/generators/rails/app/templates/README"
|
|
rm readme
|
|
cp "./README", readme
|
|
end
|
|
|
|
# Run application generator -------------------------------------------------------------
|
|
|
|
task :create_rails do
|
|
require 'rails/generators'
|
|
require 'rails/generators/rails/app/app_generator'
|
|
Rails::Generators::AppGenerator.start [ File.basename(PKG_DESTINATION), "--quiet" ],
|
|
:destination_root => File.expand_path(File.dirname(PKG_DESTINATION))
|
|
end
|
|
|
|
# Copy Vendors ----------------------------------------------------------------------------
|
|
|
|
desc "Copy in all the Rails packages to vendor"
|
|
task :copy_vendor_libraries do
|
|
mkdir File.join(PKG_DESTINATION, 'vendor', 'rails')
|
|
VENDOR_LIBS.each { |dir| cp_r File.join('..', dir), File.join(PKG_DESTINATION, 'vendor', 'rails', dir) }
|
|
FileUtils.rm_r(Dir.glob(File.join(PKG_DESTINATION, 'vendor', 'rails', "**", ".git")))
|
|
end
|
|
|
|
desc "Link in all the Rails packages to vendor"
|
|
task :link_vendor_libraries do
|
|
mkdir File.join(PKG_DESTINATION, 'vendor', 'rails')
|
|
VENDOR_LIBS.each { |dir| ln_s File.join('..', '..', '..', dir), File.join(PKG_DESTINATION, 'vendor', 'rails', dir) }
|
|
end
|
|
|
|
|
|
desc 'Generate guides (for authors), use ONLY=foo to process just "foo.textile"'
|
|
task :generate_guides do
|
|
ENV["WARN_BROKEN_LINKS"] = "1" # authors can't disable this
|
|
ruby "guides/rails_guides.rb"
|
|
end
|
|
|
|
|
|
# Generate documentation ------------------------------------------------------------------
|
|
|
|
desc "Generate documentation for the framework and for the empty application"
|
|
task :generate_documentation => [ :generate_app_doc, :generate_rails_framework_doc ]
|
|
|
|
task :generate_rails_framework_doc do
|
|
system %{cd #{PKG_DESTINATION}; rake doc:rails}
|
|
end
|
|
|
|
task :generate_app_doc do
|
|
system %{cd #{PKG_DESTINATION}; rake doc:app}
|
|
end
|
|
|
|
Rake::RDocTask.new { |rdoc|
|
|
rdoc.rdoc_dir = 'doc'
|
|
rdoc.title = "Railties -- Gluing the Engine to the Rails"
|
|
rdoc.options << '--line-numbers' << '--inline-source' << '--accessor' << 'cattr_accessor=object'
|
|
rdoc.options << '--charset' << 'utf-8'
|
|
rdoc.template = ENV['template'] ? "#{ENV['template']}.rb" : '../doc/template/horo'
|
|
rdoc.rdoc_files.include('README', 'CHANGELOG')
|
|
rdoc.rdoc_files.include('lib/*.rb')
|
|
rdoc.rdoc_files.include('lib/rails/*.rb')
|
|
rdoc.rdoc_files.include('lib/generators/*.rb')
|
|
rdoc.rdoc_files.include('lib/commands/**/*.rb')
|
|
}
|
|
|
|
# Generate GEM ----------------------------------------------------------------------------
|
|
|
|
spec = eval(File.read('railties.gemspec'))
|
|
|
|
Rake::GemPackageTask.new(spec) do |pkg|
|
|
pkg.gem_spec = spec
|
|
end
|
|
|
|
|
|
# Publishing -------------------------------------------------------
|
|
desc "Publish the rails gem"
|
|
task :pgem => [:gem] do
|
|
require 'rake/contrib/sshpublisher'
|
|
Rake::SshFilePublisher.new("gems.rubyonrails.org", "/u/sites/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
|
`ssh gems.rubyonrails.org '/u/sites/gems/gemupdate.sh'`
|
|
end
|
|
|
|
desc "Publish the guides"
|
|
task :pguides => :generate_guides do
|
|
require 'rake/contrib/sshpublisher'
|
|
mkdir_p 'pkg'
|
|
`tar -czf pkg/guides.gz guides/output`
|
|
Rake::SshFilePublisher.new("web.rubyonrails.org", "/u/sites/guides.rubyonrails.org/public", "pkg", "guides.gz").upload
|
|
`ssh web.rubyonrails.org 'cd /u/sites/guides.rubyonrails.org/public/ && tar -xvzf guides.gz && mv guides/output/* . && rm -rf guides*'`
|
|
end
|
|
|
|
desc "Publish the release files to RubyForge."
|
|
task :release => [ :package ] do
|
|
require 'rake/contrib/rubyforgepublisher'
|
|
require 'rubyforge'
|
|
|
|
packages = %w( gem ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }
|
|
|
|
rubyforge = RubyForge.new
|
|
rubyforge.login
|
|
rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
|
|
end
|