def tearDown(self): env.clear() env.update(self.previous_env)
def main(configPath): errors = {} with open(configPath) as envFile: envData = json.load(envFile) for key, val in envData.items(): env[key] = val local('mkdir -p ' + env.tmpFolder) with lcd(env.tmpFolder): recursiveClone(env["source-repository"], env["source-commit"]) print("Checking canRun functions...") for repoTuple in sorted(clonedRepositories.items(), key=lambda x: x[1].id, reverse=True): oldEnv = deepcopy(env) repo = repoTuple[1] for key, value in repo.dependencies.items(): env[key] = value env['source-repository'] = repo.repository env['source-commit'] = repo.commit try: with lcd(path.join(repo.cloneFolder, 'deploy')): sys.path.append(local('pwd', capture=True)) import deploy if 'canRun' not in dir(deploy): print("No function canRun for deploy script in {}!". format(repo.repository)) else: print("Function canRun exist for deploy script in {}!". format(repo.repository)) from deploy import canRun try: ret_value = execute(canRun) except Exception as e: print(e) ret_value = {'all': False} for host, value in ret_value.items(): if value: print("Deploy can run!") else: raise EnvironmentError( "Can not continue, missing requirements for deploy script in {}! Aborting..." .format(repo.repository)) sys.path.remove(local('pwd', capture=True)) except ImportError: print("No module deploy for {}!".format(repo.repository)) pass except EnvironmentError: local('rm -rf ../{}'.format(env.tmpFolder)) raise finally: del sys.modules['deploy'] env.clear() for key, value in oldEnv.items(): env[key] = value print("Check done!") print("Running deploy functions...") for repoTuple in sorted(clonedRepositories.items(), key=lambda x: x[1].id, reverse=True): oldEnv = deepcopy(env) repo = repoTuple[1] for key, value in repo.dependencies.items(): env[key] = value env['source-repository'] = repo.repository env['source-commit'] = repo.commit try: with lcd(repo.cloneFolder): with lcd('deploy'): sys.path.append(local('pwd', capture=True)) from deploy import runDeploy sys.path.remove(local('pwd', capture=True)) print("Running Deploy for {}".format(repo.repository)) error = execute(runDeploy) for host, returnValue in error.items(): if returnValue is None: continue if host not in errors: errors[host] = {} errors[host][repo.repository] = returnValue del sys.modules['deploy'] env.clear() for key, value in oldEnv.items(): env[key] = value except Exception: raise finally: local('rm -rf ' + repo.cloneFolder) print("Run done!") if len(errors) is not 0: print("Got following errors:") for host, errorItem in errors.items(): print(host) for repo, errorArray in errorItem.items(): print(f"\t{repo}") for error in errorArray: print(f"\t\t- {error}")