From 81527c6731033237828f2eecf5fc1b5854c63b63 Mon Sep 17 00:00:00 2001 From: codejedi365 Date: Sun, 5 Jul 2026 11:26:19 -0600 Subject: [PATCH 1/2] style: adjust implementation & tests to suppress warnings & type errors --- src/semantic_release/helpers.py | 2 +- tests/conftest.py | 4 ++-- tests/e2e/test_main.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/semantic_release/helpers.py b/src/semantic_release/helpers.py index 8ec505a16..5df443955 100644 --- a/src/semantic_release/helpers.py +++ b/src/semantic_release/helpers.py @@ -94,7 +94,7 @@ def text_reducer(text: str, filter_pair: tuple[Pattern[str], str]) -> str: def validate_types_in_sequence( - sequence: Sequence, types: type | tuple[type, ...] + sequence: Sequence[Any], types: type | tuple[type, ...] ) -> bool: """Validate that all elements in a sequence are of a specific type""" return all(isinstance(item, types) for item in sequence) diff --git a/tests/conftest.py b/tests/conftest.py index 90f21339d..1cdea68a0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,13 +7,13 @@ import sys from datetime import datetime, timedelta, timezone from hashlib import md5 +from importlib.metadata import version as get_package_version from pathlib import Path from tempfile import NamedTemporaryFile from typing import TYPE_CHECKING, cast from unittest import mock import pytest -from click import __version__ as click_version from click.testing import CliRunner from filelock import FileLock from git import Commit, Repo @@ -197,7 +197,7 @@ def pytest_collection_modifyitems(config: pytest.Config, items: list[pytest.Item def get_cli_runner() -> CliRunner: return ( CliRunner() - if tuple(map(int, click_version.split("."))) >= (8, 2, 0) + if tuple(map(int, get_package_version("click").split("."))) >= (8, 2, 0) else CliRunner(mix_stderr=False) # type: ignore[call-arg] ) diff --git a/tests/e2e/test_main.py b/tests/e2e/test_main.py index 86d60b57b..cb9d2e05d 100644 --- a/tests/e2e/test_main.py +++ b/tests/e2e/test_main.py @@ -2,6 +2,7 @@ import json import subprocess +from importlib.metadata import version as get_package_version from pathlib import Path from shutil import rmtree from textwrap import dedent @@ -9,7 +10,6 @@ import git import pytest -from click import __version__ as click_version from click.testing import CliRunner from pytest_lazy_fixtures.lazy_fixture import lf as lazy_fixture @@ -67,7 +67,7 @@ def test_main_no_args_passes_w_help_text(): cli_cmd = [MAIN_PROG_NAME] result = CliRunner().invoke(main, prog_name=cli_cmd[0]) - if tuple(map(int, click_version.split("."))) >= (8, 2, 0): + if tuple(map(int, get_package_version("click").split("."))) >= (8, 2, 0): assert_exit_code(2, result, cli_cmd) else: assert_successful_exit_code(result, cli_cmd) From 5e8f94c3d81ccf17598af8a77659dd31df2ea403 Mon Sep 17 00:00:00 2001 From: Frank Goldfish Date: Sun, 5 Jul 2026 11:41:43 -0700 Subject: [PATCH 2/2] fix(cmd-version): fix non-styled error msg when strict & no new version (#1437) When `semantic-release version` is run with `--strict` and no new commits have been found, the error message containing Rich markup ([bold orange1]...) was passed to `click.echo()`, causing the markup tags to be printed literally rather than rendered as formatted text. Resolves: #1423 * test(cmd-version): modify strict test to not include rich color modifier --------- Co-authored-by: frankgoldfish Co-authored-by: codejedi365 Signed-off-by: codejedi365 --- src/semantic_release/cli/commands/version.py | 13 ++++--------- tests/e2e/cmd_version/test_version_strict.py | 4 +++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/semantic_release/cli/commands/version.py b/src/semantic_release/cli/commands/version.py index 7a6fa26ef..d83be9894 100644 --- a/src/semantic_release/cli/commands/version.py +++ b/src/semantic_release/cli/commands/version.py @@ -591,19 +591,14 @@ def version( # noqa: C901 # If the new version has already been released, we fail and abort if strict; # otherwise we exit with 0. if new_version in previously_released_versions: - err_msg = str.join( - " ", - [ - "[bold orange1]No release will be made,", - f"{new_version!s} has already been released!", - ], - ) + err_msg = f"No release will be made, {new_version!s} has already been released!" + orange1_code = 214 # https://rich.readthedocs.io/en/stable/appendix/colors.html if opts.strict: - click.echo(err_msg, err=True) + click.secho(err_msg, err=True, fg=orange1_code, bold=True) ctx.exit(2) - rprint(err_msg) + click.secho(err_msg, err=True, fg=orange1_code, bold=True) return if print_only or print_only_tag: diff --git a/tests/e2e/cmd_version/test_version_strict.py b/tests/e2e/cmd_version/test_version_strict.py index e90970bd3..dcdfb099b 100644 --- a/tests/e2e/cmd_version/test_version_strict.py +++ b/tests/e2e/cmd_version/test_version_strict.py @@ -44,7 +44,9 @@ def test_version_already_released_when_strict( latest_release_version = get_versions_from_repo_build_def( repo_result["definition"] )[-1] - expected_error_msg = f"[bold orange1]No release will be made, {latest_release_version} has already been released!" + expected_error_msg = ( + f"No release will be made, {latest_release_version} has already been released!" + ) # Setup: take measurement before running the version command repo_status_before = repo.git.status(short=True)