Skip to content

Commit 5f87607

Browse files
committed
semver support for release notes
1 parent 880f538 commit 5f87607

File tree

2 files changed

+79
-36
lines changed

2 files changed

+79
-36
lines changed

src/gardenlinux/github/release_notes/sections.py

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -98,41 +98,48 @@ def release_notes_software_components_section(package_list):
9898

9999

100100
def release_notes_compare_package_versions_section(gardenlinux_version, package_list):
101-
output = ""
102101
version_components = gardenlinux_version.split(".")
103-
# Assumes we always have version numbers like 1443.2
104-
if len(version_components) == 2:
105-
try:
106-
major = int(version_components[0])
107-
patch = int(version_components[1])
108-
109-
if patch > 0:
110-
previous_version = f"{major}.{patch - 1}"
111-
112-
output += (
113-
f"## Changes in Package Versions Compared to {previous_version}\n"
114-
)
115-
output += compare_apt_repo_versions(
116-
previous_version, gardenlinux_version
117-
)
118-
elif patch == 0:
119-
output += f"## Full List of Packages in Garden Linux version {major}\n"
120-
output += "<details><summary>Expand to see full list</summary>\n"
121-
output += "<pre>"
122-
output += "\n"
123-
for entry in package_list.values():
124-
output += f"{entry!r}\n"
125-
output += "</pre>"
126-
output += "\n</details>\n\n"
127-
128-
except ValueError:
129-
LOGGER.error(
130-
f"Could not parse {gardenlinux_version} as the Garden Linux version, skipping version compare section"
131-
)
132-
else:
102+
if len(version_components) > 3 or len(version_components) < 2:
103+
LOGGER.error(
104+
f"Unexpected version number format {gardenlinux_version}"
105+
)
106+
return
107+
if not all(map(lambda x: x.isdigit(), version_components)):
133108
LOGGER.error(
134-
f"Unexpected version number format {gardenlinux_version}, expected format (major is int).(patch is int)"
109+
f"Unexpected version number format {gardenlinux_version}"
110+
)
111+
return
112+
113+
if len(version_components) == 2:
114+
major = int(version_components[0])
115+
minor = None
116+
patch = int(version_components[1])
117+
if len(version_components) == 3:
118+
major = int(version_components[0])
119+
minor = int(version_components[1])
120+
patch = int(version_components[2])
121+
122+
output = ""
123+
124+
if patch > 0:
125+
previous_version = f"{major}.{minor}.{patch - 1}" if minor else f"{major}.{patch - 1}"
126+
127+
output += (
128+
f"## Changes in Package Versions Compared to {previous_version}\n"
129+
)
130+
output += compare_apt_repo_versions(
131+
previous_version, gardenlinux_version
135132
)
133+
elif patch == 0:
134+
output += f"## Full List of Packages in Garden Linux version {gardenlinux_version}\n"
135+
output += "<details><summary>Expand to see full list</summary>\n"
136+
output += "<pre>"
137+
output += "\n"
138+
for entry in package_list.values():
139+
output += f"{entry!r}\n"
140+
output += "</pre>"
141+
output += "\n</details>\n\n"
142+
136143
return output
137144

138145

tests/github/test_create_github_release_notes.py

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,48 @@ def test_release_notes_changes_section_broken_glvd_response():
4747
"Expected a placeholder message to be generated if GVLD response is not valid"
4848

4949

50-
def test_release_notes_compare_package_versions_section_semver_is_not_recognized():
51-
assert release_notes_compare_package_versions_section("1.2.0", []) == "", "Semver is not supported"
50+
def test_release_notes_compare_package_versions_section_legacy_versioning_is_recognized():
51+
assert "Full List of Packages in Garden Linux version 1.0" in \
52+
release_notes_compare_package_versions_section("1.0", {}), "Legacy versioning is supported"
5253

5354

54-
def test_release_notes_compare_package_versions_section_unrecognizable_version():
55-
assert release_notes_compare_package_versions_section("garden.linux", []) == ""
55+
def test_release_notes_compare_package_versions_section_legacy_versioning_patch_release_is_recognized(monkeypatch):
56+
def mock_compare_apt_repo_versions(previous_version, current_version):
57+
output = f"| Package | {previous_version} | {current_version} |\n"
58+
output += "|---------|--------------------|-------------------|\n"
59+
output += "|containerd|1.0|1.1|\n"
60+
return output
61+
62+
monkeypatch.setattr("gardenlinux.github.release_notes.sections.compare_apt_repo_versions",
63+
mock_compare_apt_repo_versions)
64+
65+
assert "|containerd|1.0|1.1|" in \
66+
release_notes_compare_package_versions_section("1.1", {}), "Legacy versioning patch releases are supported"
67+
68+
69+
def test_release_notes_compare_package_versions_section_semver_is_recognized():
70+
assert "Full List of Packages in Garden Linux version 1.20.0" in \
71+
release_notes_compare_package_versions_section("1.20.0", {}), "Semver is supported"
72+
73+
74+
def test_release_notes_compare_package_versions_section_semver_patch_release_is_recognized(monkeypatch):
75+
def mock_compare_apt_repo_versions(previous_version, current_version):
76+
output = f"| Package | {previous_version} | {current_version} |\n"
77+
output += "|---------|--------------------|-------------------|\n"
78+
output += "|containerd|1.0|1.1|\n"
79+
return output
80+
81+
monkeypatch.setattr("gardenlinux.github.release_notes.sections.compare_apt_repo_versions",
82+
mock_compare_apt_repo_versions)
83+
84+
assert "|containerd|1.0|1.1|" in \
85+
release_notes_compare_package_versions_section("1.20.1", {}), "Semver patch releases are supported"
86+
87+
88+
def test_release_notes_compare_package_versions_section_unrecognizable_version(caplog):
89+
assert release_notes_compare_package_versions_section("garden.linux", {}) is None
90+
assert any("Unexpected version number format garden.linux" in
91+
record.message for record in caplog.records), "Expected an error log message"
5692

5793

5894
@pytest.mark.parametrize("flavor", TEST_FLAVORS)

0 commit comments

Comments
 (0)