Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Already on GitHub? Sign in to your account

Tobi is broken in node 0.6.5 (at least for me) #71

Open
Cowboy-coder opened this Issue Dec 8, 2011 · 8 comments

Comments

Projects
None yet
6 participants

I'm using Mac OS X 10.6.8

I also had to change "express": "2.3.x" to "express": ">= 2.3.0" in devDependencies before doing npm install

Maybe 0.6.X isn't supported yet, but I assume it should work because of this "engines": { "node": ">= 0.4.x < 0.7.0" in packacke.json

fredrik: ~/progg/tobi (master *)$ make test
The "sys" module is now called "util". It should have a similar interface.

  0)  test .text() 
  1)  test .many() 
  2)  test .one() 
  3)  test .attr() 
  4)  test .class() 
  5)  test .enabled / .disabled 
  6)  test .checked 
  7)  test .selected 
  8)  test .id() 
  9)  test .status() 
  10)  test .header()
  11)  test global context
  12)  test custom context
  13)  test external option disabled
  14)  test external option enabled
  15)  test .request() invalid response
  16)  test .request() non-html
  ✓  test .createBrowser(port, host): 8ms
  17)  test .request() json
  18)  test .request() 404
  19)  test .request() error
  20)  test .request(method, path)
  21)  test .request(method, url)
  22)  test .request(method, foreignUrl)
  23)  test .request(method, foreignHttpsUrl)
  24)  test .request() redirect
  25)  test .request() redirect when followRedirects is false
  26)  test .request() redirect to a full uri with different hostname
  ✓  test .request redirecting from a full non-https uri to a https uri: 1965ms
  27)  test .request() on deferred listen()
  28)  test .back(fn)
  29)  test .head(path)
  30)  test .post(path)
  31)  test .post(path) with passed body
  32)  test .put(path)
  33)  test .delete(path)
  34)  test .get(path)
  ✓  test .locate(css): 179ms
  ✓  test .locate(name): 79ms
  ✓  test .locate(value): 75ms
  ✓  test .locate(text): 129ms
  35)  test .click(text, fn)
  36)  test .click(id, fn)
  37)  test .click(css, fn)
  38)  test .uncheck(name)
  39)  test .check(name)
  40)  test .check(css)
  41)  test .check(id)
  42)  test jQuery#click(fn)
  43)  test jQuery#click(fn) form submit button
  44)  test .type()
  45)  test .type() chaining
  46)  test .fill(obj) names
  47)  test .fill(obj) css
  48)  test jQuery#submit() POST
  49)  test jQuery#submit() POST with a submit input not being a direct descendent
  50)  test .submit() POST
  51)  test .submit() GET
  52)  test select single option
  53)  test select multiple options
  54)  test .select() single option by value
  55)  test .select() multiple options by value
  56)  test .select() multiple options by text
  57)  test .select() default select option value
  58)  test .text()
  ✓  test setting user-agent: 2239ms
  59)  test JSON link
  ✓  test Browser(str): 101ms
  ✓  test .createBrowser(str): 62ms
  ✓  test .createBrowser(server): 1ms
  ✓  test .get() expiration: 1006ms
  ✓  test .get() path support: 4ms
  ✓  test .toString(): 0ms
  ✓  test .path: 1ms
  ✓  test .path default: 1ms
  ✓  test .httpOnly: 1ms
  ✓  test .name: 0ms
  ✓  test .value: 1ms
  60)  test .expires
  61)  test .fill()
  62)  test /login with valid credentials
  63)  test /login with invalid credentials
  64)  test /login with username omitted
  ✓  test .version: 0ms

  ✖ 65 of 84 tests failed:

  0)  test .text():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  1)  test .many():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  2)  test .one():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  3)  test .attr():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  4)  test .class():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  5)  test .enabled / .disabled:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  6)  test .checked:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  7)  test .selected:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  8)  test .id():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  9)  test .status():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  10)  test .header():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  11)  test global context:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  12)  test custom context:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  13)  test external option disabled:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  14)  test external option enabled:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  15)  test .request() invalid response:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  16)  test .request() non-html:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  17)  test .request() json:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  18)  test .request() 404:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  19)  test .request() error:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  20)  test .request(method, path):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  21)  test .request(method, url):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  22)  test .request(method, foreignUrl):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  23)  test .request(method, foreignHttpsUrl):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  24)  test .request() redirect:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  25)  test .request() redirect when followRedirects is false:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  26)  test .request() redirect to a full uri with different hostname:
     TypeError: Cannot read property 'should' of undefined
      at Test.fn (/Users/fredriklindin/progg/tobi/test/browser.navigation.test.js:309:21)
      at Test.run (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:103:12)
      at Runner.runTest (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:265:10)
      at /Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:311:12
      at next (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:193:14)
      at /Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:202:7
      at next (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:153:23)
      at Array.0 (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:170:5)
      at EventEmitter._tickCallback (node.js:192:40)

  27)  test .request() on deferred listen():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  28)  test .back(fn):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  29)  test .head(path):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  30)  test .post(path):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  31)  test .post(path) with passed body:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  32)  test .put(path):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  33)  test .delete(path):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  34)  test .get(path):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  35)  test .click(text, fn):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  36)  test .click(id, fn):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  37)  test .click(css, fn):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  38)  test .uncheck(name):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  39)  test .check(name):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  40)  test .check(css):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  41)  test .check(id):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  42)  test jQuery#click(fn):
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  43)  test jQuery#click(fn) form submit button:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  44)  test .type():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  45)  test .type() chaining:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  46)  test .fill(obj) names:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  47)  test .fill(obj) css:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  48)  test jQuery#submit() POST:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  49)  test jQuery#submit() POST with a submit input not being a direct descendent:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  50)  test .submit() POST:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  51)  test .submit() GET:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  52)  test select single option:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  53)  test select multiple options:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  54)  test .select() single option by value:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  55)  test .select() multiple options by value:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  56)  test .select() multiple options by text:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  57)  test .select() default select option value:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  58)  test .text():
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  59)  test JSON link:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  60)  test .expires:
     AssertionError: expected 0 to equal 6
      at Object.equal (/Users/fredriklindin/progg/tobi/node_modules/should/lib/should.js:306:10)
      at Test.fn (/Users/fredriklindin/progg/tobi/test/cookie.test.js:42:36)
      at Test.run (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:112:29)
      at Runner.runTest (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:265:10)
      at /Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:311:12
      at next (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:193:14)
      at /Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:202:7
      at next (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:153:23)
      at Array.0 (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:170:5)
      at EventEmitter._tickCallback (node.js:192:40)

  61)  test .fill():
     AssertionError: expected [jQuery 'select > option[value=bc]'] to be selected
      at Object.selected (/Users/fredriklindin/progg/tobi/lib/assertions/should.js:385:10)
      at Test.fn (/Users/fredriklindin/progg/tobi/test/jquery.test.js:45:45)
      at Test.run (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:112:29)
      at Runner.runTest (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:265:10)
      at /Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:311:12
      at next (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:193:14)
      at /Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:202:7
      at next (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:153:23)
      at Array.0 (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runner.js:170:5)
      at EventEmitter._tickCallback (node.js:192:40)

  62)  test /login with valid credentials:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  63)  test /login with invalid credentials:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)

  64)  test /login with username omitted:
     Error: timeout of 4000ms exceeded
      at Object.<anonymous> (/Users/fredriklindin/progg/tobi/node_modules/mocha/lib/runnable.js:80:12)
      at Timer.ontimeout (timers.js:84:39)


