From d28e5ab7e32240a8c5fb4b9b24273c84c9965245 Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Tue, 9 May 2023 11:21:19 +0200 Subject: [PATCH] the command 'sg_mbp_build' now creates and copies a release message for dev builds --- work_helpers/sg_mbp_build.py | 67 ++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/work_helpers/sg_mbp_build.py b/work_helpers/sg_mbp_build.py index ce6db9f..74d4518 100644 --- a/work_helpers/sg_mbp_build.py +++ b/work_helpers/sg_mbp_build.py @@ -1,5 +1,6 @@ import click import shutil +import pyperclip from pathlib import Path from datetime import datetime @@ -104,10 +105,12 @@ def create_changelog_entry(new_version, parent=PATH_ISSUES): with changelog.open("w") as fh: fh.write(CRLF.join(content)) +def get_changelog_path(): + textfiles = _files_in_folder(PATH_ISSUES, ".txt") + return next(f for f in textfiles if f.stem.lower().startswith("change")) def copy_changelog(destination, build_version): - textfiles = _files_in_folder(PATH_ISSUES, ".txt") - changelog = next(f for f in textfiles if f.stem.lower().startswith("change")) + changelog = get_changelog_path() new_path = destination / f"CHANGELOG {build_version}.txt" print(changelog.name, "->", new_path) shutil.copyfile(changelog, new_path) @@ -134,16 +137,70 @@ def copy_workbooks(destination, build_version): shutil.copyfile(excel_file, new_path) +def collect_current_frms(build_version): + all_folders = (f for f in PATH_WORKBOOKS.iterdir() if f.is_dir()) + all_frms = (f for f in all_folders if "frm" in f.name.lower()) + return [f for f in all_frms if f.name.endswith(build_version)] + + def copy_frms(destination, build_version): all_folders = (f for f in PATH_WORKBOOKS.iterdir() if f.is_dir()) all_frms = (f for f in all_folders if "frm" in f.name.lower()) - current_frms = (f for f in all_frms if f.name.endswith(build_version)) + current_frms = collect_current_frms(build_version) for folder in current_frms: new_path = destination / folder.name print(folder.name, "->", new_path) shutil.copytree(folder, new_path) +def get_issue_numbers(build_version): + for path in collect_current_frms(build_version): + rest, issue_info = path.name.lower().split("issue") + issue, *rest = issue_info.strip().split() + yield issue.strip(" ,") + + +def extract_changes_from_log(build_version): + issue_numbers = set(get_issue_numbers(build_version)) + changelog = get_changelog_path() + for line in changelog.read_text().splitlines(): + for issue in issue_numbers: + if issue in line: + yield line + + +def get_announcement_text(dev_version, build_version, new_folder_name): + if not dev_version: + return "This is an official release, the message must be hand crafted" + + latest = get_latest_version() + changes = list(extract_changes_from_log(build_version)) + if len(changes) == 1: + change_msg = "Only one change was introduced:" + else: + change_msg = "The changes made:" + + text = [ + f"# New MBP Workbook Version {build_version}", + "Good News Everyone,", + f"there is a new workbook version available: {build_version}", + ( + f"As indicated by the letter '{dev_version}' at the end," + " this version is intended for Freiburg only." + ), + change_msg, + "\n".join(changes), + "You can find this version at our Freiburg Shared Drive:", + ( + "Google Drive / Shared drives / Freiburg / Workbooks / MBP Workbooks /" + f" {latest} /" + f" {new_folder_name}" + ), + "Cheers,\nHolgi" + ] + return "\n\n".join(text) + + @click.command() @click.option( "-v", @@ -199,3 +256,7 @@ def sg_mbp_build(dev_version): copy_workbook_changelogs(new_folder_path, latest, build_version) copy_changelog(new_folder_path, build_version) copy_frms(new_folder_path, build_version) + + announcement = get_announcement_text(dev_version, build_version, new_folder_name) + pyperclip.copy(announcement) + print(announcement) \ No newline at end of file