From de16c096ea77683e1036f72c1de056436c60c40e Mon Sep 17 00:00:00 2001 From: Nathaniel Landau Date: Mon, 17 Jun 2024 17:37:12 -0400 Subject: [PATCH] fix(changelog): don't repost version on bot connect (#156) --- src/valentina/models/bot.py | 1 + src/valentina/models/changelog.py | 17 ++++++++++-- tests/models/test_changelog.py | 45 +++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/valentina/models/bot.py b/src/valentina/models/bot.py index dfd99d15..4f761b29 100644 --- a/src/valentina/models/bot.py +++ b/src/valentina/models/bot.py @@ -515,6 +515,7 @@ async def post_changelog_to_guild(self, guild: discord.Guild) -> None: oldest_version=db_guild.changelog_posted_version, newest_version=db_global_properties.most_recent_version, with_personality=True, + exclude_oldest_version=True, ) except errors.VersionNotFoundError: logger.error(f"CHANGELOG: Could not find version {self.version} in the changelog") diff --git a/src/valentina/models/changelog.py b/src/valentina/models/changelog.py index 7bf7eca9..13fb21f3 100644 --- a/src/valentina/models/changelog.py +++ b/src/valentina/models/changelog.py @@ -35,6 +35,7 @@ def __init__( oldest_version: str | None = None, newest_version: str | None = None, with_personality: bool = False, + exclude_oldest_version: bool = False, ): self.exclude_categories = exclud_cagegories self.bot = bot @@ -46,6 +47,7 @@ def __init__( exclude_categories=self.exclude_categories, oldest_version=oldest_version, newest_version=newest_version, + exclude_oldest_version=exclude_oldest_version, ) self.oldest_version, self.newest_version = self._validate_versions( @@ -159,6 +161,7 @@ def __init__( oldest_version: str | None = None, newest_version: str | None = None, exclude_categories: list[str] = [], + exclude_oldest_version: bool = False, ): self.path = CHANGELOG_PATH self.bot = bot @@ -175,6 +178,8 @@ def __init__( "build", ] self.exclude_categories = exclude_categories + self.exclude_oldest_version = exclude_oldest_version + self.oldest_version = ( (oldest_version if self.__check_version_schema(oldest_version) else None) if oldest_version @@ -203,7 +208,7 @@ def __get_changelog(self) -> str: return self.path.read_text() - def __parse_changelog(self) -> dict[str, dict[str, str | list[str]]]: + def __parse_changelog(self) -> dict[str, dict[str, str | list[str]]]: # noqa: C901 """Parse the changelog into a dictionary. Loop through each line in the changelog, identifying the version and category of each entry. @@ -231,6 +236,14 @@ def __parse_changelog(self) -> dict[str, dict[str, str | list[str]]]: if version_match := version_re.match(line): version_being_parsed = version_match.group(1) + # When requested, do not parse the oldest version + # This is used when automatically posting the changelog on bot connect + if self.exclude_oldest_version and semver.Version.parse( + version_being_parsed + ) == semver.Version.parse(self.oldest_version): + parse_version = False + continue + if ( semver.Version.parse(version_being_parsed) >= semver.Version.parse(self.oldest_version) @@ -314,7 +327,7 @@ def list_of_versions(self) -> list[str]: Returns: list[str]: A list of all versions in the changelog. """ - return list(self.changelog_dict.keys()) + return sorted(self.changelog_dict.keys(), key=semver.Version.parse, reverse=True) def get_text(self) -> str: """Generate a text version of the changelog.""" diff --git a/tests/models/test_changelog.py b/tests/models/test_changelog.py index 3e22f99e..eb7d7172 100644 --- a/tests/models/test_changelog.py +++ b/tests/models/test_changelog.py @@ -253,6 +253,51 @@ def test_changelog_get_embed(changelog, mock_bot): # noqa: ARG001 - Lorem ipsum dolor sit amet +---- +View the [full changelog on Github](https://github.com/natelandau/valentina/releases) +""" + ) + + +def test_changelog_get_embed_exclude_oldest(changelog, mock_bot): # noqa: ARG001 + """Test the ChangelogParser get_embed method with exclude_oldest.""" + parser = ChangelogParser( + mock_bot, oldest_version="1.1.0", newest_version="2.0.0", exclude_oldest_version=True + ) + + embed = parser.get_embed() + + assert ( + embed.description + == """\ +## Valentina Noir Changelog +### v2.0.0 (2023-11-04) + +**Feat** +- Lorem ipsum dolor sit amet +- Lorem ipsum dolor sit amet + +**Fix** +- Lorem ipsum dolor sit amet +- Lorem ipsum dolor sit amet + +**Test** +- Lorem ipsum dolor sit amet +- Lorem ipsum dolor sit amet + +**Build** +- Lorem ipsum dolor sit amet +- Lorem ipsum dolor sit amet + +**Ci** +- Lorem ipsum dolor sit amet +- Lorem ipsum dolor sit amet + +**Chore** +- Lorem ipsum dolor sit amet +- Lorem ipsum dolor sit amet + + ---- View the [full changelog on Github](https://github.com/natelandau/valentina/releases) """