childprocess 0.8.0 → 2.0.0

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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/.document +6 -6
  3. data/.gitignore +28 -28
  4. data/.rspec +1 -1
  5. data/.travis.yml +42 -36
  6. data/CHANGELOG.md +67 -44
  7. data/Gemfile +18 -15
  8. data/LICENSE +20 -20
  9. data/README.md +216 -192
  10. data/Rakefile +61 -61
  11. data/appveyor.yml +42 -43
  12. data/childprocess.gemspec +32 -30
  13. data/ext/mkrf_conf.rb +24 -0
  14. data/lib/childprocess/abstract_io.rb +36 -36
  15. data/lib/childprocess/abstract_process.rb +192 -192
  16. data/lib/childprocess/errors.rb +37 -26
  17. data/lib/childprocess/jruby/io.rb +16 -16
  18. data/lib/childprocess/jruby/process.rb +184 -159
  19. data/lib/childprocess/jruby/pump.rb +53 -53
  20. data/lib/childprocess/jruby.rb +56 -56
  21. data/lib/childprocess/tools/generator.rb +145 -145
  22. data/lib/childprocess/unix/fork_exec_process.rb +78 -70
  23. data/lib/childprocess/unix/io.rb +21 -21
  24. data/lib/childprocess/unix/lib.rb +186 -186
  25. data/lib/childprocess/unix/platform/i386-linux.rb +12 -12
  26. data/lib/childprocess/unix/platform/i386-solaris.rb +11 -11
  27. data/lib/childprocess/unix/platform/x86_64-linux.rb +12 -12
  28. data/lib/childprocess/unix/platform/x86_64-macosx.rb +11 -11
  29. data/lib/childprocess/unix/posix_spawn_process.rb +134 -134
  30. data/lib/childprocess/unix/process.rb +90 -89
  31. data/lib/childprocess/unix.rb +9 -9
  32. data/lib/childprocess/version.rb +3 -3
  33. data/lib/childprocess/windows/handle.rb +91 -91
  34. data/lib/childprocess/windows/io.rb +25 -25
  35. data/lib/childprocess/windows/lib.rb +416 -416
  36. data/lib/childprocess/windows/process.rb +130 -130
  37. data/lib/childprocess/windows/process_builder.rb +178 -175
  38. data/lib/childprocess/windows/structs.rb +148 -148
  39. data/lib/childprocess/windows.rb +33 -33
  40. data/lib/childprocess.rb +210 -205
  41. data/spec/abstract_io_spec.rb +12 -12
  42. data/spec/childprocess_spec.rb +447 -391
  43. data/spec/get_env.ps1 +13 -0
  44. data/spec/io_spec.rb +228 -228
  45. data/spec/jruby_spec.rb +24 -24
  46. data/spec/pid_behavior.rb +12 -12
  47. data/spec/platform_detection_spec.rb +86 -86
  48. data/spec/spec_helper.rb +270 -261
  49. data/spec/unix_spec.rb +57 -57
  50. data/spec/windows_spec.rb +23 -23
  51. metadata +18 -33
