childprocess 0.9.0 → 4.1.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 +37 -44
  6. data/CHANGELOG.md +83 -49
  7. data/Gemfile +9 -15
  8. data/LICENSE +20 -20
  9. data/README.md +230 -196
  10. data/Rakefile +61 -61
  11. data/appveyor.yml +36 -60
  12. data/childprocess.gemspec +26 -30
  13. data/lib/childprocess/abstract_io.rb +36 -36
  14. data/lib/childprocess/abstract_process.rb +192 -192
  15. data/lib/childprocess/errors.rb +37 -26
  16. data/lib/childprocess/jruby/io.rb +16 -16
  17. data/lib/childprocess/jruby/process.rb +184 -159
  18. data/lib/childprocess/jruby/pump.rb +53 -53
  19. data/lib/childprocess/jruby.rb +56 -56
  20. data/lib/childprocess/tools/generator.rb +145 -145
  21. data/lib/childprocess/unix/fork_exec_process.rb +78 -70
  22. data/lib/childprocess/unix/io.rb +21 -21
  23. data/lib/childprocess/unix/lib.rb +186 -186
  24. data/lib/childprocess/unix/platform/arm64-macosx.rb +11 -0
  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 +131 -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 +38 -33
  40. data/lib/childprocess.rb +210 -205
  41. data/spec/abstract_io_spec.rb +12 -12
  42. data/spec/childprocess_spec.rb +447 -422
  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 +13 -43
