Skip to content

Commit a5a79b1

Browse files
committed
Better Handling of Already Existing Packages
1 parent 5eb2608 commit a5a79b1

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

jupyter_releaser/lib.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,13 @@ def publish_assets(dist_dir, npm_token, npm_cmd, twine_cmd, dry_run, use_checkou
384384
try:
385385
util.run(f"{npm_cmd} {name}", cwd=dist_dir, quiet=True)
386386
except CalledProcessError as e:
387-
if "EPUBLISHCONFLICT" not in e.stderr.decode("utf-8"):
388-
raise e
387+
stderr = e.stderr.decode("utf-8")
388+
if (
389+
"EPUBLISHCONFLICT" in stderr
390+
or "previously published versions" in stderr
391+
):
392+
continue
393+
raise e
389394
found = True
390395
else:
391396
util.log(f"Nothing to upload for {name}")

jupyter_releaser/tests/test_cli.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,10 +527,11 @@ def test_publish_assets_npm_exists(npm_dist, runner, mocker):
527527
def wrapped(cmd, **kwargs):
528528
nonlocal called
529529
if cmd.startswith("npm publish --dry-run"):
530-
err = CalledProcessError(1, "foo")
531-
err.stderr = "EPUBLISHCONFLICT".encode("UTF-8")
532530
called += 1
533-
raise err
531+
if called == 0:
532+
err = CalledProcessError(1, "foo")
533+
err.stderr = "EPUBLISHCONFLICT".encode("UTF-8")
534+
raise err
534535

535536
mock_run = mocker.patch("jupyter_releaser.util.run", wraps=wrapped)
536537

@@ -549,6 +550,36 @@ def wrapped(cmd, **kwargs):
549550
assert called == 3, called
550551

551552

553+
def test_publish_assets_npm_all_exists(npm_dist, runner, mocker):
554+
dist_dir = npm_dist / util.CHECKOUT_NAME / "dist"
555+
called = 0
556+
557+
def wrapped(cmd, **kwargs):
558+
nonlocal called
559+
if cmd.startswith("npm publish --dry-run"):
560+
called += 1
561+
err = CalledProcessError(1, "foo")
562+
err.stderr = "previously published versions".encode("UTF-8")
563+
raise err
564+
565+
mocker.patch("jupyter_releaser.util.run", wraps=wrapped)
566+
567+
with pytest.raises(ValueError):
568+
runner(
569+
[
570+
"publish-assets",
571+
"--npm-token",
572+
"abc",
573+
"--npm-cmd",
574+
"npm publish --dry-run",
575+
"--dist-dir",
576+
dist_dir,
577+
]
578+
)
579+
580+
assert called == 3, called
581+
582+
552583
def test_publish_release(npm_dist, runner, mocker, open_mock):
553584
open_mock.side_effect = [MockHTTPResponse([REPO_DATA]), MockHTTPResponse()]
554585
dist_dir = npm_dist / util.CHECKOUT_NAME / "dist"

0 commit comments

Comments
 (0)