¿Cómo puedo usar la API de GitHub (octokit) para filtrar confirmaciones que afectan inmediatamente a la twig maestra?

Estoy automatizando las versiones semánticas usando TeamCity y Github, y estoy tratando de encontrar una manera de contar las confirmaciones que afectan directamente a la twig principal.

Probablemente sea mejor explicado por esta captura de pantalla anotada de Git-Extensions. Quiero calcular automáticamente los numbers de versión en las flechas:

Captura de pantalla de git-extensions

Estoy usando ruby ​​y octokit para consultar la API de GitHub como parte de mi process de compilation. El número de versión mayor y menor se incrementa de forma manual cuando una confirmación o fusión califica como una versión mayor / menor, por lo que el pseudocódigo es básicamente:

  1. encontrar la confirmación correspondiente a major.minor.0
  2. contar cada confirmación desde major.minor.0 que cambió el estado de la twig maestra
  3. establecer la versión del parche para commits.count

El problema que tengo es que si solo cuento los commits para master, cada vez que se acepta una request de extracción, el recuento de commit se incrementa en n + 1 , donde n es el número de confirmaciones hechas a la twig. Esto funcionará, pero es … poco elegante. Sí, entiendo que cuando aceptas una request de extracción, aceptas de manera efectiva el historial completo de esa twig como parte de tu historial 'maestro', pero para fines de creación de versiones eso no importa.

¿Alguien sabe cómo puedo filtrar confirmaciones a través de la API de GitHub para averiguar si la confirmación afecta directamente al maestro en el punto en que se creó, o hay alguna razón por la que esto es realmente imposible?

¡Gracias!

He hecho algo similar. En realidad, puede get cada compromiso de request de extracción Sha recursivamente, usando la siguiente idea:

var filter = new PullRequestRequest() { State = ItemState.Closed }; //for my example, I filtenetworking the pull-requests that are closed var prs =await client.Repository.PullRequest.GetAllForRepository(Owner,Name,filter); foreach(var pr in prs){ var prs2 = await client.Repository.PullRequest.Commits (Owner, Name, pr.Number); } 

Después de eso, obtendrá el atributo prs2 Sha y lo almacenará en una list. Luego obtienes todos los commit del repository.

 var commits = await client.Repository.Commit.GetAll (Owner, Name); 

Finalmente, comparará la list con los sha's de los commits dentro de pull-requests y los excluirá de la list que contiene todas las confirmaciones del repository. De esta forma, solo quedarán las confirmaciones que no estén dentro de una request de extracción. Opcionalmente, puede verificar si esas confirmaciones son confusiones de fusión (confirmaciones que fusionan la request de extracción de otro queueborador) y las excluye también.