diff --git a/update_dependencies b/update_dependencies index 7900462013..ed77677a02 100755 --- a/update_dependencies +++ b/update_dependencies @@ -4,6 +4,10 @@ import errno import os import subprocess +from collections import defaultdict + +ITEMS = defaultdict(lambda: {'success': [], 'error': []}) + class ValidationException(Exception): def __init__(self, error_msg, error_no=errno.EFAULT): @@ -32,31 +36,55 @@ class CatalogItemNotFoundException(NotFoundException): super(CatalogItemNotFoundException, self).__init__(f'Failed to find {path!r} catalog item') +def report_result(): + print('[\033[94mINFO\x1B[0m]\tExecution Complete') + for index, item in enumerate(ITEMS): + index += 1 + data = ITEMS[item] + print(f'\n\n[\033[94mINFO\x1B[0m]\t{index}) {item}') + if data['success']: + print( + f'[\033[92mOK\x1B[0m]\t - Successfully updated dependencies for {", ".join(data["success"])} versions' + ) + + for i_v, version in enumerate(data['error']): + v_name, error = version + print( + f'[\033[91mFAILED\x1B[0m]\t ({i_v + 1}) Failed to update dependencies for {v_name!r} version: {error}' + ) + + def update_train_charts(train_path): # We will gather all charts in the train and then for each chart all it's versions will be updated if not os.path.exists(train_path): raise TrainNotFoundException() + print(f'[\033[94mINFO\x1B[0m]\tProcessing {train_path!r} train') for item in os.listdir(train_path): process_catalog_item(os.path.join(train_path, item)) + report_result() + def process_catalog_item(item_path): if not os.path.exists(item_path): raise CatalogItemNotFoundException(item_path) + item_name = item_path.rsplit('/', 1)[-1] + print(f'[\033[94mINFO\x1B[0m]\tProcessing {item_name!r} catalog item') for item_version in os.listdir(item_path): - update_item_version(os.path.join(item_path, item_version)) + update_item_version(item_name, item_version, os.path.join(item_path, item_version)) -def update_item_version(version_path): +def update_item_version(item_name, version, version_path): cp = subprocess.Popen( ['helm', 'dependency', 'update', version_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) stdout, stderr = cp.communicate() if cp.returncode: - # TODO: Let's keep a log of success and failure scenarios - pass + ITEMS[item_name]['error'].append((version, stderr.decode())) + else: + ITEMS[item_name]['success'].append(version) def main():