paraduct 1.0.0.beta4 → 1.0.0.beta5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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