paraduct 1.0.0.beta4 → 1.0.0.beta5

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
  SHA1:
3
- metadata.gz: 07807e35ce22e33ca717c280bb70742acd00949b
4
- data.tar.gz: 302097b3be4e8c2d9aee9eab2e1ecda5b0bebc18
3
+ metadata.gz: 4e5fef286eafebed9c735edbae0c76d512e38039
4
+ data.tar.gz: 42f3248d1122ac05edc444afc5539dac775fc0ef
5
5
  SHA512:
6
- metadata.gz: 91d9a6f52dbad0e290f4880d23e0de5666ab21d65a94bcf8df6c0b1f6faf90f23b0c40a3e82c702d21f7cb59e0ced5e1688975d57d32ba56049c1b13c9288656
7
- data.tar.gz: c71d31485ae44b9adcd4fabf260b3af876ed7ebd71382ba458ea488b05a2fcd15eab08a86986ef170e1f7c1c1b4a67846e47d134d7b7658996ea4dc11a2e9c30
6
+ metadata.gz: 2512753e14636f20faf4d42286aa421db999e3e62bc2f95d28166417a1b1535eb793b86a3b87e746ae5d31118389867d4fa26c5d00540b36e3298ce8b8312b2f
7
+ data.tar.gz: ed9f5e87efeb77fac57ae8e45264a2de1a84d41bc31b584ebb39fb8f5f360fa4a311ce55a4f179d63e91e26d9fff7cce5ec08037fc49f6999fe282bcfd90679c
data/.travis.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9
4
3
  - 2.0
5
4
  - 2.1
6
5
  - 2.2
data/CHANGELOG.md CHANGED
@@ -1,13 +1,21 @@
1
1
  ## master
