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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
# frozen_string_literal: true
require "rake/extensiontask"
begin
require 'rubocop/rake_task'
RuboCop::RakeTask.new
rescue LoadError
task :rubocop do
# noop
end
end
require "rake/clean"
CLOBBER.include "pkg"
require "bundler/gem_helper"
Bundler::GemHelper.install_tasks(name: "redis-client")
Bundler::GemHelper.install_tasks(dir: "hiredis-client", name: "hiredis-client")
gemspec = Gem::Specification.load("redis-client.gemspec")
Rake::ExtensionTask.new do |ext|
ext.name = "hiredis_connection"
ext.ext_dir = "hiredis-client/ext/redis_client/hiredis"
ext.lib_dir = "hiredis-client/lib/redis_client"
ext.gem_spec = gemspec
CLEAN.add("#{ext.ext_dir}/vendor/*.{a,o}")
end
require "megatest/test_task"
namespace :test do
jobs = ENV["JOBS"] || "4"
jobs = jobs && Process.respond_to?(:fork) ? ["-j", jobs] : []
extra_args = ["--max-retries", "1"] + jobs
Megatest::TestTask.create(:ruby) do |t|
t.tests = FileList["test/**/*_test.rb"].exclude("test/sentinel/*_test.rb")
t.extra_args = extra_args
end
Megatest::TestTask.create(:hiredis) do |t|
t.libs << "test/hiredis"
t.libs << "hiredis-client/lib"
t.tests = FileList["test/hiredis/test_helper.rb"] + FileList["test/**/*_test.rb"].exclude("test/sentinel/*_test.rb")
t.extra_args = extra_args
t.deps << :compile
end
Megatest::TestTask.create(:sentinel) do |t|
t.libs << "test/sentinel"
t.tests = ["test/sentinel"]
t.extra_args = extra_args
end
end
hiredis_supported = RUBY_ENGINE == "ruby" && !RUBY_PLATFORM.match?(/mswin/)
if hiredis_supported
task test: %i[test:ruby test:hiredis test:sentinel]
else
task test: %i[test:ruby test:sentinel]
end
namespace :hiredis do
task :download do
version = "1.0.2"
archive_path = "tmp/hiredis-#{version}.tar.gz"
url = "https://github.com/redis/hiredis/archive/refs/tags/v#{version}.tar.gz"
system("curl", "-L", url, out: archive_path) or raise "Downloading of #{url} failed"
system("rm", "-rf", "hiredis-client/ext/redis_client/hiredis/vendor/")
system("mkdir", "-p", "hiredis-client/ext/redis_client/hiredis/vendor/")
system(
"tar", "xvzf", archive_path,
"-C", "hiredis-client/ext/redis_client/hiredis/vendor",
"--strip-components", "1",
)
system("rm", "-rf", "hiredis-client/ext/redis_client/hiredis/vendor/examples")
end
end
benchmark_suites = %w(single pipelined drivers)
benchmark_modes = %i[ruby yjit hiredis]
namespace :benchmark do
benchmark_suites.each do |suite|
benchmark_modes.each do |mode|
next if suite == "drivers" && mode == :hiredis
name = "#{suite}_#{mode}"
desc name
task name do
output_path = "benchmark/#{name}.md"
sh "rm", "-f", output_path
File.open(output_path, "w+") do |output|
output.puts("ruby: `#{RUBY_DESCRIPTION}`\n\n")
output.puts("redis-server: `#{`redis-server -v`.strip}`\n\n")
output.puts
output.flush
env = {}
args = []
args << "--yjit" if mode == :yjit
env["DRIVER"] = mode == :hiredis ? "hiredis" : "ruby"
system(env, RbConfig.ruby, *args, "benchmark/#{suite}.rb", out: output)
end
skipping = false
output = File.readlines(output_path).reject do |line|
if skipping
if line == "Comparison:\n"
skipping = false
true
else
skipping
end
else
skipping = true if line.start_with?("Warming up ---")
skipping
end
end
File.write(output_path, output.join)
end
end
end
task all: benchmark_suites.flat_map { |s| benchmark_modes.flat_map { |m| "#{s}_#{m}" } }
end
if hiredis_supported
task default: %i[compile test rubocop]
task ci: %i[compile test:ruby test:hiredis]
else
task default: %i[test rubocop]
task ci: %i[test:ruby]
end
|