benchmark_driver 0.4.5 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37efb4b8012a19e28858b7b3d34126c769fffe51a0216f167bf1b1319aa236b2
4
- data.tar.gz: 535378addbcfe89f7a64897110880b6cb287ac24339eb9f163b0751362490fcb
3
+ metadata.gz: 93c1a2237caaf4724bad8d5d6e01594121e33c24c4d13c5a69dc538bb4c7d56a
4
+ data.tar.gz: f1ed23287e7b4966aeb8ed53413839362d559e929d8307af793823262ce289df
5
5
  SHA512:
6
- metadata.gz: 8049e4ca621f08751de795fa936c3efa1cb351998cc81b55fc47cb832489df4a911d4ef476d01f9d90a9b140b395e64a1b87332a6519bd5c606d72b94fd5c1a7
7
- data.tar.gz: 85465c2501b332474513a9b48eb3f389ed31ab00bd1fdfc363eed517864264e2126e3f5eb08fa535534ee22d08f3c0ef32507ea16f0555ead5c252f74ceaa946
6
+ metadata.gz: ef0c550707bae9de4611c4ee66a30da4c99baf7d511496bf59d77dc914ff6635f780ce3163d90b2c0b04d0882042fada002093b15908c098f47dfe3a1217419c
7
+ data.tar.gz: 2a20c835711a51424b56d70887c921cf734031260b3443454e9ab9bed53c2db62a3e11b2da56279248af606a21b10ffa61e7ee7d5a84b9b5cb5e56cdd410b0c6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # v0.5.0
2
+
3
+ - Automatic bundle install for each Ruby executable on `--bundler` or `--bundle`
4
+ - CLI error handling is improved for empty/invalid arguments
5
+
1
6
  # v0.4.5
2
7
 
3
8
  - Allow specifying arguments for ruby executables
data/exe/benchmark-driver CHANGED
@@ -2,14 +2,16 @@
2
2
  $:.unshift File.expand_path('../lib', __dir__)
3
3
 
4
4
  require 'benchmark/driver'
5
+ require 'benchmark/driver/bundle_installer'
5
6
  require 'benchmark/driver/yaml_parser'
6
7
  require 'optparse'
7
8
  require 'yaml'
8
9
 
9
10
  options = {}
10
- args = OptionParser.new do |o|
11
+ parser = OptionParser.new do |o|
11
12
  o.banner = "Usage: #{File.basename($0, '.*')} [options] [YAML]"
12
13
  o.on('-e', '--executables [EXECS]', 'Ruby executables (e1::path1,arg1,...; e2::path2,arg2;...)') do |e|
14
+ abort '-e, --executable must take argument but not given' if e.nil?
13
15
  options[:execs] ||= []
14
16
  e.split(';').each do |name_path|
15
17
  name, path = name_path.split('::', 2)
@@ -17,6 +19,7 @@ args = OptionParser.new do |o|
17
19
  end
18
20
  end
19
21
  o.on('--rbenv [VERSIONS]', 'Ruby executables in rbenv (x.x.x,arg1,...;y.y.y,arg2,...;...)') do |r|
22
+ abort '--rbenv must take argument but not given' if r.nil?
20
23
  options[:execs] ||= []
21
24
  r.split(';').each do |spec|
22
25
  version, *args = spec.split(',')
@@ -39,14 +42,17 @@ args = OptionParser.new do |o|
39
42
  abort '--filter can be used only once' if options.key?(:filter)
40
43
  options[:filter] = v
41
44
  end
42
- o.on('--bundler', 'Use gems specified in Gemfile (append -rbundler/setup)') do |v|
45
+ o.on('--bundler', 'Install and use gems specified in Gemfile') do |v|
43
46
  options[:bundler] = v
44
47
  end
45
48
  o.on('--dir', 'Override __dir__ from "/tmp" to actual directory of YAML') do |v|
46
49
  options[:dir] = v
47
50
  end
48
- end.parse!(ARGV)
49
- abort "No YAML file is specified" if args.empty?
51
+ end
52
+ args = parser.parse!(ARGV)
53
+ if args.empty?
54
+ abort "No YAML file is specified!\n\n#{parser.help}"
55
+ end
50
56
 
