import subprocess ORCHE_URL = 'http://127.0.0.1:8080/' BUILD_SCRIPT = 'build_a_system.sh' DEPLOY_SCRIPT = 'deploy_a_system.sh' DEFINITIONS_DIR='definitions' REF = "cu010-trove/br6/firehose-test-1" whitelist = [ 'clusters/tlsa.morph', 'systems/base-system-x86_64-generic.morph', 'strata/build-essential.morph', 'strata/core.morph', 'strata/foundation.morph', 'strata/bsp-x86_64-generic.morph', ] LOGFILE = '/home/williamholland/orchestration/trigger_log' log_file = open(LOGFILE,'a') def log(msg): ''' write message to log file with timestamp and script name ''' import datetime global log_file dt = str(datetime.datetime.now()).split('.')[0] log_file.write("[%s] Builder Trigger: %s\n" % (dt, msg)) def files_changed(): ''' return a list of files changed in latest commit to definitions''' import os owd = os.getcwd() os.chdir(DEFINITIONS_DIR) SHAcmd = ['git', 'log', REF, '--format=format:%H', '-2'] SHAproc = subprocess.Popen(SHAcmd, stdout=subprocess.PIPE) SHAout, SHAerr = SHAproc.communicate() SHA = SHAout.split() cmd = ['git', 'diff', '--name-only', SHA[0], SHA[1]] p = subprocess.Popen(cmd, stdout=subprocess.PIPE) out, err = p.communicate() os.chdir(owd) return out.split() def find_systems_affected_by_change(): # TODO for each file changed, separate into chunks, strata, systems and clusters # TODO for each strata get it's system pass def find_clusters_affected_by_change(): changed_systems = find_systems_affected_by_change() # TODO for each system get it's custers def build(system): log('building %s' % system) return subprocess.call(['sh','%s' % BUILD_SCRIPT, '%s' % system]) def deploy(cluster): log('deploying %s' % cluster) exit_val = subprocess.call(['sh','%s' % DEPLOY_SCRIPT, '%s' % cluster]) log('deployment complete') exit(exit_val) def trigger_testing(build_id): import requests global url url = '%sbuild_complete' % ORCHE_URL payload = {'artefact':build_id} r = requests.post(url,data=payload) return r.ok if __name__ == '__main__': _files_changed = files_changed() for f in _files_changed: if f in whitelist: build_exit_val = build('systems/base-system-x86_64-generic.morph') if build_exit_val: exit(build_exit_val) deploy_exit_val = deploy('clusters/tlsa.morph') if deploy_exit_val: exit(deploy_exit_val) exit(trigger_testing()) log('nothing whitelisted changed. No build started.')