From 9fbd8318f0a161ad022d0af8dfd9906d001010b2 Mon Sep 17 00:00:00 2001 From: Ocasta Date: Tue, 4 Feb 2025 21:49:41 -0800 Subject: [PATCH] error handling when notes_start_index is invalid --- .../scripts/overwrite_changeset_changelog.py | 53 +++++++++++++++---- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/.github/scripts/overwrite_changeset_changelog.py b/.github/scripts/overwrite_changeset_changelog.py index eb3361bf2f..36fde943b4 100644 --- a/.github/scripts/overwrite_changeset_changelog.py +++ b/.github/scripts/overwrite_changeset_changelog.py @@ -31,13 +31,25 @@ NEW_CONTENT = os.environ.get("NEW_CONTENT", "") def overwrite_changelog_section(changelog_text: str, new_content: str): # Find the section for the specified version version_pattern = f"## {VERSION}\n" + bracketed_version_pattern = f"## [{VERSION}]\n" prev_version_pattern = f"## [{PREV_VERSION}]\n" print(f"latest version: {VERSION}") print(f"prev_version: {PREV_VERSION}") + # Try both unbracketed and bracketed version patterns version_index = changelog_text.find(version_pattern) if version_index == -1: - raise ValueError(f"Could not find version {VERSION} in changelog") + version_index = changelog_text.find(bracketed_version_pattern) + if version_index == -1: + # If version not found, add it at the top (after the first line) + first_newline = changelog_text.find('\n') + if first_newline == -1: + # If no newline found, just prepend + return f"## [{VERSION}]\n\n{changelog_text}" + return f"{changelog_text[:first_newline + 1]}## [{VERSION}]\n\n{changelog_text[first_newline + 1:]}" + else: + # Using bracketed version + version_pattern = bracketed_version_pattern notes_start_index = version_index + len(version_pattern) notes_end_index = changelog_text.find(prev_version_pattern, notes_start_index) if PREV_VERSION and prev_version_pattern in changelog_text else len(changelog_text) @@ -54,18 +66,37 @@ def overwrite_changelog_section(changelog_text: str, new_content: str): # Remove the first two lines from the regular changeset format, ex: \n### Patch Changes parsed_lines = "\n".join(changeset_lines[2:]) updated_changelog = changelog_text[:notes_start_index] + parsed_lines + changelog_text[notes_end_index:] + # Ensure version number is bracketed updated_changelog = updated_changelog.replace(f"## {VERSION}", f"## [{VERSION}]") return updated_changelog -with open(CHANGELOG_PATH, 'r') as f: - changelog_content = f.read() +try: + print(f"Reading changelog from: {CHANGELOG_PATH}") + with open(CHANGELOG_PATH, 'r') as f: + changelog_content = f.read() -new_changelog = overwrite_changelog_section(changelog_content, NEW_CONTENT) -print("----------------------------------------------------------------------------------") -print(new_changelog) -print("----------------------------------------------------------------------------------") -# Write back to CHANGELOG.md -with open(CHANGELOG_PATH, 'w') as f: - f.write(new_changelog) + print(f"Changelog content length: {len(changelog_content)} characters") + print("First 200 characters of changelog:") + print(changelog_content[:200]) + print("----------------------------------------------------------------------------------") -print(f"{CHANGELOG_PATH} updated successfully!") + new_changelog = overwrite_changelog_section(changelog_content, NEW_CONTENT) + + print("New changelog content:") + print("----------------------------------------------------------------------------------") + print(new_changelog) + print("----------------------------------------------------------------------------------") + + print(f"Writing updated changelog back to: {CHANGELOG_PATH}") + with open(CHANGELOG_PATH, 'w') as f: + f.write(new_changelog) + + print(f"{CHANGELOG_PATH} updated successfully!") + +except FileNotFoundError: + print(f"Error: Changelog file not found at {CHANGELOG_PATH}") + exit(1) +except Exception as e: + print(f"Error updating changelog: {str(e)}") + print(f"Current working directory: {os.getcwd()}") + exit(1)