Skip to content

Commit 703fbbe

Browse files
authored
Add a utility to get the latest draft release for a given repo (#301)
1 parent 1727d1d commit 703fbbe

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

jupyter_releaser/tests/test_functions.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pathlib import Path
77

88
import toml
9+
from ghapi.core import GhApi
910

1011
from jupyter_releaser import changelog, npm, util
1112
from jupyter_releaser.tests import util as testutil
@@ -321,3 +322,11 @@ def test_get_config_npm(npm_package):
321322
def test_get_config_file(git_repo):
322323
config = util.read_config()
323324
assert "before-build-python" in config["hooks"]["before-build-python"]
325+
326+
327+
def test_get_latest_draft_release(mocker, open_mock):
328+
open_mock.side_effect = [testutil.MockHTTPResponse([testutil.REPO_DATA, testutil.REPO_DATA_2])]
329+
gh = GhApi()
330+
latest = util.lastest_draft_release(gh)
331+
assert latest.name == testutil.REPO_DATA_2["name"]
332+
assert len(open_mock.call_args) == 2

jupyter_releaser/tests/util.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,15 @@ def tbump_py_template(package_name="foo"):
176176
draft=True,
177177
created_at="2013-02-27T19:35:32Z",
178178
)
179+
REPO_DATA_2 = dict(
180+
body="bar",
181+
tag_name=f"v{VERSION_SPEC}",
182+
target_commitish="bar",
183+
name="foo2",
184+
prerelease=False,
185+
draft=True,
186+
created_at="2013-02-27T20:35:32Z",
187+
)
179188

180189

181190
def mock_changelog_entry(package_path, runner, mocker, version_spec=VERSION_SPEC):

jupyter_releaser/util.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import tempfile
1414
import time
1515
import warnings
16+
from datetime import datetime
1617
from glob import glob
1718
from pathlib import Path
1819
from subprocess import PIPE, CalledProcessError, check_output
@@ -320,6 +321,23 @@ def release_for_url(gh, url):
320321
return release
321322

322323

324+
def lastest_draft_release(gh):
325+
"""Get the latest draft release for a given repo"""
326+
newest_time = None
327+
newest_release = None
328+
for release in gh.repos.list_releases():
329+
if str(release.draft).lower() == "false":
330+
continue
331+
created = release.created_at
332+
d_created = datetime.strptime(created, r"%Y-%m-%dT%H:%M:%SZ")
333+
if newest_time is None or d_created > newest_time:
334+
newest_time = d_created
335+
newest_release = release
336+
if not newest_release:
337+
raise ValueError("No draft releases found")
338+
return newest_release
339+
340+
323341
def actions_output(name, value):
324342
"Print the special GitHub Actions `::set-output` line for `name::value`"
325343
log(f"\n\nSetting output {name}={value}")

0 commit comments

Comments
 (0)