File: Rakefile

package info (click to toggle)
ruby-redis-client 0.22.2-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 224 kB
  • sloc: ruby: 2,079; makefile: 4
file content (126 lines) | stat: -rw-r--r-- 3,857 bytes parent folder | download
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
# frozen_string_literal: true

require "rake/extensiontask"
require "rake/testtask"
require 'rubocop/rake_task'

RuboCop::RakeTask.new

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

namespace :test do
  Rake::TestTask.new(:ruby) do |t|
    t.libs << "test"
    t.libs << "lib"
    t.test_files = FileList["test/**/*_test.rb"].exclude("test/sentinel/*_test.rb")
    t.options = '-v' if ENV['CI'] || ENV['VERBOSE']
  end

  Rake::TestTask.new(:sentinel) do |t|
    t.libs << "test/sentinel"
    t.libs << "test"
    t.libs << "lib"
    t.test_files = FileList["test/sentinel/*_test.rb"]
    t.options = '-v' if ENV['CI'] || ENV['VERBOSE']
  end

  Rake::TestTask.new(:hiredis) do |t|
    t.libs << "test/hiredis"
    t.libs << "test"
    t.libs << "hiredis-client/lib"
    t.libs << "lib"
    t.test_files = FileList["test/**/*_test.rb"].exclude("test/sentinel/*_test.rb")
    t.options = '-v' if ENV['CI'] || ENV['VERBOSE']
  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