Skip to content

Commit

Permalink
Move Ruby build to a plain gemspec + Gemfile.
Browse files Browse the repository at this point in the history
This means it's no longer possible to run Ruby tests with the bundled
JRuby jar (which isn't Ruby 1.9-compatible anyway).
  • Loading branch information
jarib committed Aug 29, 2014
1 parent 7429633 commit 94ffdbb
Show file tree
Hide file tree
Showing 11 changed files with 82 additions and 153 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,5 @@ GRTAGS
GSYMS
GTAGS
.project
Gemfile.lock
/rb/.bundle
161 changes: 38 additions & 123 deletions rake-tasks/crazy_fun/mappings/ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,6 @@ class AddTestDependencies < Tasks
def handle(fun, dir, args)
task = Rake::Task[task_name(dir, "#{args[:name]}-test")]

if Platform.jruby?
# TODO: # Specifying a dependency here isn't ideal
add_dependencies task, dir, ["//java/client/test/org/openqa/selenium/environment"]
end

if args.has_key?(:deps)
add_dependencies task, dir, args[:deps]
end
Expand All @@ -97,8 +92,6 @@ def handle(fun, dir, args)
STDOUT.sync = true
puts "Running: #{args[:name]} ruby tests"

add_jruby_requires(args) if Platform.jruby? && !ENV['force_local_ruby']

ENV['WD_SPEC_DRIVER'] = args[:name]
ENV['CI_REPORTS'] = "build/test_logs"

Expand All @@ -107,23 +100,10 @@ def handle(fun, dir, args)
:command => args[:command],
:args => %w[--format CI::Reporter::RSpec --format doc --color] + (!!ENV['example'] ? ['--example', ENV['example']] : []),
:debug => !!ENV['log'],
:files => args[:srcs]
:files => args[:srcs],
:gemfile => "build/rb/Gemfile"
end
end

def add_jruby_requires(args)
jars = %w[
multi_json.jar
rubyzip.jar
childprocess.jar
rack.jar
webmock.jar
websocket.jar
].map { |jar| File.join("third_party/jruby", jar) }

args[:require] ||= []
args[:require] += jars
end
end

class RubyDocs
Expand Down Expand Up @@ -155,152 +135,87 @@ def have_yard?
end # RubyDocs

class RubyGem
GEMSPEC_HEADER = "# Automatically generated by the build system. Edits may be lost.\n"

def handle(fun, dir, args)
raise "no :dir for rubygem" unless args[:dir]
raise "no :version for rubygem" unless args[:version]
raise "no :gemspec for rubygem" unless args[:gemspec]

define_spec_task dir, args
define_clean_task dir, args
define_build_task dir, args
define_release_task dir, args

define_gem_install_task dir, args
end

def define_spec_task(dir, args)
gemspec = File.join(args[:dir], "#{args[:name]}.gemspec")

file gemspec do
mkdir_p args[:dir]
Dir.chdir(args[:dir]) {
File.open("#{args[:name]}.gemspec", "w") { |file|
file << GEMSPEC_HEADER
file << gemspec(args).to_ruby
}
}
end

task("clean_#{gemspec}") { rm_rf gemspec }
end

def define_build_task(dir, args)
gemfile = File.join("build", "#{args[:name]}-#{args[:version]}.gem")
gemspec = File.join(args[:dir], "#{args[:name]}.gemspec")
gemspec = File.expand_path(args[:gemspec])
deps = (args[:deps] || [])
spec_dir = File.dirname(gemspec)

deps = (args[:deps] || [])
deps << "clean_#{gemspec}" << gemspec

file gemfile => deps do
desc "Build #{args[:gemspec]}"
task "//#{dir}:gem:build" => deps do
require 'rubygems/builder'
spec = eval(File.read(gemspec))
file = Dir.chdir(args[:dir]) {

file = Dir.chdir(spec_dir) {
spec = eval(File.read(gemspec))
Gem::Builder.new(spec).build
}

mv File.join(args[:dir], file), gemfile
mv File.join(spec_dir, file), "build/"
end

desc "Build #{gemfile}"
task "//#{dir}:gem:build" => gemfile
end

def define_clean_task(dir, args)
desc 'Clean rubygem artifacts'
task "//#{dir}:gem:clean" do
rm_rf args[:dir]
rm_rf "build/*.gem"
end
end

def define_release_task(dir, args)
desc 'Build and release the ruby gem to Gemcutter'
task "//#{dir}:gem:release" => %W[//#{dir}:gem:clean //#{dir}:gem:build] do
sh "gem push build/#{args[:name]}-#{args[:version]}.gem"
gem = Dir['build/*.gem'].first # safe as long as :clean does its job
sh "gem", "push", gem
end
end

def define_gem_install_task(dir, args)
desc 'Install gem dependencies for the current Ruby'
task "//#{dir}:install-gems" do
dependencies = Array(args[:gemdeps]) + Array(args[:devdeps])
dependencies.each do |dep|
name, version = dep.shift
sh "gem", "install", name, "--version", version, "--no-rdoc", "--no-ri"
end
end
end

def gemspec(args)
Gem::Specification.new do |s|
s.name = args[:name]
s.version = args[:version]
s.summary = args[:summary]
s.description = args[:description]
s.authors = args[:author]
s.email = args[:email]
s.homepage = args[:homepage]
s.files = Dir[*args[:files]]
s.license = args[:license]
s.required_ruby_version = args[:required_ruby_version]

args[:gemdeps].each { |dep| s.add_dependency(*dep.shift) }
args[:devdeps].each { |dep| s.add_development_dependency(*dep.shift) }
ENV['BUNDLE_GEMFILE'] = 'rb/Gemfile'
sh "bundle", "install"
end
end

end # RubyGem
end # RubyMappings

class RubyRunner

def self.run(opts)
cmd = []

if ENV['force_local_ruby']
cmd << 'ruby'
def ruby(opts)
cmd = []

if Platform.jruby?
require 'java'
JRuby.runtime.instance_config.run_ruby_in_process = false
end
else
if Platform.jruby?
require 'java'
JRuby.runtime.instance_config.run_ruby_in_process = true
cmd << "ruby"
cmd << "-J-Djava.awt.headless=true" if opts[:headless]
elsif defined?(Gem)
cmd << Gem.ruby
else
cmd << "ruby"
end
end
if opts[:gemfile]
ENV['BUNDLE_GEMFILE'] = File.expand_path(opts[:gemfile])
cmd += ["bundle", "exec"]
end

if opts[:debug]
cmd << "-d"
end
cmd << "ruby"

if opts.has_key? :include
cmd << "-I"
cmd << Array(opts[:include]).join(File::PATH_SEPARATOR)
end
if opts[:debug]
cmd << "-d"
end

Array(opts[:require]).each do |f|
cmd << "-r#{f}"
end
if opts.has_key? :include
cmd << "-I"
cmd << Array(opts[:include]).join(File::PATH_SEPARATOR)
end

cmd << "-S" << opts[:command] if opts.has_key? :command
cmd += Array(opts[:args]) if opts.has_key? :args
cmd += Array(opts[:files]) if opts.has_key? :files
Array(opts[:require]).each do |f|
cmd << "-r#{f}"
end

puts cmd.join(' ')
cmd << "-S" << opts[:command] if opts.has_key? :command
cmd += Array(opts[:args]) if opts.has_key? :args
cmd += Array(opts[:files]) if opts.has_key? :files

sh(*cmd)
end
end
puts cmd.join(' ')

def ruby(opts)
RubyRunner.run opts
sh(*cmd)
end
2 changes: 2 additions & 0 deletions rb/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
source 'https://rubygems.org'
gemspec
36 changes: 6 additions & 30 deletions rb/build.desc
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
rubygem(
version = "2.43.0.dev",
name = "selenium-webdriver",
dir = "build/rb",
gemspec = "build/rb/selenium-webdriver.gemspec",
deps = [
"//rb:android",
"//rb:chrome",
Expand All @@ -15,32 +13,7 @@ rubygem(
"//rb:remote",
"//rb:rc-client",
"//rb:safari"
],
gemdeps = [
{ "multi_json" : "~> 1.0" },
{ "rubyzip" : "~> 1.0" },
{ "childprocess" : ">= 0.5.0" },
{ "websocket" : "~> 1.0" }
],
devdeps = [
{ "rspec" : "~> 2.0" },
{ "rack" : "~> 1.0" },
{ "ci_reporter" : "~> 1.6.2" },
{ "webmock" : "~> 1.7.5" }
],
summary = "The next generation developer focused tool for automated testing of webapps",
description = "WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application.",
author = ["Jari Bakken"],
email = "jari.bakken@gmail.com",
homepage = "http://selenium.googlecode.com",
license = "Apache",
files = [
"lib/**/*",
"CHANGES",
"README.md",
"COPYING"
],
required_ruby_version = ">= 1.9.2"
]
)

rubydocs(
Expand All @@ -60,12 +33,15 @@ ruby_library(name = "common",
"lib/selenium/server.rb",
"lib/selenium/rake/server_task.rb",
"lib/selenium-webdriver.rb",
"selenium-webdriver.gemspec",
"Gemfile",
"CHANGES",
"README.md"
],
resources = [
{ "../COPYING" : "rb/COPYING" }
]
],
deps = [ "//java/client/test/org/openqa/selenium/environment" ]
)

ruby_library(name = "support",
Expand Down
34 changes: 34 additions & 0 deletions rb/selenium-webdriver.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# -*- encoding: utf-8 -*-

root = File.expand_path(File.dirname(__FILE__))
if root != Dir.pwd
raise "cwd must be #{root} when reading gemspec"
end

Gem::Specification.new do |s|
s.name = %q{selenium-webdriver}
s.version = "2.43.0.dev"

s.authors = ["Jari Bakken"]
s.email = %q{jari.bakken@gmail.com}
s.description = %q{WebDriver is a tool for writing automated tests of websites. It aims to mimic the behaviour of a real user, and as such interacts with the HTML of the application.}
s.summary = %q{The next generation developer focused tool for automated testing of webapps}
s.homepage = %q{http://selenium.googlecode.com}
s.licenses = ["Apache"]

s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")

s.files = Dir[root + '/**/*'].reject { |e| e =~ /ruby\.iml|build\.desc/ }.map { |e| e.sub(root + '/', '') }
s.require_paths = ["lib"]

s.add_runtime_dependency("multi_json", ["~> 1.0"])
s.add_runtime_dependency("rubyzip", ["~> 1.0"])
s.add_runtime_dependency("childprocess", ["~> 0.5"])
s.add_runtime_dependency("websocket", ["~> 1.0"])

s.add_development_dependency("rspec", ["~> 2.0"])
s.add_development_dependency("rack", ["~> 1.0"])
s.add_development_dependency("ci_reporter", ["~> 1.6", ">= 1.6.2"])
s.add_development_dependency("webmock", ["~> 1.7", ">= 1.7.5"])
end
Binary file removed third_party/jruby/childprocess.jar
Binary file not shown.
Binary file removed third_party/jruby/multi_json.jar
Binary file not shown.
Binary file removed third_party/jruby/rack.jar
Binary file not shown.
Binary file removed third_party/jruby/rubyzip.jar
Binary file not shown.
Binary file removed third_party/jruby/webmock.jar
Binary file not shown.
Binary file removed third_party/jruby/websocket.jar
Binary file not shown.

0 comments on commit 94ffdbb

Please sign in to comment.