data/README.md CHANGED
@@ -1,192 +1,216 @@
1
- # childprocess
2
-
3
- This gem aims at being a simple and reliable solution for controlling
4
- external programs running in the background on any Ruby / OS combination.
5
-
6
- The code originated in the [selenium-webdriver](https://rubygems.org/gems/selenium-webdriver) gem, but should prove useful as
7
- a standalone library.
8
-
9
- [![Build Status](https://secure.travis-ci.org/enkessler/childprocess.svg)](http://travis-ci.org/enkessler/childprocess)
10
- [![Build status](https://ci.appveyor.com/api/projects/status/fn2snbcd7kku5myk/branch/dev?svg=true)](https://ci.appveyor.com/project/enkessler/childprocess/branch/dev)
11
- [![Gem Version](https://badge.fury.io/rb/childprocess.svg)](http://badge.fury.io/rb/childprocess)
12
- [![Code Climate](https://codeclimate.com/github/enkessler/childprocess.svg)](https://codeclimate.com/github/enkessler/childprocess)
13
- [![Coverage Status](https://coveralls.io/repos/enkessler/childprocess/badge.svg?branch=master)](https://coveralls.io/r/enkessler/childprocess?branch=master)
14
-
15
- # Usage
16
-
17
- The object returned from `ChildProcess.build` will implement `ChildProcess::AbstractProcess`.
18
-
19
- ### Basic examples
20
-
21
- ```ruby
22
- process = ChildProcess.build("ruby", "-e", "sleep")
23
-
24
- # inherit stdout/stderr from parent...
25
- process.io.inherit!
26
-
27
- # ...or pass an IO
28
- process.io.stdout = Tempfile.new("child-output")
29
-
30
- # modify the environment for the child
31
- process.environment["a"] = "b"
32
- process.environment["c"] = nil
33
-
34
- # set the child's working directory
35
- process.cwd = '/some/path'
36
-
37
- # start the process
38
- process.start
39
-
40
- # check process status
41
- process.alive? #=> true
42
- process.exited? #=> false
43
-
44
- # wait indefinitely for process to exit...
45
- process.wait
46
- process.exited? #=> true
47
-
48
- # get the exit code
49
- process.exit_code #=> 0
50
-
51
- # ...or poll for exit + force quit
52
- begin
53
- process.poll_for_exit(10)
54
- rescue ChildProcess::TimeoutError
55
- process.stop # tries increasingly harsher methods to kill the process.
56
- end
57
- ```
58
-
59
- ### Advanced examples
60
-
61
- #### Output to pipe
62
-
63
- ```ruby
64
- r, w = IO.pipe
65
-
66
- proc = ChildProcess.build("echo", "foo")
67
- proc.io.stdout = proc.io.stderr = w
68
- proc.start
69
- w.close
70
-
71
- begin
72
- loop { print r.readpartial(8192) }
73
- rescue EOFError
74
- end
75
-
76
- proc.wait
77
- ```
78
-
79
- Note that if you just want to get the output of a command, the backtick method on Kernel may be a better fit.
80
-
81
- #### Write to stdin
82
-
83
- ```ruby
84
- process = ChildProcess.build("cat")
85
-
86
- out = Tempfile.new("duplex")
87
- out.sync = true
88
-
89
- process.io.stdout = process.io.stderr = out
90
- process.duplex = true # sets up pipe so process.io.stdin will be available after .start
91
-
92
- process.start
93
- process.io.stdin.puts "hello world"
94
- process.io.stdin.close
95
-
96
- process.poll_for_exit(exit_timeout_in_seconds)
97
-
98
- out.rewind
99
- out.read #=> "hello world\n"
100
- ```
101
-
102
- #### Pipe output to another ChildProcess
103
-
104
- ```ruby
105
- search = ChildProcess.build("grep", '-E', %w(redis memcached).join('|'))
106
- search.duplex = true # sets up pipe so search.io.stdin will be available after .start
107
- search.io.stdout = $stdout
108
- search.start
109
-
110
- listing = ChildProcess.build("ps", "aux")
111
- listing.io.stdout = search.io.stdin
112
- listing.start
113
- listing.wait
114
-
115
- search.io.stdin.close
116
- search.wait
117
- ```
118
-
119
- #### Prefer posix_spawn on *nix
120
-
121
- If the parent process is using a lot of memory, `fork+exec` can be very expensive. The `posix_spawn()` API removes this overhead.
122
-
123
- ```ruby
124
- ChildProcess.posix_spawn = true
125
- process = ChildProcess.build(*args)
126
- ```
127
-
128
- ### Ensure entire process tree dies
129
-
130
- By default, the child process does not create a new process group. This means there's no guarantee that the entire process tree will die when the child process is killed. To solve this:
131
-
132
- ```ruby
133
- process = ChildProcess.build(*args)
134
- process.leader = true
135
- process.start
136
- ```
137
-
138
- #### Detach from parent
139
-
140
- ```ruby
141
- process = ChildProcess.build("sleep", "10")
142
- process.detach = true
143
- process.start
144
- ```
145
-
146
- #### Invoking a shell
147
-
148
- As opposed to `Kernel#system`, `Kernel#exec` et al., ChildProcess will not automatically execute your command in a shell (like `/bin/sh` or `cmd.exe`) depending on the arguments.
149
- This means that if you try to execute e.g. gem executables (like `bundle` or `gem`) or Windows executables (with `.com` or `.bat` extensions) you may see a `ChildProcess::LaunchError`.
150
- You can work around this by being explicit about what interpreter to invoke:
151
-
152
- ```ruby
153
- ChildProcess.build("cmd.exe", "/c", "bundle")
154
- ChildProcess.build("ruby", "-S", "bundle")
155
- ```
156
-
157
- #### Log to file
158
-
159
- Errors and debugging information are logged to `$stderr` by default but a custom logger can be used instead.
160
-
161
- ```ruby
162
- logger = Logger.new('logfile.log')
163
- logger.level = Logger::DEBUG
164
- ChildProcess.logger = logger
165
- ```
166
-
167
- ## Caveats
168
-
169
- * With JRuby on Unix, modifying `ENV["PATH"]` before using childprocess could lead to 'Command not found' errors, since JRuby is unable to modify the environemnt used for PATH searches in `java.lang.ProcessBuilder`. This can be avoided by setting `ChildProcess.posix_spawn = true`.
170
-
171
- # Implementation
172
-
173
- How the process is launched and killed depends on the platform:
174
-
175
- * Unix : `fork + exec` (or `posix_spawn` if enabled)
176
- * Windows : `CreateProcess()` and friends
177
- * JRuby : `java.lang.{Process,ProcessBuilder}`
178
-
179
- # Note on Patches/Pull Requests
180
-
181
- 1. Fork it
182
- 2. Create your feature branch (off of the development branch)
183
- `git checkout -b my-new-feature dev`
184
- 3. Commit your changes
185
- `git commit -am 'Add some feature'`
186
- 4. Push to the branch
187
- `git push origin my-new-feature`
188
- 5. Create new Pull Request
189
-
190
- # Copyright
191
-
192
- Copyright (c) 2010-2015 Jari Bakken. See LICENSE for details.
1
+ # childprocess
2
+
3
+ This gem aims at being a simple and reliable solution for controlling
4
+ external programs running in the background on any Ruby / OS combination.
5
+
6
+ The code originated in the [selenium-webdriver](https://rubygems.org/gems/selenium-webdriver) gem, but should prove useful as
7
+ a standalone library.
8
+
9
+ [![Build Status](https://secure.travis-ci.org/enkessler/childprocess.svg)](http://travis-ci.org/enkessler/childprocess)
10
+ [![Build status](https://ci.appveyor.com/api/projects/status/fn2snbcd7kku5myk/branch/dev?svg=true)](https://ci.appveyor.com/project/enkessler/childprocess/branch/dev)
11
+ [![Gem Version](https://badge.fury.io/rb/childprocess.svg)](http://badge.fury.io/rb/childprocess)
12
+ [![Code Climate](https://codeclimate.com/github/enkessler/childprocess.svg)](https://codeclimate.com/github/enkessler/childprocess)
13
+ [![Coverage Status](https://coveralls.io/repos/enkessler/childprocess/badge.svg?branch=master)](https://coveralls.io/r/enkessler/childprocess?branch=master)
14
+
15
+ # Requirements
16
+
17
+ * Ruby 2.3+, JRuby 9+
18
+
19
+ # Usage
20
+
21
+ The object returned from `ChildProcess.build` will implement `ChildProcess::AbstractProcess`.
22
+
23
+ ### Basic examples
24
+
25
+ ```ruby
26
+ process = ChildProcess.build("ruby", "-e", "sleep")
27
+
28
+ # inherit stdout/stderr from parent...
29
+ process.io.inherit!
30
+
31
+ # ...or pass an IO
32
+ process.io.stdout = Tempfile.new("child-output")
33
+
34
+ # modify the environment for the child
35
+ process.environment["a"] = "b"
36
+ process.environment["c"] = nil
37
+
38
+ # set the child's working directory
39
+ process.cwd = '/some/path'
40
+
41
+ # start the process
42
+ process.start
43
+
44
+ # check process status
45
+ process.alive? #=> true
46
+ process.exited? #=> false
47
+
48
+ # wait indefinitely for process to exit...
49
+ process.wait
50
+ process.exited? #=> true
51
+
52
+ # get the exit code
53
+ process.exit_code #=> 0
54
+
55
+ # ...or poll for exit + force quit
56
+ begin
57
+ process.poll_for_exit(10)
58
+ rescue ChildProcess::TimeoutError
59
+ process.stop # tries increasingly harsher methods to kill the process.
60
+ end
61
+ ```
62
+
63
+ ### Advanced examples
64
+
65
+ #### Output to pipe
66
+
67
+ ```ruby
68
+ r, w = IO.pipe
69
+
70
+ proc = ChildProcess.build("echo", "foo")
71
+ proc.io.stdout = proc.io.stderr = w
72
+ proc.start
73
+
74
+ Thread.new {
75
+ begin
76
+ loop do
77
+ print r.readpartial(8192)
78
+ end
79
+ rescue EOFError
80
+ end
81
+ }
82
+
83
+ proc.wait
84
+ w.close
85
+ ```
86
+
87
+ Note that if you just want to get the output of a command, the backtick method on Kernel may be a better fit.
88
+
89
+ #### Write to stdin
90
+
91
+ ```ruby
92
+ process = ChildProcess.build("cat")
93
+
94
+ out = Tempfile.new("duplex")
95
+ out.sync = true
96
+
97
+ process.io.stdout = process.io.stderr = out
98
+ process.duplex = true # sets up pipe so process.io.stdin will be available after .start
99
+
100
+ process.start
101
+ process.io.stdin.puts "hello world"
102
+ process.io.stdin.close
103
+
104
+ process.poll_for_exit(exit_timeout_in_seconds)
105
+
106
+ out.rewind
107
+ out.read #=> "hello world\n"
108
+ ```
109
+
110
+ #### Pipe output to another ChildProcess
111
+
112
+ ```ruby
113
+ search = ChildProcess.build("grep", '-E', %w(redis memcached).join('|'))
114
+ search.duplex = true # sets up pipe so search.io.stdin will be available after .start
115
+ search.io.stdout = $stdout
116
+ search.start
117
+
118
+ listing = ChildProcess.build("ps", "aux")
119
+ listing.io.stdout = search.io.stdin
120
+ listing.start
121
+ listing.wait
122
+
123
+ search.io.stdin.close
124
+ search.wait
125
+ ```
126
+
127
+ #### Prefer posix_spawn on *nix
128
+
129
+ If the parent process is using a lot of memory, `fork+exec` can be very expensive. The `posix_spawn()` API removes this overhead.
130
+
131
+ ```ruby
132
+ ChildProcess.posix_spawn = true
133
+ process = ChildProcess.build(*args)
134
+ ```
135
+
136
+ To be able to use this, please make sure that you have the `ffi` gem installed.
137
+
138
+ ### Ensure entire process tree dies
139
+
140
+ By default, the child process does not create a new process group. This means there's no guarantee that the entire process tree will die when the child process is killed. To solve this:
141
+
142
+ ```ruby
143
+ process = ChildProcess.build(*args)
144
+ process.leader = true
145
+ process.start
146
+ ```
147
+
148
+ #### Detach from parent
149
+
150
+ ```ruby
151
+ process = ChildProcess.build("sleep", "10")
152
+ process.detach = true
153
+ process.start
154
+ ```
155
+
156
+ #### Invoking a shell
157
+
158
+ As opposed to `Kernel#system`, `Kernel#exec` et al., ChildProcess will not automatically execute your command in a shell (like `/bin/sh` or `cmd.exe`) depending on the arguments.
159
+ This means that if you try to execute e.g. gem executables (like `bundle` or `gem`) or Windows executables (with `.com` or `.bat` extensions) you may see a `ChildProcess::LaunchError`.
160
+ You can work around this by being explicit about what interpreter to invoke:
161
+
162
+ ```ruby
163
+ ChildProcess.build("cmd.exe", "/c", "bundle")
164
+ ChildProcess.build("ruby", "-S", "bundle")
165
+ ```
166
+
167
+ #### Log to file
168
+
169
+ Errors and debugging information are logged to `$stderr` by default but a custom logger can be used instead.
170
+
171
+ ```ruby
172
+ logger = Logger.new('logfile.log')
173
+ logger.level = Logger::DEBUG
174
+ ChildProcess.logger = logger
175
+ ```
176
+
177
+ ## Caveats
178
+
179
+ * With JRuby on Unix, modifying `ENV["PATH"]` before using childprocess could lead to 'Command not found' errors, since JRuby is unable to modify the environment used for PATH searches in `java.lang.ProcessBuilder`. This can be avoided by setting `ChildProcess.posix_spawn = true`.
180
+ * With JRuby on Java >= 9, the JVM may need to be configured to allow JRuby to access neccessary implementations; this can be done by adding `--add-opens java.base/java.io=org.jruby.dist` and `--add-opens java.base/sun.nio.ch=org.jruby.dist` to the `JAVA_OPTS` environment variable that is used by JRuby when launching the JVM.
181
+
182
+ # Implementation
183
+
184
+ How the process is launched and killed depends on the platform:
185
+
186
+ * Unix : `fork + exec` (or `posix_spawn` if enabled)
187
+ * Windows : `CreateProcess()` and friends
188
+ * JRuby : `java.lang.{Process,ProcessBuilder}`
189
+
190
+ # Note on Patches/Pull Requests
191
+
192
+ 1. Fork it
193
+ 2. Create your feature branch (off of the development branch)
194
+ `git checkout -b my-new-feature dev`
195
+ 3. Commit your changes
196
+ `git commit -am 'Add some feature'`
197
+ 4. Push to the branch
198
+ `git push origin my-new-feature`
199
+ 5. Create new Pull Request
200
+
201
+ # Publishing a New Release
202
+
203
+ When publishing a new gem release:
204
+
205
+ 1. Ensure [latest build is green on the `dev` branch](https://travis-ci.org/enkessler/childprocess/branches)
206
+ 2. Ensure [CHANGELOG](CHANGELOG.md) is updated
207
+ 3. Ensure [version is bumped](lib/childprocess/version.rb) following [Semantic Versioning](https://semver.org/)
208
+ 4. Merge the `dev` branch into `master`: `git checkout master && git merge dev`
209
+ 5. Ensure [latest build is green on the `master` branch](https://travis-ci.org/enkessler/childprocess/branches)
210
+ 6. Build gem from the green `master` branch: `git checkout master && gem build childprocess.gemspec`
211
+ 7. Push gem to RubyGems: `gem push childprocess-<VERSION>.gem`
212
+ 8. Tag commit with version, annotated with release notes: `git tag -a <VERSION>`
213
+
214
+ # Copyright
215
+
216
+ Copyright (c) 2010-2015 Jari Bakken. See [LICENSE](LICENSE) for details.
data/Rakefile CHANGED
@@ -1,61 +1,61 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'tmpdir'
4
-
5
- require 'bundler'
6
- Bundler::GemHelper.install_tasks
7
-
8
- include Rake::DSL if defined?(::Rake::DSL)
9
-
10
- require 'rspec/core/rake_task'
11
- RSpec::Core::RakeTask.new(:spec) do |spec|
12
- spec.ruby_opts = "-I lib:spec -w"
13
- spec.pattern = 'spec/**/*_spec.rb'
14
- end
15
-
16
- desc 'Run specs for rcov'
17
- RSpec::Core::RakeTask.new(:rcov) do |spec|
18
- spec.ruby_opts = "-I lib:spec"
19
- spec.pattern = 'spec/**/*_spec.rb'
20
- spec.rcov = true
21
- spec.rcov_opts = %w[--exclude spec,ruby-debug,/Library/Ruby,.gem --include lib/childprocess]
22
- end
23
-
24
- task :default => :spec
25
-
26
- begin
27
- require 'yard'
28
- YARD::Rake::YardocTask.new
29
- rescue LoadError
30
- task :yardoc do
31
- abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
32
- end
33
- end
34
-
35
- task :clean do
36
- rm_rf "pkg"
37
- rm_rf "childprocess.jar"
38
- end
39
-
40
- desc 'Create jar to bundle in selenium-webdriver'
41
- task :jar => [:clean, :build] do
42
- tmpdir = Dir.mktmpdir("childprocess-jar")
43
- gem_to_package = Dir['pkg/*.gem'].first
44
- gem_name = File.basename(gem_to_package, ".gem")
45
- p :gem_to_package => gem_to_package, :gem_name => gem_name
46
-
47
- sh "gem install -i #{tmpdir} #{gem_to_package} --ignore-dependencies --no-rdoc --no-ri"
48
- sh "jar cf childprocess.jar -C #{tmpdir}/gems/#{gem_name}/lib ."
49
- sh "jar tf childprocess.jar"
50
- end
51
-
52
- task :env do
53
- $:.unshift File.expand_path("../lib", __FILE__)
54
- require 'childprocess'
55
- end
56
-
57
- desc 'Calculate size of posix_spawn structs for the current platform'
58
- task :generate => :env do
59
- require 'childprocess/tools/generator'
60
- ChildProcess::Tools::Generator.generate
61
- end
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'tmpdir'
4
+
5
+ require 'bundler'
6
+ Bundler::GemHelper.install_tasks
7
+
8
+ include Rake::DSL if defined?(::Rake::DSL)
9
+
10
+ require 'rspec/core/rake_task'
11
+ RSpec::Core::RakeTask.new(:spec) do |spec|
12
+ spec.ruby_opts = "-I lib:spec -w"
13
+ spec.pattern = 'spec/**/*_spec.rb'
14
+ end
15
+
16
+ desc 'Run specs for rcov'
17
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
18
+ spec.ruby_opts = "-I lib:spec"
19
+ spec.pattern = 'spec/**/*_spec.rb'
20
+ spec.rcov = true
21
+ spec.rcov_opts = %w[--exclude spec,ruby-debug,/Library/Ruby,.gem --include lib/childprocess]
22
+ end
23
+
24
+ task :default => :spec
25
+
26
+ begin
27
+ require 'yard'
28
+ YARD::Rake::YardocTask.new
29
+ rescue LoadError
30
+ task :yardoc do
31
+ abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
32
+ end
33
+ end
34
+
35
+ task :clean do
36
+ rm_rf "pkg"
37
+ rm_rf "childprocess.jar"
38
+ end
39
+
40
+ desc 'Create jar to bundle in selenium-webdriver'
41
+ task :jar => [:clean, :build] do
42
+ tmpdir = Dir.mktmpdir("childprocess-jar")
43
+ gem_to_package = Dir['pkg/*.gem'].first
44
+ gem_name = File.basename(gem_to_package, ".gem")
45
+ p :gem_to_package => gem_to_package, :gem_name => gem_name
46
+
47
+ sh "gem install -i #{tmpdir} #{gem_to_package} --ignore-dependencies --no-rdoc --no-ri"
48
+ sh "jar cf childprocess.jar -C #{tmpdir}/gems/#{gem_name}/lib ."
49
+ sh "jar tf childprocess.jar"
50
+ end
51
+
52
+ task :env do
53
+ $:.unshift File.expand_path("../lib", __FILE__)
54
+ require 'childprocess'
55
+ end
56
+
57
+ desc 'Calculate size of posix_spawn structs for the current platform'
58
+ task :generate => :env do
59
+ require 'childprocess/tools/generator'
60
+ ChildProcess::Tools::Generator.generate
61
+ end
data/appveyor.yml CHANGED
@@ -1,43 +1,42 @@
1
- version: '1.0.{build}'
2
-
3
- environment:
4
- matrix:
5
- - CHILDPROCESS_POSIX_SPAWN: true
6
- CHILDPROCESS_UNSET: should-be-unset
7
- RUBY_VERSION: 193-x64
8
- - CHILDPROCESS_POSIX_SPAWN: false
9
- CHILDPROCESS_UNSET: should-be-unset
10
- RUBY_VERSION: 193-x64
11
- - CHILDPROCESS_POSIX_SPAWN: true
12
- CHILDPROCESS_UNSET: should-be-unset
13
- RUBY_VERSION: 200-x64
14
- - CHILDPROCESS_POSIX_SPAWN: false
15
- CHILDPROCESS_UNSET: should-be-unset
16
- RUBY_VERSION: 200-x64
17
- - CHILDPROCESS_POSIX_SPAWN: true
18
- CHILDPROCESS_UNSET: should-be-unset
19
- RUBY_VERSION: 21-x64
20
- - CHILDPROCESS_POSIX_SPAWN: false
21
- CHILDPROCESS_UNSET: should-be-unset
22
- RUBY_VERSION: 21-x64
23
- - CHILDPROCESS_POSIX_SPAWN: true
24
- CHILDPROCESS_UNSET: should-be-unset
25
- RUBY_VERSION: 22-x64
26
- - CHILDPROCESS_POSIX_SPAWN: false
27
- CHILDPROCESS_UNSET: should-be-unset
28
- RUBY_VERSION: 22-x64
29
-
30
-
31
- install:
32
- - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
33
- - bundle install
34
-
35
- build: off
36
-
37
- before_test:
38
- - ruby -v
39
- - gem -v
40
- - bundle -v
41
-
42
- test_script:
43
- - bundle exec rake
1
+ version: '1.0.{build}'
2
+
3
+ environment:
4
+ matrix:
5
+ - CHILDPROCESS_POSIX_SPAWN: true
6
+ CHILDPROCESS_UNSET: should-be-unset
7
+ RUBY_VERSION: 23-x64
8
+ - CHILDPROCESS_POSIX_SPAWN: false
9
+ CHILDPROCESS_UNSET: should-be-unset
10
+ RUBY_VERSION: 23-x64
11
+ - CHILDPROCESS_POSIX_SPAWN: true
12
+ CHILDPROCESS_UNSET: should-be-unset
13
+ RUBY_VERSION: 24-x64
14
+ - CHILDPROCESS_POSIX_SPAWN: false
15
+ CHILDPROCESS_UNSET: should-be-unset
16
+ RUBY_VERSION: 24-x64
17
+ - CHILDPROCESS_POSIX_SPAWN: true
18
+ CHILDPROCESS_UNSET: should-be-unset
19
+ RUBY_VERSION: 25-x64
20
+ - CHILDPROCESS_POSIX_SPAWN: false
21
+ CHILDPROCESS_UNSET: should-be-unset
22
+ RUBY_VERSION: 25-x64
23
+ - CHILDPROCESS_POSIX_SPAWN: true
24
+ CHILDPROCESS_UNSET: should-be-unset
25
+ RUBY_VERSION: 26-x64
26
+ - CHILDPROCESS_POSIX_SPAWN: false
27
+ CHILDPROCESS_UNSET: should-be-unset
28
+ RUBY_VERSION: 26-x64
29
+
30
+ install:
31
+ - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
32
+ - bundle install
33
+
34
+ build: off
35
+
36
+ before_test:
37
+ - ruby -v
38
+ - gem -v
39
+ - bundle -v
40
+
41
+ test_script:
42
+ - bundle exec rake