¿Cómo get SHA de confirmación para Xcode Bot "Run Script" Trigger? Actualizando el estado de las testings en Github

Creé un Xcode Bot que se integra en cada commit.

En el disparador "Ejecutar script" me gustaría actualizar la confirmación actual de GitHub con el estado de integración de las testings que se ejecutaron. Bastante estándar CI cosas.

Xcode Bot Run Script

Entonces ejecutaré un script como el siguiente:

curl -i -X POST -H "Content-type: application/json" -H 'Authorization: token TOKEN_HERE' -d '{ "state": "success", "target_url": "https://example.com/build/status", "description": "The build succeeded!", "context": "continuous-integration/jenkins" }' https://api.github.com/repos/ORGANIZATION_HERE/REPO_HERE/statuses/SHA_HERE 

Parece que podré get los estados de success o failure de las variables de Xcode Bot Environment:

Acceder a la carpeta de compilation en la ejecución del bot de Xcode Server CI (variables env?)

Sin embargo, el SHA de la confirmación actual no aparece en la list. ¿Cómo puedo get el SHA de la confirmación utilizada para la Integración en este momento, para ser utilizado en la request de la API de estado de GitHub?

XCS_OUTPUT_DIR tiene un file llamado sourceControl.log . Este file tiene loggings como los siguientes:

  "DVTSourceControlLocationRevisionKey" : "3787c0d9e5107861a8b8d4c7300b2d414ad41dbb", 

Puede analizar ese logging para encontrar el SHA.

Tal vez de manera más práctica, CaveJohnson puede sacar el SHA:

 PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH SHA=`cavejohnson getSha` 

O simplemente puede seguir adelante y configurar el estado de GitHub como una sola línea:

 #!/bin/bash PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH cavejohnson setGithubStatus 

Notablemente, hay más estados que solo el éxito y el fracaso, hay al less 6 de los que tengo conocimiento. Puede leer más sobre ellos en mi Xcode 6 CI Missing Manual .

Utilizando el código cavejohnson en la otra respuesta, que obtiene el hash de ciertas keys y un logging de Xcode, me encontré con un problema donde el hash devuelto era obsoleto desde la última compilation .

Ahora estoy usando git rev-parse HEAD para get el hash de la confirmación que realmente se usó en la construcción de CI. He enviado esto como una revisión a cavejohnson .

Use get_sha() para recuperar el hash SHA-1:

 def get_sha(): return get_repo_sha(get_git_directory()) def get_git_directory(): for subdir in os.listdir('.'): if is_git_directory(subdir): return subdir assert False def is_git_directory(path = '.'): return subprocess.call(['git', '-C', path, 'status'], stderr=subprocess.STDOUT, stdout = open(os.devnull, 'w')) == 0 def get_repo_sha(repo): sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=repo).decode('ascii').strip() return sha 

Estoy usando este código en mis triggers Xcode Bot para get el SHA de la confirmación:

 git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse HEAD 

Y esto para get el nombre de la sucursal:

 git -C ${XCS_SOURCE_DIR}/name_of_your_git_repo rev-parse --abbrev-ref HEAD 

Esto ejecuta un command git en el directory fuente, reemplaza "name_of_your_git_repo" por el nombre de tu repository en git