def main(): global send_reminder_chat global lag_reminder_modules update_lang_version() updated_readme = get_updated_readme() # Write to local README file f = open(README_FILE, 'w') f.write(updated_readme) f.close() try: update_readme, commit = utils.commit_file( 'ballerina-release', README_FILE, updated_readme, constants.DASHBOARD_UPDATE_BRANCH, '[Automated] Update extension dependency dashboard') except GithubException as e: print('Error occurred while committing README.md', e) sys.exit(1) try: image = Image.open(constants.PIE_CHART_IMAGE, mode='r') img_byte_arr = io.BytesIO() image.save(img_byte_arr, format='JPEG') if update_readme: utils.commit_image_file('ballerina-release', constants.PIE_CHART_IMAGE, img_byte_arr.getvalue(), constants.DASHBOARD_UPDATE_BRANCH, '[Automated] Update status pie chart') except GithubException as e: print('Error occurred while committing status pie chart', e) sys.exit(1) if update_readme: utils.open_pr_and_merge( 'ballerina-release', '[Automated] Update Extension Dependency Dashboard', 'Update extension dependency dashboard', constants.DASHBOARD_UPDATE_BRANCH) if send_reminder_chat == 'true' and len(lag_reminder_modules) > 0: chat_message = distribution_lag_statement.replace( '<code>ballerina-distribution</code>', '*ballerina-distribution*') + ".\n\n" chat_message += "*Reminder* on the following modules\' dependency update..." + "\n" for module in lag_reminder_modules: lag_status_link = module[MODULE_PULL_REQUEST] if lag_status_link == "": lag_status_link = constants.BALLERINA_ORG_URL + module[ MODULE_NAME] chat_message += utils.get_module_message( module, lag_status_link) print("\n" + utils.get_sanitised_chat_message(chat_message)) notify_chat.send_message(chat_message) else: print('No changes to ' + README_FILE + ' file')
def wait_for_current_level_build(level, is_stdlib_module): global MAX_WAIT_CYCLES global send_notification global status_completed_modules print("[Info] Waiting for level '" + str(level) + "' module build.") total_modules = len(current_level_modules) if level == 5: # In level 5 http takes around 30 min for PR build and build each # Changes timeout to 80 minutes MAX_WAIT_CYCLES = 140 if level == 6: # In level 6 c2c takes around 52 min for PR build and build each # Changes timeout to 140 minutes MAX_WAIT_CYCLES = 280 wait_cycles = 0 status_completed_modules = 0 while status_completed_modules != total_modules: for idx, module in enumerate(current_level_modules): if module[MODULE_STATUS] == MODULE_STATUS_IN_PROGRESS: if module[MODULE_CONCLUSION] == MODULE_CONCLUSION_PR_PENDING: check_pending_pr_checks(idx) else: # Build checks test check_pending_build_checks(idx) if wait_cycles < MAX_WAIT_CYCLES: time.sleep(SLEEP_INTERVAL) wait_cycles = wait_cycles + 1 else: # Force stop script with all in progress modules printed print( 'Dependency update script timed out. Following modules are in pending state' ) for module in current_level_modules: if module[MODULE_STATUS] == MODULE_STATUS_IN_PROGRESS: print(module['name']) sys.exit(1) module_release_failure = False chat_message_send = False chat_message = "Dependency update to lang version *" + lang_version + "*\n\n" print() pr_checks_failed_modules = list( filter( lambda s: s[MODULE_CONCLUSION] == MODULE_CONCLUSION_PR_CHECK_FAILURE, current_level_modules)) if len(pr_checks_failed_modules) != 0: module_release_failure = True pr_failed_message = 'Following modules\' Automated Dependency Update PRs have failed checks...' send_chat, partial_chat_message = get_chat_message( pr_checks_failed_modules, pr_failed_message, True) chat_message_send = chat_message_send or send_chat chat_message += partial_chat_message pr_merged_failed_modules = list( filter( lambda s: s[MODULE_CONCLUSION] == MODULE_CONCLUSION_PR_MERGE_FAILURE, current_level_modules)) if len(pr_merged_failed_modules) != 0: module_release_failure = True pr_merged_failed_message = 'Following modules\' Automated Dependency Update PRs could not be merged...' send_chat, partial_chat_message = get_chat_message( pr_merged_failed_modules, pr_merged_failed_message, True) chat_message_send = chat_message_send or send_chat chat_message += partial_chat_message build_checks_failed_modules = list( filter( lambda s: s[MODULE_CONCLUSION] == MODULE_CONCLUSION_BUILD_FAILURE, current_level_modules)) if len(build_checks_failed_modules) != 0: module_release_failure = True build_checks_failed_message = 'Following modules\' Timestamped Build checks have failed...' send_chat, partial_chat_message = get_chat_message( build_checks_failed_modules, build_checks_failed_message, False) chat_message_send = chat_message_send or send_chat chat_message += partial_chat_message build_version_failed_modules = list( filter( lambda s: s[MODULE_CONCLUSION ] == MODULE_CONCLUSION_VERSION_CANNOT_BE_IDENTIFIED, current_level_modules)) if len(build_version_failed_modules) != 0: module_release_failure = True build_version_failed_message = 'Following modules\' latest Timestamped Build Version cannot be identified...' send_chat, partial_chat_message = get_chat_message( build_version_failed_modules, build_version_failed_message, False) chat_message_send = chat_message_send or send_chat chat_message += partial_chat_message if is_stdlib_module: chat_message += "After following up on the above, trigger the <" + \ "https://github.com/ballerina-platform/ballerina-release/actions/workflows/update_dependency_version.yml" + \ "|Dependency Update Workflow>" if send_notification == 'true' and chat_message_send: print('Failing modules that is being notified:') print(utils.get_sanitised_chat_message(chat_message)) notify_chat.send_message(chat_message) elif chat_message_send: print('Failing modules that is NOT being notified:') print(utils.get_sanitised_chat_message(chat_message)) if module_release_failure: sys.exit(1)