Skip to content

Commit d4fe333

Browse files
committed
Use PyGithub to create and locate releases
1 parent 77109a6 commit d4fe333

3 files changed

Lines changed: 29 additions & 25 deletions

File tree

cookie_python/manage/release.py

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,10 @@
66

77

88
def release_patch_version(repo: RepoSandbox) -> None:
9-
releases = (
10-
repo.run(
11-
["gh", "release", "list"],
12-
capture_output=True,
13-
check=True,
14-
)
15-
.stdout.decode("utf-8")
16-
.splitlines()
17-
)
18-
latest_tag = None
19-
for line in releases:
20-
tag, status, *_ = line.split()
21-
if status.lower() == "latest":
22-
latest_tag = tag
23-
break
24-
if not latest_tag:
25-
repo.logger.warning("Unable to find latest version")
26-
return None
27-
check_refs = ["origin/main", latest_tag]
9+
if not repo.latest_release:
10+
repo.logger.warning("Unable to find latest release version")
11+
return
12+
check_refs = ["origin/main", repo.latest_release]
2813
refs = []
2914
for ref in check_refs:
3015
refs.append(
@@ -33,17 +18,18 @@ def release_patch_version(repo: RepoSandbox) -> None:
3318
.strip()
3419
)
3520
if len(refs) == len(check_refs) and len(set(refs)) == 1:
36-
repo.logger.info(f"No new changes since latest release {latest_tag}")
37-
return None
38-
sv = semver.VersionInfo.parse(latest_tag.lstrip("v"))
21+
repo.logger.info(
22+
f"No new changes since latest release {repo.latest_release}"
23+
)
24+
return
25+
sv = semver.VersionInfo.parse(repo.latest_release.lstrip("v"))
3926
next_patch_ver = sv.bump_patch()
4027
new_tag = f"v{next_patch_ver}"
4128
if repo.dry_run:
4229
repo.logger.success(f"Would release new version {new_tag}")
43-
return None
44-
repo.run(["gh", "release", "create", new_tag, "--generate-notes"])
30+
return
31+
repo.create_release(new_tag)
4532
repo.logger.success(f"Released new version {new_tag}")
46-
return None
4733

4834

4935
def release_action(args: Namespace) -> None:

cookie_python/manage/repo.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,23 @@ def __exit__(
3838
def gh(self) -> GithubRepo:
3939
return GithubRepo()
4040

41+
@cached_property
42+
def latest_release(self) -> str:
43+
return self.repo.get_latest_release().title
44+
45+
def create_release(self, tag: str) -> None:
46+
print(f"Should create release {tag}")
47+
# PyGithub's repository create_tag_and_release() doesn't support
48+
# generate_release_notes
49+
self.repo._requester.requestJsonAndCheck( # type: ignore
50+
"POST",
51+
f"/repos/{self.repo.full_name}/releases",
52+
input={
53+
"tag_name": tag,
54+
"generate_release_notes": True,
55+
},
56+
)
57+
4158
@cached_property
4259
def logger(self) -> "loguru.Logger":
4360
return loguru.logger.bind(repo=self.repo.full_name)

tests/test_manage_cookie.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def mock_pygithub(new_cookie: Path) -> Iterator[MagicMock]:
7979
)
8080
],
8181
),
82+
get_latest_release=lambda: SimpleNamespace(title="v1.1.38"),
8283
)
8384
yield obj
8485

0 commit comments

Comments
 (0)