Para cualquier solicitud de cambios, GitHub proporciona tres tipos de vistas de comentarios: comentarios en la solicitud de cambios en su conjunto, comentarios en una línea específica dentro de la solicitud de cambios y comentarios sobre una confirmación concreta dentro de la solicitud de cambios.
Cada uno de estos tipos de comentario pasa por una parte diferente de la API de GitHub. En esta guía exploraremos cómo puedes acceder y manipular cada uno de ellos. Para cada ejemplo, se usará este Pull Request de ejemplo arraigado en el repositorio "octocat". Como siempre, los ejemplos se pueden encontrar en nuestro repositorio platform-samples.
Comentarios de las Solicitudes de Extracción
Para acceder a los comentarios de una solicitud de incorporación de cambios, usarás los puntos de conexión para administrar incidencias. Esto puede parecer contraintuitivo al principio. Pero una vez que comprendas que una solicitud de incorporación de cambios es solo una incidencia con código, tiene sentido usar estos puntos de conexión para crear comentarios en una solicitud de incorporación de cambios.
Vamos a demostrar cómo capturar comentarios de Pull Request mediante la creación de un script en Ruby con Octokit.rb. También querrás crear un personal access token.
El siguiente código debería ayudarte a comenzar a acceder a los comentarios de un Pull Request con Octokit.rb.
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.issue_comments("octocat/Spoon-Knife", 1176).each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
Aquí estamos llamando específicamente a la API para obtener los comentarios, proporcionando tanto el nombre del repositorio como el ID de la Pull Request que nos interesa. Después, solo es cuestión de iterar a través de los comentarios para obtener la información sobre cada uno.
Comentarios en una línea de una solicitud de extracción
Dentro de la vista de diferencias, puedes comentar sobre un aspecto específico de un cambio singular realizado en el pull request. Estos comentarios aparecen en las líneas individuales dentro de un archivo que ha cambiado. La URL del endpoint para esta discusión proviene del endpoint para administrar revisiones de pull requests.
El código siguiente obtiene todos los comentarios del Pull Request hechos en los archivos, dado un único número de Pull Request.
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.pull_request_comments("octocat/Spoon-Knife", 1176).each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
path = comment[:path]
position = comment[:position]
puts "#{username} made a comment on #{post_date} for the file called #{path}, on line #{position}. It says:\n'#{content}'\n"
end
Te darás cuenta de que es increíblemente similar al ejemplo anterior. La diferencia entre esta vista y el comentario del Pull Request es el enfoque de la conversación. Un comentario realizado en una solicitud de incorporación de cambios se debe reservar para debatir o sugerir ideas sobre la dirección general del código. Un comentario realizado como parte de una revisión de una solicitud de incorporación de cambios deberá tratar específicamente la forma en la que se ha implementado un cambio concreto dentro de un archivo.
Comentarios de commit
El último tipo de comentarios sucede específicamente en las confirmaciones individuales. Por esta razón, usan el endpoint para administrar los comentarios de confirmación.
Para recuperar los comentarios en una confirmación, necesitarás utilizar el SHA1 de ésta. Es decir, no utilizarás ningún identificador relacionado con el Pull Request. Este es un ejemplo:
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.commit_comments("octocat/Spoon-Knife", "cbc28e7c8caee26febc8c013b0adfb97a4edd96e").each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
Tenga en cuenta que esta API recuperará comentarios de una sola línea, así como los realizados en todo el commit.