Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 5 additions & 14 deletions org-tools/triage/scripts/triage_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
logger = logging.getLogger("triage")

TARGET_LABEL = "status:needs-triage"
SKIP_LABELS = {"status:backlog", "status:stale", "status:under-review"}


def log_error(message: str, *args) -> None:
Expand Down Expand Up @@ -82,13 +81,8 @@ def triage_all_outstanding(self) -> None:
"""
logger.info("\nProcessing Repository: %s", self.repo.full_name)

# Construct query to filter out drafts and labeled/skip PRs at the API level.
exclude_labels_query = " ".join(
f"-label:{label}" for label in [TARGET_LABEL] + list(SKIP_LABELS)
)
query = (
f"is:pr is:open -is:draft {exclude_labels_query} repo:{self.repo.full_name}"
)
# Construct query to find PRs with no labels.
query = f"is:pr is:open -is:draft no:label repo:{self.repo.full_name}"
logger.info(" Search Query: %s", query)

try:
Expand Down Expand Up @@ -160,12 +154,9 @@ def _is_eligible_for_triage(self, pull: github.PullRequest.PullRequest) -> bool:
)
return False

for skip_label in SKIP_LABELS:
if skip_label in labels:
logger.info(
"Skipping: PR #%s has skip label '%s'.", pull.number, skip_label
)
return False
if len(labels) > 0:
logger.info("Skipping: PR #%s has other labels: %s", pull.number, labels)
return False

return True

Expand Down
21 changes: 17 additions & 4 deletions org-tools/triage/tests/test_triage_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,22 @@ def test_pr_with_under_review_label_should_not_be_triaged(self):

self.assertFalse(self.labeler._is_eligible_for_triage(pr))

def test_pr_with_generic_label_should_not_be_triaged(self):
"""Test that a PR carrying any generic label returns False."""
pr = Mock(spec=github.PullRequest.PullRequest)
pr.number = 1
pr.state = "open"
pr.draft = False
pr.requested_reviewers = []
pr.requested_teams = []
pr.get_reviews.return_value.totalCount = 0

mock_label = Mock()
mock_label.name = "some-random-label"
pr.labels = [mock_label]

self.assertFalse(self.labeler._is_eligible_for_triage(pr))


class TestTriageLabelerLabelApplication(unittest.TestCase):
"""Tests for applying the 'status:needs-triage' label to PRs on GitHub."""
Expand Down Expand Up @@ -269,10 +285,7 @@ def test_bulk_triage_verifies_search_query_structure(self):
self.assertIn("is:pr", query)
self.assertIn("is:open", query)
self.assertIn("-is:draft", query)
self.assertIn("-label:status:needs-triage", query)
self.assertIn("-label:status:backlog", query)
self.assertIn("-label:status:stale", query)
self.assertIn("-label:status:under-review", query)
self.assertIn("no:label", query)
self.assertIn("repo:mock-org/mock-repo", query)

def test_bulk_triage_raises_runtime_error_on_search_failure(self):
Expand Down
Loading