diff options
Diffstat (limited to 'builder_logic.py')
-rw-r--r-- | builder_logic.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/builder_logic.py b/builder_logic.py new file mode 100644 index 0000000..8f3b56c --- /dev/null +++ b/builder_logic.py @@ -0,0 +1,59 @@ +import subprocess + +ORCHE_URL = 'http://127.0.0.1:8080/' +BUILD_SCRIPT = 'bild_a_system.sh' +DEPLOY_SCRIPT = 'deploy_a_system.sh' +DEFINITIONS_DIR='/home/patrickdarley/definitions' + +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', + ] + +def files_changed(): + ''' return a list of files changed in latest commit to definitions''' + import os + owd = os.getcwd() + os.chdir(DEFINITIONS_DIR) + cmd = ['git', 'diff', '--name-only', 'HEAD~1', 'HEAD'] + 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): + return subprocess.call(['sh','%s' % BUILD_SCRIPT, '%s' % system]) + +def deploy(cluster): + return subprocess.call(['sh','%s' % DEPLOY_SCRIPT, '%s' % cluster]) + +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()) |