feat: add release notes to github actions outputs by codejedi365 · Pull Request #1300 · python-semantic-release/python-semantic-release
@@ -1,20 +1,32 @@
from __future__ import annotations
from typing import TYPE_CHECKING import os from datetime import timezone from typing import TYPE_CHECKING, cast
import pytest from freezegun import freeze_time from pytest_lazy_fixtures.lazy_fixture import lf as lazy_fixture
from tests.const import MAIN_PROG_NAME, VERSION_SUBCMD from semantic_release.version.version import Version
from tests.const import EXAMPLE_PROJECT_LICENSE, MAIN_PROG_NAME, VERSION_SUBCMD from tests.fixtures.repos import ( repo_w_git_flow_w_alpha_prereleases_n_conventional_commits, ) from tests.util import actions_output_to_dict, assert_successful_exit_code
if TYPE_CHECKING: from tests.conftest import RunCliFn from tests.conftest import GetStableDateNowFn, RunCliFn from tests.fixtures.example_project import ExProjectDir from tests.fixtures.git_repo import BuiltRepoResult from tests.fixtures.git_repo import ( BuiltRepoResult, GenerateDefaultReleaseNotesFromDefFn, GetCfgValueFromDefFn, GetHvcsClientFromRepoDefFn, GetVersionsFromRepoBuildDefFn, SplitRepoActionsByReleaseTagsFn, )
@pytest.mark.parametrize( Expand All @@ -25,21 +37,56 @@ def test_version_writes_github_actions_output( repo_result: BuiltRepoResult, run_cli: RunCliFn, example_project_dir: ExProjectDir, get_cfg_value_from_def: GetCfgValueFromDefFn, get_hvcs_client_from_repo_def: GetHvcsClientFromRepoDefFn, generate_default_release_notes_from_def: GenerateDefaultReleaseNotesFromDefFn, split_repo_actions_by_release_tags: SplitRepoActionsByReleaseTagsFn, get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn, stable_now_date: GetStableDateNowFn, ): mock_output_file = example_project_dir / "action.out" repo_def = repo_result["definition"] tag_format_str = cast(str, get_cfg_value_from_def(repo_def, "tag_format_str")) all_versions = get_versions_from_repo_build_def(repo_def) latest_release_version = all_versions[-1] release_tag = tag_format_str.format(version=latest_release_version)
repo_actions_per_version = split_repo_actions_by_release_tags( repo_definition=repo_def, tag_format_str=tag_format_str, ) expected_gha_output = { "released": str(True).lower(), "version": "1.2.1", "tag": "v1.2.1", "version": latest_release_version, "tag": release_tag, "commit_sha": "0" * 40, "is_prerelease": str(False).lower(), "is_prerelease": str( Version.parse(latest_release_version).is_prerelease ).lower(), "release_notes": generate_default_release_notes_from_def( version_actions=repo_actions_per_version[release_tag], hvcs=get_hvcs_client_from_repo_def(repo_def), previous_version=( Version.parse(all_versions[-2]) if len(all_versions) > 1 else None ), license_name=EXAMPLE_PROJECT_LICENSE, mask_initial_release=get_cfg_value_from_def( repo_def, "mask_initial_release" ), ), }
# Remove the previous tag & version commit repo_result["repo"].git.tag(release_tag, delete=True) repo_result["repo"].git.reset("HEAD~1", hard=True)
# Act cli_cmd = [MAIN_PROG_NAME, VERSION_SUBCMD, "--patch", "--no-push"] result = run_cli( cli_cmd[1:], env={"GITHUB_OUTPUT": str(mock_output_file.resolve())} ) with freeze_time(stable_now_date().astimezone(timezone.utc)): cli_cmd = [MAIN_PROG_NAME, VERSION_SUBCMD, "--no-push"] result = run_cli( cli_cmd[1:], env={"GITHUB_OUTPUT": str(mock_output_file.resolve())} )
assert_successful_exit_code(result, cli_cmd)
# Update the expected output with the commit SHA Expand All @@ -51,9 +98,8 @@ def test_version_writes_github_actions_output( )
# Extract the output action_outputs = actions_output_to_dict( mock_output_file.read_text(encoding="utf-8") ) with open(mock_output_file, encoding="utf-8", newline=os.linesep) as rfd: action_outputs = actions_output_to_dict(rfd.read())
# Evaluate expected_keys = set(expected_gha_output.keys()) Expand All @@ -67,3 +113,7 @@ def test_version_writes_github_actions_output( assert expected_gha_output["tag"] == action_outputs["tag"] assert expected_gha_output["is_prerelease"] == action_outputs["is_prerelease"] assert expected_gha_output["commit_sha"] == action_outputs["commit_sha"] assert ( expected_gha_output["release_notes"].encode() == action_outputs["release_notes"].encode() )
from typing import TYPE_CHECKING import os from datetime import timezone from typing import TYPE_CHECKING, cast
import pytest from freezegun import freeze_time from pytest_lazy_fixtures.lazy_fixture import lf as lazy_fixture
from tests.const import MAIN_PROG_NAME, VERSION_SUBCMD from semantic_release.version.version import Version
from tests.const import EXAMPLE_PROJECT_LICENSE, MAIN_PROG_NAME, VERSION_SUBCMD from tests.fixtures.repos import ( repo_w_git_flow_w_alpha_prereleases_n_conventional_commits, ) from tests.util import actions_output_to_dict, assert_successful_exit_code
if TYPE_CHECKING: from tests.conftest import RunCliFn from tests.conftest import GetStableDateNowFn, RunCliFn from tests.fixtures.example_project import ExProjectDir from tests.fixtures.git_repo import BuiltRepoResult from tests.fixtures.git_repo import ( BuiltRepoResult, GenerateDefaultReleaseNotesFromDefFn, GetCfgValueFromDefFn, GetHvcsClientFromRepoDefFn, GetVersionsFromRepoBuildDefFn, SplitRepoActionsByReleaseTagsFn, )
@pytest.mark.parametrize( Expand All @@ -25,21 +37,56 @@ def test_version_writes_github_actions_output( repo_result: BuiltRepoResult, run_cli: RunCliFn, example_project_dir: ExProjectDir, get_cfg_value_from_def: GetCfgValueFromDefFn, get_hvcs_client_from_repo_def: GetHvcsClientFromRepoDefFn, generate_default_release_notes_from_def: GenerateDefaultReleaseNotesFromDefFn, split_repo_actions_by_release_tags: SplitRepoActionsByReleaseTagsFn, get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn, stable_now_date: GetStableDateNowFn, ): mock_output_file = example_project_dir / "action.out" repo_def = repo_result["definition"] tag_format_str = cast(str, get_cfg_value_from_def(repo_def, "tag_format_str")) all_versions = get_versions_from_repo_build_def(repo_def) latest_release_version = all_versions[-1] release_tag = tag_format_str.format(version=latest_release_version)
repo_actions_per_version = split_repo_actions_by_release_tags( repo_definition=repo_def, tag_format_str=tag_format_str, ) expected_gha_output = { "released": str(True).lower(), "version": "1.2.1", "tag": "v1.2.1", "version": latest_release_version, "tag": release_tag, "commit_sha": "0" * 40, "is_prerelease": str(False).lower(), "is_prerelease": str( Version.parse(latest_release_version).is_prerelease ).lower(), "release_notes": generate_default_release_notes_from_def( version_actions=repo_actions_per_version[release_tag], hvcs=get_hvcs_client_from_repo_def(repo_def), previous_version=( Version.parse(all_versions[-2]) if len(all_versions) > 1 else None ), license_name=EXAMPLE_PROJECT_LICENSE, mask_initial_release=get_cfg_value_from_def( repo_def, "mask_initial_release" ), ), }
# Remove the previous tag & version commit repo_result["repo"].git.tag(release_tag, delete=True) repo_result["repo"].git.reset("HEAD~1", hard=True)
# Act cli_cmd = [MAIN_PROG_NAME, VERSION_SUBCMD, "--patch", "--no-push"] result = run_cli( cli_cmd[1:], env={"GITHUB_OUTPUT": str(mock_output_file.resolve())} ) with freeze_time(stable_now_date().astimezone(timezone.utc)): cli_cmd = [MAIN_PROG_NAME, VERSION_SUBCMD, "--no-push"] result = run_cli( cli_cmd[1:], env={"GITHUB_OUTPUT": str(mock_output_file.resolve())} )
assert_successful_exit_code(result, cli_cmd)
# Update the expected output with the commit SHA Expand All @@ -51,9 +98,8 @@ def test_version_writes_github_actions_output( )
# Extract the output action_outputs = actions_output_to_dict( mock_output_file.read_text(encoding="utf-8") ) with open(mock_output_file, encoding="utf-8", newline=os.linesep) as rfd: action_outputs = actions_output_to_dict(rfd.read())
# Evaluate expected_keys = set(expected_gha_output.keys()) Expand All @@ -67,3 +113,7 @@ def test_version_writes_github_actions_output( assert expected_gha_output["tag"] == action_outputs["tag"] assert expected_gha_output["is_prerelease"] == action_outputs["is_prerelease"] assert expected_gha_output["commit_sha"] == action_outputs["commit_sha"] assert ( expected_gha_output["release_notes"].encode() == action_outputs["release_notes"].encode() )