mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
103 lines
4.4 KiB
Python
103 lines
4.4 KiB
Python
"""
|
|
This script updates a specific version's release notes section in CHANGELOG.md with new content
|
|
or reformats existing content.
|
|
|
|
The script:
|
|
1. Takes a version number, changelog path, and optionally new content as input from environment variables
|
|
2. Finds the section in the changelog for the specified version
|
|
3. Either:
|
|
a) Replaces the content with new content if provided, or
|
|
b) Reformats existing content by:
|
|
- Removing the first two lines of the changeset format
|
|
- Ensuring version numbers are wrapped in square brackets
|
|
4. Writes the updated changelog back to the file
|
|
|
|
Environment Variables:
|
|
CHANGELOG_PATH: Path to the changelog file (defaults to 'CHANGELOG.md')
|
|
VERSION: The version number to update/format
|
|
PREV_VERSION: The previous version number (used to locate section boundaries)
|
|
NEW_CONTENT: Optional new content to insert for this version
|
|
"""
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
|
|
CHANGELOG_PATH = os.environ.get("CHANGELOG_PATH", "CHANGELOG.md")
|
|
VERSION = os.environ['VERSION']
|
|
PREV_VERSION = os.environ.get("PREV_VERSION", "")
|
|
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:
|
|
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)
|
|
|
|
if new_content:
|
|
return changelog_text[:notes_start_index] + f"{new_content}\n" + changelog_text[notes_end_index:]
|
|
else:
|
|
changeset_lines = changelog_text[notes_start_index:notes_end_index].split("\n")
|
|
# Ensure we have at least 2 lines before removing them
|
|
if len(changeset_lines) < 2:
|
|
print("Warning: Changeset content has fewer than 2 lines")
|
|
parsed_lines = "\n".join(changeset_lines)
|
|
else:
|
|
# 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
|
|
|
|
try:
|
|
print(f"Reading changelog from: {CHANGELOG_PATH}")
|
|
with open(CHANGELOG_PATH, 'r') as f:
|
|
changelog_content = f.read()
|
|
|
|
print(f"Changelog content length: {len(changelog_content)} characters")
|
|
print("First 200 characters of changelog:")
|
|
print(changelog_content[:200])
|
|
print("----------------------------------------------------------------------------------")
|
|
|
|
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}")
|
|
sys.exit(1)
|
|
except Exception as e:
|
|
print(f"Error updating changelog: {str(e)}")
|
|
print(f"Current working directory: {os.getcwd()}")
|
|
sys.exit(1)
|