make: *** [test] Error 65

This fixes the issue somewhat:
Cowboy-coder/tobi@fd733a3

Some tests are still failing though.

Even the simplest examples seem to fail in node 0.6.5 for me, even with your commit. Are you seeing stuff work with that commit?

UPDATE: whoops, never mind, problem on my end, working okay now.

That commit worked for me. I also put together a bare-bones test case to reproduce this issue.

+1 Patch worked for me too

Member

tj commented Feb 10, 2012

I cant even get jsdom to install for 0.6.x, either that or my npm is borked

hmm worked for me on Mac OS X 10.7.3 and Ubuntu 11.04; node 0.6.7; npm 1.1.1. Also had to change the devDevependency line for express because the 2.3.X and 2.4.X are gone from npm, then everything installed fine:

├─┬ connect@1.8.5 
│ ├── formidable@1.0.8 
│ └── mime@1.2.4 
├─┬ express@2.5.8 
│ ├── mime@1.2.4 
│ └── mkdirp@0.3.0 
├── htmlparser@1.7.4 
├─┬ jsdom@0.2.10 
│ ├── contextify@0.0.7 
│ ├── cssom@0.2.2 
│ └── request@2.9.100 
├─┬ mocha@0.12.0 
│ ├── commander@0.5.2 
│ ├── debug@0.5.0 
│ └── growl@1.4.1 
├── qs@0.4.2 
└── should@0.5.1 

BTW the above fix still causes timeouts in my tests. It looks like server.fd no longer exists in 0.6, so this works for me:

diff --git a/lib/browser.js b/lib/browser.js
index 0e39fb5..d7a2675 100644
--- a/lib/browser.js
+++ b/lib/browser.js
@@ -170,6 +170,7 @@ Browser.prototype.request = function(method, path, options, fn, saveHistory){
     if (!server.__started) {
       server.listen(server.__port = ++startingPort, host, function(){
         process.nextTick(function(){
+          server.fd || (server.fd = true)
           server.__deferred.forEach(function(args){
             self.request.apply(self, args);
           });

secobarbital That worked perfect for me. Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment