From 8f1967c4878f6696e3dc2ac0392b3cd412a8a395 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Sat, 29 Aug 2026 10:49:19 +0000 Subject: [PATCH] fix: prevent unhandled ValueError for invalid slug --- codecov_cli/helpers/encoder.py | 10 +++++++++- tests/helpers/test_encoder.py | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/codecov_cli/helpers/encoder.py b/codecov_cli/helpers/encoder.py index 167a817e0..19eb54a1f 100644 --- a/codecov_cli/helpers/encoder.py +++ b/codecov_cli/helpers/encoder.py @@ -1,13 +1,21 @@ import re +import click + slug_without_subgroups_regex = re.compile(r"[^/\s]+\/[^/\s]+$") slug_with_subgroups_regex = re.compile(r"[^/\s]+(\/[^/\s]+)+$") encoded_slug_regex = re.compile(r"[^:\s]+(:::[^:\s]+)*(::::[^:\s]+){1}$") def encode_slug(slug: str): + if slug is None: + raise click.ClickException( + "Slug is required. Provide it via --slug or ensure CI environment variables are set." + ) if slug_with_subgroups_is_invalid(slug): - raise ValueError("The provided slug is invalid") + raise click.ClickException( + "The provided slug is invalid. Expected format: owner/repo or owner/subgroup/repo." + ) owner, repo = slug.rsplit("/", 1) encoded_owner = ":::".join(owner.split("/")) encoded_slug = "::::".join([encoded_owner, repo]) diff --git a/tests/helpers/test_encoder.py b/tests/helpers/test_encoder.py index cc1854874..05d37cd38 100644 --- a/tests/helpers/test_encoder.py +++ b/tests/helpers/test_encoder.py @@ -1,3 +1,4 @@ +import click import pytest from codecov_cli.helpers.encoder import ( @@ -21,7 +22,7 @@ ], ) def test_encode_invalid_slug(slug): - with pytest.raises(ValueError): + with pytest.raises(click.ClickException): encode_slug(slug)