2015-02-20 22 views
5

Ho creato un Bot Xcode che si integra su ciascun commit.Come ottenere SHA di commit per Xcode Bot "Esegui script" Trigger? Aggiornamento dello stato dei test su Github

nel trigger "Run Script" Vorrei aggiornare l'attuale GitHub commettere con lo status di integrazione dei test che sono stati eseguiti. Roba di CI piuttosto standard.

Xcode Bot Run Script

sarò poi essere in esecuzione uno script come il qui sotto:

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 

Sembra che sarò in grado di ottenere i success o failure stati dalle variabili Xcode Bot Ambiente:

Access build folder in Xcode Server CI bot run (env variables?)

Tuttavia, il CSA della corrente commit non è elencato. Come posso ottenere lo SHA del commit utilizzato per l'integrazione a questo punto, da utilizzare nella richiesta dell'API GitHub Status?

risposta

1

XCS_OUTPUT_DIR ha un file chiamato sourceControl.log. Questo file ha i registri come il seguente:

"DVTSourceControlLocationRevisionKey" : "3787c0d9e5107861a8b8d4c7300b2d414ad41dbb", 

È possibile analizzare che accedono per trovare lo SHA.

Forse più praticamente, CaveJohnson può tirare il CSA:

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

o può solo andare avanti e impostare lo stato GitHub come un one-liner:

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

In particolare, ci sono più status che solo il successo e l'insuccesso, ce ne sono almeno 6 di cui sono a conoscenza. Puoi leggere di più su di loro nel mio Xcode 6 CI Missing Manual.

1

Utilizzando il codice cavejohnson in altra risposta, che ottiene l'hash da alcuni tasti di un registro Xcode, mi sono imbattuto in un problema in cui the returned hash was an outdated one from the last build.

Ora sto usando invece git rev-parse HEAD per ottenere l'hash del commit che è stato effettivamente utilizzato nella build CI. Ho inviato questo come una revisione a cavejohnson.

Usa get_sha() per recuperare l'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 
1

Sto usando questo codice nel mio Xcode Bot fa scattare per ottenere lo SHA del commit:

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

E questo per ottenere il nome del ramo:

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

Questa eseguire un comando git nella directory dei sorgenti, sostituire "name_of_ your_git_repo "con il nome del tuo repository su git