Public Access
feat: add refactoring label bypass for check_pr_size
PRs with the 'refactoring' label bypass the PR size check, allowing large but legitimate refactoring PRs. The check_pr_size CLI now accepts --repo and --pr-number to query PR labels via the Gitea API. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent
0de18ebb21
commit
53c4823e04
@@ -8,6 +8,7 @@ from devx.ci.check_pr_size import (
|
||||
check_size,
|
||||
cli,
|
||||
get_diff_stats,
|
||||
has_refactoring_label,
|
||||
is_excluded,
|
||||
)
|
||||
|
||||
@@ -130,3 +131,39 @@ class TestCli:
|
||||
result = runner.invoke(cli, ["--base", "origin/master", "--head", "HEAD", "--max-lines", "500"])
|
||||
assert result.exit_code != 0
|
||||
assert "600" in result.output
|
||||
|
||||
@patch("devx.ci.check_pr_size.subprocess.run")
|
||||
@patch("devx.ci.check_pr_size.has_refactoring_label", return_value=True)
|
||||
def test_bypasses_with_refactoring_label(self, mock_label: MagicMock, mock_run: MagicMock) -> None:
|
||||
mock_run.return_value = MagicMock(
|
||||
returncode=0,
|
||||
stdout="300\t300\tsrc/main.py\n",
|
||||
stderr="",
|
||||
)
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(
|
||||
cli,
|
||||
["--base", "origin/master", "--head", "HEAD", "--repo", "owner/repo", "--pr-number", "42"],
|
||||
)
|
||||
assert result.exit_code == 0
|
||||
assert "bypassed" in result.output.lower()
|
||||
|
||||
|
||||
class TestHasRefactoringLabel:
|
||||
@patch("devx.ci.check_pr_size.GiteaClient")
|
||||
@patch("devx.ci.check_pr_size.get_ci_token", return_value="fake-token")
|
||||
def test_returns_true_when_label_present(self, mock_token: MagicMock, mock_client_cls: MagicMock) -> None:
|
||||
mock_client = mock_client_cls.return_value
|
||||
mock_client.get_pr.return_value = {"labels": [{"name": "refactoring"}, {"name": "bug"}]}
|
||||
assert has_refactoring_label("owner/repo", 42) is True
|
||||
|
||||
@patch("devx.ci.check_pr_size.GiteaClient")
|
||||
@patch("devx.ci.check_pr_size.get_ci_token", return_value="fake-token")
|
||||
def test_returns_false_when_label_absent(self, mock_token: MagicMock, mock_client_cls: MagicMock) -> None:
|
||||
mock_client = mock_client_cls.return_value
|
||||
mock_client.get_pr.return_value = {"labels": [{"name": "bug"}]}
|
||||
assert has_refactoring_label("owner/repo", 42) is False
|
||||
|
||||
@patch("devx.ci.check_pr_size.get_ci_token", side_effect=Exception("no token"))
|
||||
def test_returns_false_on_error(self, mock_token: MagicMock) -> None:
|
||||
assert has_refactoring_label("owner/repo", 42) is False
|
||||
|
||||
Reference in New Issue
Block a user