2
2
  [full changelog](http://github.com/sue445/paraduct/compare/v0.0.3...master)
3
3
 
4
+ ### Breaking changes :bomb:
4
5
  * Stop convert key capitalize
5
6
  * https://github.com/sue445/paraduct/pull/77
7
+ * Stop support ruby 1.9
8
+ * https://github.com/sue445/paraduct/pull/87
9
+
10
+ ### Enhancements
6
11
  * Run under current directory when work_dir is empty
7
12
  * https://github.com/sue445/paraduct/pull/78
8
- * some refactorings
9
- * https://github.com/sue445/paraduct/pull/79
10
- * https://github.com/sue445/paraduct/pull/80
13
+ * Add `after_script`
14
+ * https://github.com/sue445/paraduct/pull/88
15
+
16
+ ### some refactorings
17
+ * https://github.com/sue445/paraduct/pull/79
18
+ * https://github.com/sue445/paraduct/pull/80
11
19
 
12
20
  ## v0.0.3
13
21
  [full changelog](http://github.com/sue445/paraduct/compare/v0.0.2...v0.0.3)
data/README.md CHANGED
@@ -13,7 +13,7 @@ Paraduct (**parallel** + **parameterize** + **product**) is matrix test runner
13
13
  ![architecture](img/architecture.png)
14
14
 
15
15
  ## Requirements
16
- * ruby 1.9+
16
+ * ruby 2.0+
17
17
  * rsync
18
18
 
19
19
  ## Installation
@@ -59,10 +59,12 @@ $ vi .paraduct_rsync_exclude.txt
59
59
  $ paraduct test
60
60
  ```
61
61
 
62
- ## Format
62
+ ## .paraduct.yml Format
63
63
  ```yaml
64
64
  script: |-
65
65
  echo "NAME1=${NAME1}, NAME2=${NAME2}"
66
+ after_script: |-
67
+ echo "Build is finished"
66
68
  work_dir: tmp/paraduct_workspace
67
69
  variables:
68
70
  NAME1:
@@ -82,6 +84,9 @@ exclude:
82
84
  ### script
83
85
  script to run
84
86
 
87
+ ### after_script
88
+ script to run after both `script` successful and `script` failure
89
+
85
90
  ### work_dir
86
91
  diretory to run
87
92
 
data/lib/paraduct/cli.rb CHANGED
@@ -31,7 +31,8 @@ module Paraduct
31
31
  Paraduct.logger.info "[dry-run] params: #{runner.formatted_params}"
32
32
  end
33
33
  else
34
- test_response = Paraduct::ParallelRunner.perform_all(script, product_variables)
34
+ after_script = Paraduct.config.after_script
35
+ test_response = Paraduct::ParallelRunner.perform_all(script: script, after_script: after_script, product_variables: product_variables)
35
36
  Paraduct.logger.info test_response.detail_message
36
37
  raise Paraduct::Errors::TestFailureError if test_response.failure?
37
38
  end
@@ -15,6 +15,11 @@ module Paraduct
15
15
  config_data[:script]
16
16
  end
17
17
 
18
+ # @return [String, Array<String>]
19
+ def after_script
20
+ config_data[:after_script]
21
+ end
22
+
18
23
  # @return [Integer]
19
24
  def max_threads
20
25
  config_data[:max_threads] || 4
@@ -4,9 +4,10 @@ module Paraduct
4
4
  class ParallelRunner
5
5
  # run script with arguments
6
6
  # @param script [String, Array<String>] script file, script(s)
7
+ # @param after_script [String, Array<String>] script file, script(s)
7
8
  # @param product_variables [Array<Hash{String => String}>]
8
9
  # @return [Paraduct::TestResponse]
9
- def self.perform_all(script, product_variables)
10
+ def self.perform_all(script: nil, after_script: nil, product_variables: nil)
10
11
  test_response = Paraduct::TestResponse.new
11
12
  base_job_dir = Paraduct.config.base_job_dir
12
13
  FileUtils.mkdir_p(base_job_dir) unless base_job_dir.exist?
@@ -20,7 +21,6 @@ START matrix test
20
21
  begin
21
22
  product_variables.each_with_index do |params, index|
22
23
  runner = Paraduct::Runner.new(
23
- script: script,
24
24
  params: params,
25
25
  base_job_dir: base_job_dir,
26
26
  job_id: index + 1,
@@ -28,18 +28,13 @@ START matrix test
28
28
  pool.process do
29
29
  runner.logger.info "[START] params: #{runner.formatted_params}"
30
30
  runner.setup_dir if Paraduct.config.enable_rsync?
31
- begin
32
- stdout = runner.perform
33
- successful = true
34
- rescue Paraduct::Errors::ProcessError => e
35
- runner.logger.error "exitstatus=#{e.status}, #{e.inspect}"
36
- stdout = e.message
37
- successful = false
38
31
 
39
- rescue Exception => e
40
- runner.logger.error "Unknown error: #{e.inspect}"
41
- runner.logger.error e.backtrace.join("\n")
42
- successful = false
32
+ stdout, successful = perform_runner(runner, script)
33
+
34
+ unless after_script.blank?
35
+ after_stdout, after_successful = perform_runner(runner, after_script)
36
+ stdout << after_stdout
37
+ successful &&= after_successful
43
38
  end
44
39
 
45
40
  runner.logger.info "[END] params: #{runner.formatted_params}"
@@ -61,5 +56,21 @@ START matrix test
61
56
 
62
57
  test_response
63
58
  end
59
+
60
+ private_class_method
61
+
62
+ def self.perform_runner(runner, script)
63
+ stdout = runner.perform(script)
64
+ [stdout, true]
65
+
66
+ rescue Paraduct::Errors::ProcessError => e
67
+ runner.logger.error "exitstatus=#{e.status}, #{e.inspect}"
68
+ [e.message, false]
69
+
70
+ rescue Exception => e
71
+ runner.logger.error "Unknown error: #{e.inspect}"
72
+ runner.logger.error e.backtrace.join("\n")
73
+ [nil, false]
74
+ end
64
75
  end
65
76
  end
@@ -2,17 +2,15 @@ module Paraduct
2
2
  require "pty"
3
3
 
4
4
  class Runner
5
- attr_reader :script, :params, :base_job_dir
6
-
7
- # @param args
8
- # @option args :script [String, Array<String>] script file, script(s)
9
- # @option args :params [Hash{String => String}] key is capitalized and value is quoted (ex. foo=1 => FOO="1" )
10
- # @option args :base_job_dir [String]
11
- def initialize(args={})
12
- @script = args[:script]
13
- @params = args[:params]
14
- @base_job_dir = args[:base_job_dir]
15
- @job_id = args[:job_id]
5
+ attr_reader :params, :base_job_dir
6
+
7
+ # @param params [Hash{String => String}] value is quoted (ex. FOO=1 => FOO="1" )
8
+ # @param base_job_dir [String]
9
+ # @param job_id [String]
10
+ def initialize(params: nil, base_job_dir: nil, job_id: nil)
11
+ @params = params
12
+ @base_job_dir = base_job_dir
13
+ @job_id = job_id
16
14
  end
17
15
 
18
16
  def setup_dir
@@ -22,13 +20,14 @@ module Paraduct
22
20
  end
23
21
 
24
22
  # run script with params
23
+ # @param script [String, Array<String>] script file, script(s)
25
24
  # @return [String] stdout
26
25
  # @raise [Paraduct::Errors::ProcessError] command exited error status
27
- def perform
26
+ def perform(script)
28
27
  export_variables = @params.reverse_merge("PARADUCT_JOB_ID" => @job_id, "PARADUCT_JOB_NAME" => job_name)
29
28
  variable_string = export_variables.map{ |key, value| %(export #{key}="#{value}";) }.join(" ")
30
29
 
31
- Array.wrap(@script).inject("") do |stdout, command|
30
+ Array.wrap(script).inject("") do |stdout, command|
32
31
  stdout << run_command("#{variable_string} #{command}")
33
32
  stdout
34
33
  end
@@ -1,5 +1,7 @@
1
1
  script: |-
2
2
  echo "NAME1=${NAME1}, NAME2=${NAME2}"
3
+ after_script: |-
4
+ echo "Build is finished"
3
5
  work_dir: tmp/paraduct_workspace
4
6
  variables:
5
7
  NAME1:
@@ -1,3 +1,3 @@
1
1
  module Paraduct
2
- VERSION = "1.0.0.beta4"
2
+ VERSION = "1.0.0.beta5"
3
3
  end
data/paraduct.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
+ spec.required_ruby_version = ">= 2.0.0"
20
21
 
21
22
  spec.add_dependency "activesupport", "~> 4.0"
22
23
  spec.add_dependency "colorize"
@@ -27,7 +28,7 @@ Gem::Specification.new do |spec|
27
28
  spec.add_development_dependency "bundler", ">= 1.5"
28
29
  spec.add_development_dependency "codeclimate-test-reporter"
29
30
  spec.add_development_dependency "coveralls"
30
- spec.add_development_dependency "pry"
31
+ spec.add_development_dependency "pry-byebug"
31
32
  spec.add_development_dependency "rake", "~> 10.0"
32
33
  spec.add_development_dependency "redcarpet"
33
34
  spec.add_development_dependency "rspec", "~> 3.4"
@@ -35,9 +36,4 @@ Gem::Specification.new do |spec|
35
36
  spec.add_development_dependency "rspec-its"
36
37
  spec.add_development_dependency "rspec-temp_dir"
37
38
  spec.add_development_dependency "yard"
38
-
39
- if RUBY_VERSION.to_i >= 2
40
- # NOTE: pry-byebug doesn't support ruby 1.9
41
- spec.add_development_dependency "pry-byebug"
42
- end
43
39
  end
data/spec/.paraduct.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  script: ./script/build_success.sh
2
+ after_acript: ./script/build_finish.sh
2
3
  work_dir: tmp/paraduct_workspace
3
4
  variables:
4
5
  RUBY:
@@ -24,6 +24,7 @@ describe Paraduct::CLI do
24
24
  let(:config_data) do
25
25
  {
26
26
  script: "./script/build_success.sh",
27
+ after_script: "./script/build_finish.sh",
27
28
  work_dir: "tmp/paraduct_workspace",
28
29
  variables: {
29
30
  "RUBY" => ["1.9.3", "2.0.0"],
@@ -33,6 +34,7 @@ describe Paraduct::CLI do
33
34
  end
34
35
 
35
36
  let(:script){ "./script/build_success.sh" }
37
+ let(:after_script){ "./script/build_finish.sh" }
36
38
  let(:product_variables) do
37
39
  [
38
40
  { "RUBY" => "1.9.3", "DATABASE" => "mysql" },
@@ -49,7 +51,8 @@ describe Paraduct::CLI do
49
51
  end
50
52
 
51
53
  it "should call perform_all" do
52
- expect(Paraduct::ParallelRunner).to receive(:perform_all).with(script, product_variables){ test_response }
54
+ expect(Paraduct::ParallelRunner).to receive(:perform_all).
55
+ with(script: script, after_script: after_script, product_variables: product_variables){ test_response }
53
56
  subject
54
57
  end
55
58
  end
@@ -1,6 +1,6 @@
1
1
  describe Paraduct::ParallelRunner do
2
2
  describe "#perform_all" do
3
- subject{ Paraduct::ParallelRunner.perform_all(script, product_variables) }
3
+ subject{ Paraduct::ParallelRunner.perform_all(script: script, product_variables: product_variables, after_script: after_script) }
4
4
 
5
5
  include_context :within_temp_work_dir
6
6
 
@@ -26,6 +26,7 @@ describe Paraduct::ParallelRunner do
26
26
 
27
27
  describe "with script file test" do
28
28
  let(:script){ "./script/build_success.sh" }
29
+ let(:after_script) { "./script/build_finish.sh" }
29
30
  let(:product_variables) do
30
31
  [
31
32
  { "RUBY" => "1.9", "DATABASE" => "mysql" },
@@ -39,7 +40,7 @@ describe Paraduct::ParallelRunner do
39
40
  params: { "RUBY" => "1.9", "DATABASE" => "mysql" },
40
41
  formatted_params: "RUBY=1.9, DATABASE=mysql",
41
42
  successful: true,
42
- stdout: "RUBY=1.9\nDATABASE=mysql\n"
43
+ stdout: "RUBY=1.9\nDATABASE=mysql\nFinish: RUBY=1.9, DATABASE=mysql\n"
43
44
  )
44
45
  end
45
46
 
@@ -49,7 +50,7 @@ describe Paraduct::ParallelRunner do
49
50
  params: { "RUBY" => "2.0", "DATABASE" => "postgresql" },
50
51
  formatted_params: "RUBY=2.0, DATABASE=postgresql",
51
52
  successful: true,
52
- stdout: "RUBY=2.0\nDATABASE=postgresql\n"
53
+ stdout: "RUBY=2.0\nDATABASE=postgresql\nFinish: RUBY=2.0, DATABASE=postgresql\n"
53
54
  )
54
55
  end
55
56
 
@@ -98,6 +99,7 @@ describe Paraduct::ParallelRunner do
98
99
 
99
100
  describe "without script file test" do
100
101
  let(:script){ %q(echo "RUBY=${RUBY} DATABASE=${DATABASE}") }
102
+ let(:after_script) { %q(echo "Finish: RUBY=${RUBY}, DATABASE=${DATABASE}") }
101
103
  let(:product_variables) do
102
104
  [
103
105
  { "RUBY" => "1.9", "DATABASE" => "mysql" },
@@ -111,7 +113,7 @@ describe Paraduct::ParallelRunner do
111
113
  params: { "RUBY" => "1.9", "DATABASE" => "mysql" },
112
114
  formatted_params: "RUBY=1.9, DATABASE=mysql",
113
115
  successful: true,
114
- stdout: "RUBY=1.9 DATABASE=mysql\n"
116
+ stdout: "RUBY=1.9 DATABASE=mysql\nFinish: RUBY=1.9, DATABASE=mysql\n"
115
117
  )
116
118
  end
117
119
 
@@ -121,7 +123,7 @@ describe Paraduct::ParallelRunner do
121
123
  params: { "RUBY" => "2.0", "DATABASE" => "postgresql" },
122
124
  formatted_params: "RUBY=2.0, DATABASE=postgresql",
123
125
  successful: true,
124
- stdout: "RUBY=2.0 DATABASE=postgresql\n"
126
+ stdout: "RUBY=2.0 DATABASE=postgresql\nFinish: RUBY=2.0, DATABASE=postgresql\n"
125
127
  )
126
128
  end
127
129
 
@@ -1,7 +1,6 @@
1
1
  describe Paraduct::Runner do
2
2
  let(:runner) do
3
3
  Paraduct::Runner.new(
4
- script: script,
5
4
  params: params,
6
5
  base_job_dir: base_job_dir,
7
6
  job_id: job_id,
@@ -11,12 +10,11 @@ describe Paraduct::Runner do
11
10
  include_context "uses temp dir"
12
11
 
13
12
  let(:base_job_dir){ temp_dir }
14
- let(:script) { "" }
15
13
  let(:params) { {} }
16
14
  let(:job_id) { 1 }
17
15
 
18
16
  describe "#perform" do
19
- subject{ runner.perform }
17
+ subject{ runner.perform(script) }
20
18
 
21
19
  let(:script) { "./script/build_success.sh" }
22
20
  let(:params) { { "RUBY" => "1.9", "DATABASE" => "mysql" } }
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo "Finish: RUBY=${RUBY}, DATABASE=${DATABASE}"
data/spec/spec_helper.rb CHANGED
@@ -125,7 +125,7 @@ RSpec.configure do |config|
125
125
  config.before do
126
126
  unless is_verbose
127
127
  # quiet all logs
128
- Paraduct::ColoredLabelLogger::SEVERITIES.each do |severity|
128
+ [:debug, :info, :warn, :error, :fatal].each do |severity|
129
129
  allow(Paraduct.logger).to receive(severity)
130
130
  allow_any_instance_of(Paraduct::ColoredLabelLogger).to receive(severity)
131
131
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paraduct
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta4
4
+ version: 1.0.0.beta5
5
5
  platform: ruby
6
6
  authors:
7
7
  - sue445
@@ -123,7 +123,7 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: pry
126
+ name: pry-byebug
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -234,20 +234,6 @@ dependencies:
234
234
  - - ">="
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
- - !ruby/object:Gem::Dependency
238
- name: pry-byebug
239
- requirement: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - ">="
242
- - !ruby/object:Gem::Version
243
- version: '0'
244
- type: :development
245
- prerelease: false
246
- version_requirements: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - ">="
249
- - !ruby/object:Gem::Version
250
- version: '0'
251
237
  description: Paraduct(parallel + parameterize + product) is matrix test runner
252
238
  email:
253
239
  - sue445@sue445.net
@@ -295,6 +281,7 @@ files:
295
281
  - spec/paraduct/variable_converter_spec.rb
296
282
  - spec/paraduct_spec.rb
297
283
  - spec/script/build_error.sh
284
+ - spec/script/build_finish.sh
298
285
  - spec/script/build_success.sh
299
286
  - spec/script/tmp/paraduct_workspace/dummy.txt
300
287
  - spec/spec_helper.rb
@@ -315,7 +302,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
315
302
  requirements:
316
303
  - - ">="
317
304
  - !ruby/object:Gem::Version
318
- version: '0'
305
+ version: 2.0.0
319
306
  required_rubygems_version: !ruby/object:Gem::Requirement
320
307
  requirements:
321
308
  - - ">"
@@ -340,6 +327,7 @@ test_files:
340
327
  - spec/paraduct/variable_converter_spec.rb
341
328
  - spec/paraduct_spec.rb
342
329
  - spec/script/build_error.sh
330
+ - spec/script/build_finish.sh
343
331
  - spec/script/build_success.sh
344
332
  - spec/script/tmp/paraduct_workspace/dummy.txt
345
333
  - spec/spec_helper.rb