51
57
  args.each do |path|
52
58
  yaml = YAML.load(File.read(path))
@@ -70,6 +76,7 @@ args.each do |path|
70
76
  case key
71
77
  when :bundler
72
78
  config.runner_options.executables.each do |executable|
79
+ Benchmark::Driver::BundleInstaller.bundle_install_for(executable)
73
80
  executable.command << '-rbundler/setup'
74
81
  end
75
82
  when :compare
@@ -0,0 +1,45 @@
1
+ require 'pathname'
2
+
3
+ # TODO: Support Windows... This depends on availability of which(1)
4
+ module Benchmark::Driver::BundleInstaller
5
+ class << self
6
+ # @param [Benchmark::Driver::Configuration::Executable] executable
7
+ def bundle_install_for(executable)
8
+ ruby_path = IO.popen(['which', executable.command.first], &:read).rstrip
9
+ unless $?.success?
10
+ abort "#{executable.command.first.dump} command was not found to execute `bundle install`"
11
+ end
12
+
13
+ bundler_path = Pathname.new(ruby_path).dirname.join('bundle')
14
+ unless bundler_path.executable?
15
+ abort "#{bundler_path.to_s.dump} was not a bundler executable, whose path was guessed from #{ruby_path.dump}"
16
+ end
17
+ bundle = bundler_path.to_s
18
+
19
+ Bundler.with_clean_env do
20
+ bundle_check(bundle, ruby: executable.name) || bundle_install(bundle)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ # @param [String] bundle - full path to bundle(1)
27
+ # @param [String] ruby - name of ruby
28
+ # @return [TrueClass,FalseClass] - true if success
29
+ def bundle_check(bundle, ruby:)
30
+ output = IO.popen([bundle, 'check'], &:read)
31
+ $?.success?.tap do |success|
32
+ unless success
33
+ $stderr.puts("For #{ruby}:")
34
+ $stderr.print(output)
35
+ end
36
+ end
37
+ end
38
+
39
+ # @param [String] bundle - full path to bundle(1)
40
+ def bundle_install(bundle)
41
+ pid = Process.spawn(bundle, 'install', '-j', ENV.fetch('BUNDLE_JOBS', '4'))
42
+ Process.wait(pid)
43
+ end
44
+ end
45
+ end
@@ -21,7 +21,7 @@ class Benchmark::Driver::Configuration < Struct.new(:jobs, :runner_options, :out
21
21
  end
22
22
 
23
23
  # @param [String] name
24
- # @param [Array<String>] command
24
+ # @param [Array<String>] command - ["ruby", "-w", ...]. First element should be path to ruby command
25
25
  Executable = Struct.new(:name, :command)
26
26
 
27
27
  DEFAULT_EXECUTABLES = [Executable.new(RUBY_VERSION, [RbConfig.ruby])]
@@ -32,7 +32,7 @@ class Benchmark::Driver::Configuration < Struct.new(:jobs, :runner_options, :out
32
32
  class RunnerOptions < Struct.new(:type, :executables, :repeat_count)
33
33
  def initialize(*)
34
34
  super
35
- self.executables = DEFAULT_EXECUTABLES
35
+ self.executables ||= DEFAULT_EXECUTABLES
36
36
  end
37
37
 
38
38
  def executables_specified?
@@ -1,5 +1,5 @@
1
1
  module Benchmark
2
2
  module Driver
3
- VERSION = '0.4.5'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benchmark_driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-05 00:00:00.000000000 Z
11
+ date: 2017-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -77,6 +77,7 @@ files:
77
77
  - exe/benchmark-driver
78
78
  - lib/benchmark/driver.rb
79
79
  - lib/benchmark/driver/benchmark_result.rb
80
+ - lib/benchmark/driver/bundle_installer.rb
80
81
  - lib/benchmark/driver/configuration.rb
81
82
  - lib/benchmark/driver/duration_runner.rb
82
83
  - lib/benchmark/driver/error.rb