mjuez / TFM2016_Analisis-Visual-Revisiones-Codigo

Herramienta para la obtención y visualización de datos de revisiones de código.
MIT License
1 stars 0 forks source link

Error 500 al obtener revisiones de una pull request. #99

Open mjuez-ubu opened 6 years ago

mjuez-ubu commented 6 years ago

La librería nodejs que ofrecía GitHub para hacer uso de su API (node-github) ya no se llama así, ahora es @octokit/rest.js. Por ello, la librería que utilizamos ha dejado de desarrollarse y se ha quedado desactualizada.

Al parecer la forma en la que obtenía las revisiones de una pull request la antigua librería ya no funciona bien, y si una pull request tiene revisiones, en lugar de obtenerlas, viene un error 500:

{ [Error: {"message":"Server Error","documentation_url":"https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request"}]
  message: '{"message":"Server Error","documentation_url":"https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request"}',
  code: 500,
  status: 'Internal Server Error',
  headers:
   { server: 'GitHub.com',
     date: 'Fri, 23 Mar 2018 10:41:21 GMT',
     'content-type': 'application/json; charset=utf-8',
     'content-length': '126',
     connection: 'close',
     status: '500 Internal Server Error',
     'x-ratelimit-limit': '5000',
     'x-ratelimit-remaining': '4982',
     'x-ratelimit-reset': '1521805266',
     'x-github-media-type': 'github.v3; param=black-cat-preview; format=json',
     'access-control-expose-headers': 'ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval',
     'access-control-allow-origin': '*',
     'strict-transport-security': 'max-age=31536000; includeSubdomains; preload',
     'x-frame-options': 'deny',
     'x-content-type-options': 'nosniff',
     'x-xss-protection': '1; mode=block',
     'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
     'content-security-policy': 'default-src \'none\'',
     'x-runtime-rack': '0.133733',
     'x-github-request-id': 'D265:1A819:11E2F45:28E0538:5AB4D9D1' } }

Voy a intentar cambiar la librería por la nueva, espero que funcione de forma similar y conserve las interfaces.

mjuez-ubu commented 6 years ago

He estado haciendo pruebas con la librería @octokit/rest.js, y resulta que sigo obteniendo el error 500, así que el motivo no es que la antigua librería se hubiese quedado obsoleta. Me he puesto a probar la librería de forma aislada, y he podido observar que funciona correctamente si NO se utiliza autenticación, en el momento en el que utilizo autenticación (permite aumentar el límite de peticiones, recordemos #20), obtengo error 500 de nuevo. Voy a probar a crear unas claves de aplicación nuevas a ver, y también voy a revisar si hay algun tipo de log asociado a las credenciales que uso actualmente, por si se estuviese aplicando algun tipo de restricción a mi cuenta por parte de GitHub.

mjuez-ubu commented 6 years ago

Tras revisar la configuración de mis aplicaciones OAuth, crear nuevas credenciales, etc. El problema seguía ocurriendo, por lo que empecé a pensar que podría no se problema mío o de la librería, sino directamente de la API REST de GitHub, así que decidí enviar un correo electrónico al grupo de soporte. Me han contestado que efectivamente parece ser un error de su lado y que van a crear una incidencia interna para investigarlo y solucionarlo, aunque no me dan fecha estimada. Cito lo que me ha contestado Ivan Žužak:

Thanks so much for reporting this, Mario -- that looks like a bug on our end so I've opened an internal issue so that the team can investigate. I can't promise an ETA, but we'll followup as soon as there's any news.

Best, Ivan

Por el momento, mantengo esta incidencia abierta hasta tener nuevas noticias, aunque que todo parece indicar que el problema no es de nuestra aplicación. Aun así, esto ha servido para hacer un pequeño mantenimiento y actualizar a la nueva librería @octokit/rest, también para ver la constante evolución de tecnologías como por ejemplo TypeScript, ya que actualmente el editor de código es capaz de resaltar algunos pequeños defectos o malas prácticas que pasaron desapercibidas en el momento de desarrollo del proyecto.

mjuez-ubu commented 6 years ago

Cito también el correo que les envié para tenerlo aquí por si puede ser de interés en el futuro:

Hello, I am trying to retrieve all reviews from a pull request using the REST API. If I call the API without any authentication method, it works fine, for example (using a pull request from elasticsearch repository):

curl "https://api.github.com/repos/elastic/elasticsearch/pulls/29229/reviews"

returns the reviews of that pull request (as expected):

[{
"id": 106648787,
"user": {
"login": "javanna",
"id": 832460,
"avatar_url": "https://avatars1.githubusercontent.com/u/832460?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/javanna",
"html_url": "https://github.com/javanna",
"followers_url": "https://api.github.com/users/javanna/followers",
"following_url": "https://api.github.com/users/javanna/following{/other_user}",
"gists_url": "https://api.github.com/users/javanna/gists{/gist_id}",
"starred_url": "https://api.github.com/users/javanna/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/javanna/subscriptions",
"organizations_url": "https://api.github.com/users/javanna/orgs",
"repos_url": "https://api.github.com/users/javanna/repos",
"events_url": "https://api.github.com/users/javanna/events{/privacy}",
"received_events_url": "https://api.github.com/users/javanna/received_events",
"type": "User",
"site_admin": false
},
"body": "I did a first pass and left some comments, thanks @tomcallahan !",
"state": "CHANGES_REQUESTED",
"html_url": "https://github.com/elastic/elasticsearch/pull/29229#pullrequestreview-106648787",
"pull_request_url": "https://api.github.com/repos/elastic/elasticsearch/pulls/29229",
"author_association": "MEMBER",
"_links": {
"html": {
"href": "https://github.com/elastic/elasticsearch/pull/29229#pullrequestreview-106648787"
},
"pull_request": {
"href": "https://api.github.com/repos/elastic/elasticsearch/pulls/29229"
}
},
"submitted_at": "2018-03-23T21:36:35Z",
"commit_id": "418225f05fcd58e122b8079fcda1dba70802a21f"
}]

The problem comes when I try to retrieve the same information but using OAuth app credentials (Client ID + Client Secret):

curl "https://api.github.com/repos/elastic/elasticsearch/pulls/29229/reviews?client_id=MY_OAUTH_APP_CID&client_secret=MY_OAUTH_APP_CSECRET"

it always returns the following:

{
"message": "Server Error",
"documentation_url": "https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request"
}

Retrieving other resources like review comments using authentication credentials works without any problem, so, what am I doing wrong? Is this the expected behaviour?

Thank you in advance for your help. Mario.