summaryrefslogtreecommitdiff
path: root/Rakefile
blob: dccbb12e641ae2d8fbe7e1b5cd1bee4426ad3cd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# coding:utf-8
$:.unshift File.expand_path("../lib", __FILE__)

require 'rubygems'
require 'rubygems/specification'
require 'bundler'

def gemspec
  @gemspec ||= begin
    file = File.expand_path('../bundler.gemspec', __FILE__)
    eval(File.read(file), binding, file)
  end
end

begin
  require 'spec/rake/spectask'
rescue LoadError
  raise 'Run `gem install rspec` to be able to run specs'
else
  task :clear_tmp do
    FileUtils.rm_rf(File.expand_path("../tmp", __FILE__))
  end

  desc "Run specs"
  Spec::Rake::SpecTask.new do |t|
    t.spec_files = FileList['spec/**/*_spec.rb']
    t.spec_opts  = %w(-fs --color)
    t.warning    = true
  end
  task :spec
end


# Rubygems 1.3.5, 1.3.6, and HEAD specs
rubyopt = ENV["RUBYOPT"]
%w(master REL_1_3_5 REL_1_3_6).each do |rg|
  desc "Run specs with Rubygems #{rg}"
  Spec::Rake::SpecTask.new("spec_gems_#{rg}") do |t|
    t.spec_files = FileList['spec/**/*_spec.rb']
    t.spec_opts  = %w(-fs --color)
    t.warning    = true
  end

  task "rubygems_#{rg}" do
    unless File.directory?("tmp/rubygems_#{rg}")
      system("git clone git://github.com/jbarnette/rubygems.git tmp/rubygems_#{rg} && cd tmp/rubygems_#{rg} && git reset --hard #{rg}")
    end
    ENV["RUBYOPT"] = "-I#{File.expand_path("tmp/rubygems_#{rg}/lib")} #{rubyopt}"
  end

  task "spec_gems_#{rg}" => "rubygems_#{rg}"
  task :ci => "spec_gems_#{rg}"
end


# Ruby 1.8.6, 1.8.7, and 1.9.2 specs
task "ensure_rvm" do
  raise "RVM is not available" unless File.exist?(File.expand_path("~/.rvm/scripts/rvm"))
end

%w(1.8.6-p399 1.8.7-p249 1.9.2-head).each do |ruby|
  ruby_cmd = File.expand_path("~/.rvm/bin/ruby-#{ruby}")

  desc "Run specs on Ruby #{ruby}"
  Spec::Rake::SpecTask.new("spec_ruby_#{ruby}") do |t|
    t.spec_files = FileList['spec/**/*_spec.rb']
    t.spec_opts  = %w(-fs --color)
    t.warning    = true
    t.ruby_cmd   = ruby_cmd
  end

  task "ensure_ruby_#{ruby}" do
    raise "Could not find Ruby #{ruby} at #{ruby_cmd}" unless File.exist?(ruby_cmd)
  end

  task "ensure_ruby_#{ruby}" => "ensure_rvm"
  task "spec_ruby_#{ruby}" => "ensure_ruby_#{ruby}"
  task :ci => "spec_ruby_#{ruby}"
end

begin
  require 'rake/gempackagetask'
rescue LoadError
  task(:gem) { $stderr.puts '`gem install rake` to package gems' }
else
  Rake::GemPackageTask.new(gemspec) do |pkg|
    pkg.gem_spec = gemspec
  end
  task :gem => :gemspec
end

desc "install the gem locally"
task :install => :package do
  sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}}
end

desc "validate the gemspec"
task :gemspec do
  gemspec.validate
end

task :package => :gemspec
task :default => :spec