data/README.md CHANGED
@@ -1,196 +1,230 @@
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
- ***
16
- **This project currently needs a new maintainer. If anyone is interested, please contact me, [enkessler](https://github.com/enkessler).**
17
- ***
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
- w.close
74
-
75
- begin
76
- loop { print r.readpartial(8192) }
77
- rescue EOFError
78
- end
79
-
80
- proc.wait
81
- ```
82
-
83
- Note that if you just want to get the output of a command, the backtick method on Kernel may be a better fit.
84
-
85
- #### Write to stdin
86
-
87
- ```ruby
88
- process = ChildProcess.build("cat")
89
-
90
- out = Tempfile.new("duplex")
91
- out.sync = true
92
-
93
- process.io.stdout = process.io.stderr = out
94
- process.duplex = true # sets up pipe so process.io.stdin will be available after .start
95
-
96
- process.start
97
- process.io.stdin.puts "hello world"
98
- process.io.stdin.close
99
-
100
- process.poll_for_exit(exit_timeout_in_seconds)
101
-
102
- out.rewind
103
- out.read #=> "hello world\n"
104
- ```
105
-
106
- #### Pipe output to another ChildProcess
107
-
108
- ```ruby
109
- search = ChildProcess.build("grep", '-E', %w(redis memcached).join('|'))
110
- search.duplex = true # sets up pipe so search.io.stdin will be available after .start
111
- search.io.stdout = $stdout
112
- search.start
113
-
114
- listing = ChildProcess.build("ps", "aux")
115
- listing.io.stdout = search.io.stdin
116
- listing.start
117
- listing.wait
118
-
119
- search.io.stdin.close
120
- search.wait
121
- ```
122
-
123
- #### Prefer posix_spawn on *nix
124
-
125
- If the parent process is using a lot of memory, `fork+exec` can be very expensive. The `posix_spawn()` API removes this overhead.
126
-
127
- ```ruby
128
- ChildProcess.posix_spawn = true
129
- process = ChildProcess.build(*args)
130
- ```
131
-
132
- ### Ensure entire process tree dies
133
-
134
- 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:
135
-
136
- ```ruby
137
- process = ChildProcess.build(*args)
138
- process.leader = true
139
- process.start
140
- ```
141
-
142
- #### Detach from parent
143
-
144
- ```ruby
145
- process = ChildProcess.build("sleep", "10")
146
- process.detach = true
147
- process.start
148
- ```
149
-
150
- #### Invoking a shell
151
-
152
- 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.
153
- 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`.
154
- You can work around this by being explicit about what interpreter to invoke:
155
-
156
- ```ruby
157
- ChildProcess.build("cmd.exe", "/c", "bundle")
158
- ChildProcess.build("ruby", "-S", "bundle")
159
- ```
160
-
161
- #### Log to file
162
-
163
- Errors and debugging information are logged to `$stderr` by default but a custom logger can be used instead.
164
-
165
- ```ruby
166
- logger = Logger.new('logfile.log')
167
- logger.level = Logger::DEBUG
168
- ChildProcess.logger = logger
169
- ```
170
-
171
- ## Caveats
172
-
173
- * 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`.
174
-
175
- # Implementation
176
-
177
- How the process is launched and killed depends on the platform:
178
-
179
- * Unix : `fork + exec` (or `posix_spawn` if enabled)
180
- * Windows : `CreateProcess()` and friends
181
- * JRuby : `java.lang.{Process,ProcessBuilder}`
182
-
183
- # Note on Patches/Pull Requests
184
-
185
- 1. Fork it
186
- 2. Create your feature branch (off of the development branch)
187
- `git checkout -b my-new-feature dev`
188
- 3. Commit your changes
189
- `git commit -am 'Add some feature'`
190
- 4. Push to the branch
191
- `git push origin my-new-feature`
192
- 5. Create new Pull Request
193
-
194
- # Copyright
195
-
196
- 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.4+, JRuby 9+
18
+
19
+ Windows users **must** ensure the `ffi` gem (`>= 1.0.11`) is installed in order to use ChildProcess.
20
+
21
+ # Usage
22
+
23
+ The object returned from `ChildProcess.build` will implement `ChildProcess::AbstractProcess`.
24
+
25
+ ### Basic examples
26
+
27
+ ```ruby
28
+ process = ChildProcess.build("ruby", "-e", "sleep")
29
+
30
+ # inherit stdout/stderr from parent...
31
+ process.io.inherit!
32
+
33
+ # ...or pass an IO
34
+ process.io.stdout = Tempfile.new("child-output")
35
+
36
+ # modify the environment for the child
37
+ process.environment["a"] = "b"
38
+ process.environment["c"] = nil
39
+
40
+ # set the child's working directory
41
+ process.cwd = '/some/path'
42
+
43
+ # start the process
44
+ process.start
45
+
46
+ # check process status
47
+ process.alive? #=> true
48
+ process.exited? #=> false
49
+
50
+ # wait indefinitely for process to exit...
51
+ process.wait
52
+ process.exited? #=> true
53
+
54
+ # get the exit code
55
+ process.exit_code #=> 0
56
+
57
+ # ...or poll for exit + force quit
58
+ begin
59
+ process.poll_for_exit(10)
60
+ rescue ChildProcess::TimeoutError
61
+ process.stop # tries increasingly harsher methods to kill the process.
62
+ end
63
+ ```
64
+
65
+ ### Advanced examples
66
+
67
+ #### Output to pipe
68
+
69
+ ```ruby
70
+ r, w = IO.pipe
71
+
72
+ begin
73
+ process = ChildProcess.build("sh" , "-c",
74
+ "for i in {1..3}; do echo $i; sleep 1; done")
75
+ process.io.stdout = w
76
+ process.start # This results in a fork, inheriting the write end of the pipe.
77
+
78
+ # Close parent's copy of the write end of the pipe so when the (forked) child
79
+ # process closes its write end of the pipe the parent receives EOF when
80
+ # attempting to read from it. If the parent leaves its write end open, it
81
+ # will not detect EOF.
82
+ w.close
83
+
84
+ thread = Thread.new do
85
+ begin
86
+ loop do
87
+ print r.readpartial(16384)
88
+ end
89
+ rescue EOFError
90
+ # Child has closed the write end of the pipe
91
+ end
92
+ end
93
+
94
+ process.wait
95
+ thread.join
96
+ ensure
97
+ r.close
98
+ end
99
+ ```
100
+
101
+ Note that if you just want to get the output of a command, the backtick method on Kernel may be a better fit.
102
+
103
+ #### Write to stdin
104
+
105
+ ```ruby
106
+ process = ChildProcess.build("cat")
107
+
108
+ out = Tempfile.new("duplex")
109
+ out.sync = true
110
+
111
+ process.io.stdout = process.io.stderr = out
112
+ process.duplex = true # sets up pipe so process.io.stdin will be available after .start
113
+
114
+ process.start
115
+ process.io.stdin.puts "hello world"
116
+ process.io.stdin.close
117
+
118
+ process.poll_for_exit(exit_timeout_in_seconds)
119
+
120
+ out.rewind
121
+ out.read #=> "hello world\n"
122
+ ```
123
+
124
+ #### Pipe output to another ChildProcess
125
+
126
+ ```ruby
127
+ search = ChildProcess.build("grep", '-E', %w(redis memcached).join('|'))
128
+ search.duplex = true # sets up pipe so search.io.stdin will be available after .start
129
+ search.io.stdout = $stdout
130
+ search.start
131
+
132
+ listing = ChildProcess.build("ps", "aux")
133
+ listing.io.stdout = search.io.stdin
134
+ listing.start
135
+ listing.wait
136
+
137
+ search.io.stdin.close
138
+ search.wait
139
+ ```
140
+
141
+ #### Prefer posix_spawn on *nix
142
+
143
+ If the parent process is using a lot of memory, `fork+exec` can be very expensive. The `posix_spawn()` API removes this overhead.
144
+
145
+ ```ruby
146
+ ChildProcess.posix_spawn = true
147
+ process = ChildProcess.build(*args)
148
+ ```
149
+
150
+ To be able to use this, please make sure that you have the `ffi` gem installed.
151
+
152
+ ### Ensure entire process tree dies
153
+
154
+ 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:
155
+
156
+ ```ruby
157
+ process = ChildProcess.build(*args)
158
+ process.leader = true
159
+ process.start
160
+ ```
161
+
162
+ #### Detach from parent
163
+
164
+ ```ruby
165
+ process = ChildProcess.build("sleep", "10")
166
+ process.detach = true
167
+ process.start
168
+ ```
169
+
170
+ #### Invoking a shell
171
+
172
+ 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.
173
+ 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`.
174
+ You can work around this by being explicit about what interpreter to invoke:
175
+
176
+ ```ruby
177
+ ChildProcess.build("cmd.exe", "/c", "bundle")
178
+ ChildProcess.build("ruby", "-S", "bundle")
179
+ ```
180
+
181
+ #### Log to file
182
+
183
+ Errors and debugging information are logged to `$stderr` by default but a custom logger can be used instead.
184
+
185
+ ```ruby
186
+ logger = Logger.new('logfile.log')
187
+ logger.level = Logger::DEBUG
188
+ ChildProcess.logger = logger
189
+ ```
190
+
191
+ ## Caveats
192
+
193
+ * 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`.
194
+ * 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.
195
+
196
+ # Implementation
197
+
198
+ How the process is launched and killed depends on the platform:
199
+
200
+ * Unix : `fork + exec` (or `posix_spawn` if enabled)
201
+ * Windows : `CreateProcess()` and friends
202
+ * JRuby : `java.lang.{Process,ProcessBuilder}`
203
+
204
+ # Note on Patches/Pull Requests
205
+
206
+ 1. Fork it
207
+ 2. Create your feature branch (off of the development branch)
208
+ `git checkout -b my-new-feature dev`
209
+ 3. Commit your changes
210
+ `git commit -am 'Add some feature'`
211
+ 4. Push to the branch
212
+ `git push origin my-new-feature`
213
+ 5. Create new Pull Request
214
+
215
+ # Publishing a New Release
216
+
217
+ When publishing a new gem release:
218
+
219
+ 1. Ensure [latest build is green on the `dev` branch](https://travis-ci.org/enkessler/childprocess/branches)
220
+ 2. Ensure [CHANGELOG](CHANGELOG.md) is updated
221
+ 3. Ensure [version is bumped](lib/childprocess/version.rb) following [Semantic Versioning](https://semver.org/)
222
+ 4. Merge the `dev` branch into `master`: `git checkout master && git merge dev`
223
+ 5. Ensure [latest build is green on the `master` branch](https://travis-ci.org/enkessler/childprocess/branches)
224
+ 6. Build gem from the green `master` branch: `git checkout master && gem build childprocess.gemspec`
225
+ 7. Push gem to RubyGems: `gem push childprocess-<VERSION>.gem`
226
+ 8. Tag commit with version, annotated with release notes: `git tag -a <VERSION>`
227
+
228
+ # Copyright
229
+
230
+ 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,60 +1,36 @@
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
- - CHILDPROCESS_POSIX_SPAWN: true
30
- CHILDPROCESS_UNSET: should-be-unset
31
- RUBY_VERSION: 23-x64
32
- - CHILDPROCESS_POSIX_SPAWN: false
33
- CHILDPROCESS_UNSET: should-be-unset
34
- RUBY_VERSION: 23-x64
35
- - CHILDPROCESS_POSIX_SPAWN: true
36
- CHILDPROCESS_UNSET: should-be-unset
37
- RUBY_VERSION: 24-x64
38
- - CHILDPROCESS_POSIX_SPAWN: false
39
- CHILDPROCESS_UNSET: should-be-unset
40
- RUBY_VERSION: 24-x64
41
- - CHILDPROCESS_POSIX_SPAWN: true
42
- CHILDPROCESS_UNSET: should-be-unset
43
- RUBY_VERSION: 25-x64
44
- - CHILDPROCESS_POSIX_SPAWN: false
45
- CHILDPROCESS_UNSET: should-be-unset
46
- RUBY_VERSION: 25-x64
47
-
48
- install:
49
- - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
50
- - bundle install
51
-
52
- build: off
53
-
54
- before_test:
55
- - ruby -v
56
- - gem -v
57
- - bundle -v
58
-
59
- test_script:
60
- - 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: 24-x64
8
+ - CHILDPROCESS_POSIX_SPAWN: false
9
+ CHILDPROCESS_UNSET: should-be-unset
10
+ RUBY_VERSION: 24-x64
11
+ - CHILDPROCESS_POSIX_SPAWN: true
12
+ CHILDPROCESS_UNSET: should-be-unset
13
+ RUBY_VERSION: 25-x64
14
+ - CHILDPROCESS_POSIX_SPAWN: false
15
+ CHILDPROCESS_UNSET: should-be-unset
16
+ RUBY_VERSION: 25-x64
17
+ - CHILDPROCESS_POSIX_SPAWN: true
18
+ CHILDPROCESS_UNSET: should-be-unset
19
+ RUBY_VERSION: 26-x64
20
+ - CHILDPROCESS_POSIX_SPAWN: false
21
+ CHILDPROCESS_UNSET: should-be-unset
22
+ RUBY_VERSION: 26-x64
23
+
24
+ install:
25
+ - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
26
+ - bundle install
27
+
28
+ build: off
29
+
30
+ before_test:
31
+ - ruby -v
32
+ - gem -v
33
+ - bundle -v
34
+
35
+ test_script:
36
+ - bundle exec rake